En la mayoría de los estimadores en scikit-learn, hay un n_jobs
parámetro en fit
/ predict
métodos para crear trabajos paralelos utilizando joblib
. Noté que configurarlo -1
crea solo 1 proceso de Python y maximiza los núcleos, lo que hace que el uso de la CPU alcance el 2500% en la parte superior. Esto es bastante diferente de establecerlo en algún entero positivo> 1, que crea múltiples procesos de Python con un uso de ~ 100%.
¿Cómo afecta su configuración al uso de CPU y núcleo en un servidor Linux con múltiples CPU? (por ejemplo, si n_jobs=8
entonces hay 8 CPU totalmente bloqueadas o las CPU aún reservan algunos núcleos para otras tareas / procesos?)
Además, MemoryError
ocasionalmente me pongo al configurar n_jobs=-1
grandes conjuntos de datos. Sin embargo, el uso de memoria generalmente oscila entre el 30 y el 40% para el proceso de Python. ¿Cómo se gestionan / copian los datos y la memoria según el valor de n_jobs
?
fuente
Respuestas:
Me imagino que un valor de
-1
consume todos los recursos disponibles cuando estén disponibles. Según la función de la que esté hablando, parece que los datos se copian para cada uno de los trabajos, lo que puede provocar problemas de memoria si el conjunto de datos es lo suficientemente grande. Aquí hay un fragmento de información de la cadena de documentos de GridSearchCV :Por lo tanto, podría ser una buena idea usar
pre_dispatch
para poner un límite superior en el consumo de memoria.De lo contrario, ¿por qué lo está configurando
-1
? Debe configurarlo en la cantidad de núcleos físicos en su máquina, o tal vez 2 veces ese número, si la tarea puede ser multiproceso.EDITAR:
Parece que la configuración
n_jobs=-1
solo selecciona todos los núcleos físicos y maximiza su uso. Eche un vistazo a los comentarios en esta respuesta en StackOverflow .Si no lo ha configurado
pre_dispatch
, por supuesto intentará copiar mucho. Por eso te quedas sin memoria. Si tiene 4 núcleos, habrá, de forma predeterminada, 8 copias del conjunto de datos realizado (como se describe anteriormente en la cotización).Aquí hay otro hilo , que se ve más en el lado del rendimiento
fuente
n_jobs = -1
no tendrá en cuenta la memoria, solo la cantidad de núcleos en su CPU, lo que, por supuesto, puede provocar problemas de memoria.