У меня есть программа python pandas. Когда я запускаю AWS Ec2 с 8 ядрами. Я получил 100% загрузку процессора, и программа завершилась за 8 минут. Тогда, если я использую 16 ядер, я могу получить только 50% загрузки процессора, а программа все равно будет завершена за 8 минут. Я подозреваю, что это ограничивает пропускную способность памяти, поэтому я выбрал экземпляр X1,16xlarge с 64 ядрами и заявленной пропускной способностью памяти 300 ГБ / с. Однако это не помогло. программа использовала крошечный процент из 64 ядер и не завершила работу даже через 10 минут. Экземпляр ec2 X1
Есть идеи, что происходит?
(кстати, та же программа, работающая на моем старом настольном корпусе Tower с 4 ядрами, завершилась за 16 минут)
подробнее: программа использует GridSearchCV, который затем использует Joblib для параллельной работы с несколькими процессорами. Количество процессов всегда равно количеству ядер в системе.
Python имеет «глобальную блокировку интерпретатора», которая ограничивает его способность эффективно использовать несколько потоков. Один ответил на этом сайте, что вам следует подумать о написании критических по времени функций на C / C ++.
Если возможно, подумайте о том, чтобы разбить анализ на более мелкие фрагменты, а затем запускать их как отдельные процессы, чтобы избежать проблемы глобальной блокировки интерпретатора.