¿Scikit-learn admite paralelismo, es decir, se puede usar en un grupo de máquinas que ejecutan tareas en paralelo?

Scikit-learn tiene cierto soporte de paralelismo multinúcleo integrado en una sola máquina utilizando joblib para cosas como la búsqueda de cuadrícula de hiperparámetros y la validación cruzada.

Para hacer lo mismo en un clúster pequeño, su mejor opción es probablemente usar el paquete paralelo de ipython que se basa en zeromq en lugar de joblib. La clase GridSearchCV es bastante fácil de reescribir para usar ipython.

El lanzamiento de un clúster tan pequeño en EC2 se puede hacer con las herramientas StarCluster de MIT.

** Editar **: Hace poco hice una presentación sobre el tema con diapositivas:

https://speakerdeck.com/ogrisel/…

y un cuaderno de demostración IPython:

http://nbviewer.ipython.org/5115…

El código fuente de la clase de utilidad utilizada para la selección de modelos paralelos en este cuaderno está ahí:

https://gist.github.com/ogrisel/…

** Descargo de responsabilidad ** Trabajo para SigOpt como ingeniero de investigación

Para complementar la excelente respuesta de Olivier, me gustaría agregar que hemos escrito una pequeña envoltura para ayudar a los usuarios a ajustar los hiperparámetros de varios modelos de clasificación de aprendizaje scikit en paralelo usando el servicio de optimización bayesiano de SigOpt.

Este paquete solo es adecuado para entrenar / ajustar modelos simultáneamente en una sola máquina, similar a las clases GridSearchCV y RandomizedSearchCV en scikit-learn, pero para muchos conjuntos de datos, las instancias más grandes en AWS no tendrán problemas para ajustar todo en la memoria y ofrecerán más de suficientes núcleos de CPU para soportar los esfuerzos paralelos. Puede verificar el código aquí: sigopt / sigopt_sklearn

También hice un breve tutorial sobre cómo usar el paquete y configurar su entorno en una instancia EC2 aquí:

Puede probar las cosas fácilmente con nuestra versión de prueba gratuita, así que si le resulta útil, ¡nos encantaría saberlo!