gargalo da garrafa de memória

1

Eu tenho um programa de pandas python. Quando eu executo no AWS Ec2 com 8 núcleos. Eu tenho 100% de utilização da CPU e o programa foi concluído em 8 minutos. Então, se eu for 16 núcleos, só posso obter 50% de utilização da CPU e o programa ainda terminará em 8 minutos. Eu suspeito que ele atinge o gargalo da largura de banda da memória, então eu selecionei a instância X1, 16x maior que tem 64 núcleos e reivindicou a largura de banda de memória de 300GB / s. No entanto, isso não ajudou. o programa usou uma pequena porcentagem dos 64 núcleos e não terminou nem depois de 10 minutos. instância ec2 X1

Alguma ideia do que está acontecendo?

(a propósito, o mesmo programa rodando na minha antiga torre de desktop com 4 núcleos terminados em 16 minutos)

mais detalhes: o programa usa o GridSearchCV, que então usa o joblib para executar o multiprocessamento em paralelo. O número de processos sempre é igual ao número de núcleos no sistema.

    
por frank 22.03.2018 / 08:07

1 resposta

1

O Python possui um "bloqueio global de intérprete" que limita sua capacidade de utilizar vários segmentos de maneira eficiente. Um respondeu neste site que você deve considerar escrever funções críticas de tempo em C / C ++.

Se possível, considere dividir sua análise em partes menores e, em seguida, executá-las como processos separados para evitar o problema de bloqueio global do intérprete.

    
por 22.03.2018 / 20:28