Funcionando en paralelo pitón de datos para la ciencia

La mayoría de los ordenadores de hoy en día son varios núcleos (dos o más procesadores en un solo paquete), algunas de ellas con múltiples CPU físicas. Una de las limitaciones más importantes de Python es que utiliza un solo núcleo de forma predeterminada. (Fue creado en un momento en que los núcleos individuales eran la norma.)

proyectos de ciencia de datos requieren un buen montón de cálculos. En particular, una parte del aspecto científico de la ciencia se basa en datos de pruebas y experimentos repetidos en diferentes matrices de datos. No hay que olvidar que el trabajo con grandes cantidades de datos significa que la mayoría de las transformaciones que requieren mucho tiempo de observación se repiten después de la observación (por ejemplo, las operaciones relacionadas idénticos y no en diferentes partes de una matriz).

El uso de más núcleos de CPU se acelera un cálculo por un factor que casi coincide con el número de núcleos. Por ejemplo, tener cuatro núcleos significaría trabajar en el mejor de cuatro veces más rápido. No se recibe un aumento de cuatro veces lleno porque hay una actividad general cuando se inicia un proceso paralelo - nuevas instancias de Python en ejecución tienen que ser establecido con la información correcta en la memoria y launched- en consecuencia, la mejora será menor que potencialmente alcanzable, pero todavía significativo.

Video: Diferencias entre Python 2 y Python 3

Saber utilizar más de una CPU, por tanto, es una habilidad avanzada, pero increíblemente útil para aumentar el número de análisis completados, y para acelerar sus operaciones tanto en la configuración y al utilizar los productos de datos.

Multiprocesamiento funciona mediante la reproducción del mismo contenido de código y la memoria en varios casos nuevos de Python (los trabajadores), el cálculo del resultado para cada uno de ellos, y la devolución de los resultados combinados a la consola original principal. Si su instancia original ya ocupa gran parte de la memoria RAM disponible, no será posible crear nuevas instancias, y su máquina puede quedarse sin memoria.

Video: TODO LO QUE NECESITAS PARA TENER A UNA PITON BOLA COMO MASCOTA

Realización de paralelismo multinúcleo

Para llevar a cabo el paralelismo de múltiples núcleos con Python, a integrar la scikit-learn paquete con el paquete JOBLIB para las operaciones que requieren mucho tiempo, como la replicación de modelos para la validación de resultados o para buscar las mejores hiper-parámetros. En particular, scikit-learn permite multiprocesamiento cuando

  • Validación cruzada: Prueba de los resultados de una hipótesis máquina de aprendizaje utilizando la formación diferente y datos de prueba

  • Rejilla-búsqueda: Sistemáticamente el cambio de los hiper-parámetros de una hipótesis de aprendizaje de máquinas y probar los resultados consiguientes

  • predicción Multilabel: Ejecutan un algoritmo varias veces contra múltiples objetivos cuando hay muchos diferentes resultados objetivo de predecir, al mismo tiempo

  • Ensemble métodos de aprendizaje automático: Modelado de una gran serie de clasificadores, cada una independiente de la otra, como cuando se utiliza randomForest-modelado basado

Usted no tiene que hacer nada especial para aprovechar los cálculos paralelos - puede activar el paralelismo estableciendo la n_jobs parámetro a un número de núcleos de más de 1 o estableciendo el valor a -1, lo que significa que desea utilizar todas las instancias de CPU disponibles.

Si no está ejecutando su código desde la consola o desde un portátil IPython, es extremadamente importante que separar el código de cualquier paquete de importación o asignación variable global en su secuencia de comandos con el Si __name __ ==__principal__: orden al principio de cualquier código que se ejecuta el paralelismo de múltiples núcleos. los Si cheques declaración si el programa se ejecuta directamente o es llamado por una consola Python ya se encuentra corriendo, evitando cualquier confusión o error en el proceso de multiparalela (como llamar de forma recursiva el paralelismo).

multiprocesamiento demostrando

Es una buena idea usar IPython cuando se ejecuta una demostración de cómo multiprocesamiento realmente le puede ahorrar tiempo durante los proyectos de ciencia de datos. Usando IPython ofrece la ventaja de utilizar la %cronométralo comando mágico para medir el tiempo de ejecución. Se empieza por la carga de un conjunto de datos multiclase, un complejo algoritmo de aprendizaje automático (el clasificador de vectores de soporte, o SVC), y un procedimiento de validación cruzada para estimar las puntuaciones resultantes fiables de todos los procedimientos.

Lo más importante a saber es que los procedimientos se hacen bastante grande debido a que el SVC produce 10 modelos, que se repite 10 veces utilizando cada uno de validación cruzada, para un total de 100 modelos.

de sklearn.datasets importar load_digitsdigits = load_digits () X, Y = digits.data, digits.targetfrom sklearn.svm importación SVCfrom sklearn.cross_validation importación cross_val_score% timeit single_core_learning = cross_val_score (SVC (), X, Y, CV = 20, n_jobs = 1) de salida [1]: 1 bucles, mejor de 3: 17.9 s por bucle

Después de esta prueba, es necesario activar el paralelismo de múltiples núcleos y el tiempo los resultados utilizando los siguientes comandos:

Video: Pitón Bola - Alimentación (Alimento vivo)

% Timeit multi_core_learning = cross_val_score (SVC (), X, Y, CV = 20, n_jobs = -1) Fuera [2]: 1 bucles, mejor de 3: 11.7 s por lazo

La máquina de ejemplo demuestra una ventaja positiva utilizando el procesamiento de múltiples núcleos, a pesar de utilizar un pequeño conjunto de datos donde Python pasa la mayor parte del tiempo de arranque consolas y funcionamiento de una parte del código en cada uno. Esta sobrecarga, unos pocos segundos, es todavía significativo, dado que la ejecución total de se extiende por un puñado de segundos. Imagínese lo que pasaría si trabajó con grandes conjuntos de datos - el tiempo de ejecución puede ser fácilmente reducido en dos o tres veces.

Aunque el código funciona bien con IPython, ponerla en el suelo en un script Python y pidiendo a ejecutar en una consola o usando un IDE puede causar errores a causa de las operaciones internas de una tarea de múltiples núcleos. La solución es poner todo el código bajo una Si declaración, que comprueba si el programa se inició directamente y no fue llamado después. He aquí un ejemplo de script:

de sklearn.datasets importar load_digitsfrom importación sklearn.svm importación SVCfrom sklearn.cross_validation cross_val_scoreif __name__ == `__main __`: Dígitos = load_digits () X, Y = digits.data, digits.targetmulti_core_learning = cross_val_score (SVC (), X, Y, CV = 20, n_jobs = -1)
Artículos Relacionados