Mis compañeros Data Scientist ya han hecho un modelo de Machine Learning y ahora me toca a mi ponerlo en producción para los clientes y conseguir que escale de forma masiva. En esta charla vamos a ver el lado más ingenieril: decisiones tomadas, decisiones descartadas, cosas que no nos han funcionado (y por qué) y cómo nuestro viejo amigo PySpark nunca nos defrauda. Aprenderemos lo que son las UDFs de Spark y como utilizarlas en combinación con un modelo de LightGBM para hacer predicciones. Tambén veremos la importancia de poder iterar rápido y probar cosas utilizando Databricks.
1. Tengo 10 millones de series temporales
y tengo un modelo de Machine
Learning, ¿cómo encajo las piezas?
Inferencia a gran escala
1
Ricardo Guerrero Gómez-Olmedo
4. 4
¿Y quién es este señor que está
aquí?
● Soy Ricardo Guerrero
● Soy Ingeniero de Telecomunicaciones
● Trabajo en Nextail como Senior Machine
Learning Engineer
● Me encanta la temática vikinga
7. 7
Vamos a repasar un poco la agenda
1
2
3
¿Qué problema tengo que resolver?
Análisis de tecnologías
Experimentos
4 Conclusiones y recomendaciones
El código y los
bugs vienen aquí
9. 9
Flujo de Machine Learning
Atributos
Valor a
predecir
(Y)
Ingeniería de
variables
Variables (X)
.
.
.
Modelos de ML Métricas de
rendimiento y
metadatos
Prediccione
s
Interpretabilidad
10. 10
Flujo de Machine Learning
Atributos
Valor a
predecir
(Y)
Ingeniería de
variables
Variables (X)
.
.
.
Modelos de ML Métricas de
rendimiento y
metadatos
Prediccione
s
Interpretabilidad
11. 11
Flujo de Machine Learning
Atributos
Valor a
predecir
(Y)
Ingeniería de
variables
Variables (X)
.
.
.
Modelos de ML Métricas de
rendimiento y
metadatos
Prediccione
s
Interpretabilidad
12. 12
Flujo de Machine Learning
Atributos
Valor a
predecir
(Y)
Ingeniería de
variables
Variables (X)
.
.
.
Modelos de ML Métricas de
rendimiento y
metadatos
Prediccione
s
Interpretabilidad
13. 13
Flujo de Machine Learning
Atributos
Valor a
predecir
(Y)
Ingeniería de
variables
Variables (X)
.
.
.
Modelos de ML Métricas de
rendimiento y
metadatos
Prediccione
s
Interpretabilidad
14. 14
2 grandes bloques diferenciados
Atributos
Valor a
predecir
(Y)
Ingeniería de
variables
Variables (X)
.
.
.
Modelos de ML Métricas de
rendimiento y
metadatos
Prediccione
s
Interpretabilidad
Flujo de entrenamiento
Flujo de inferencia
20. 20
La tienda de la madre de
nuestro compañero Luis
500 productos al día
Santiago de Compostela
¿Cómo de grandes son nuestros datos?
21. 21
Cliente_1 (confidencial)
La tienda de la madre de nuestro
compañero Luis
500 productos al día
1
2
¿Cómo de grandes son nuestros datos?
Tienda madre de Luis
22. 22
Cliente_1 (confidencial)
La tienda de la madre de nuestro
compañero Luis
500 productos al día
Cliente_1 vende 1.6 billones de productos
al año
1
2
¿Cómo de grandes son nuestros datos?
Tienda madre de Luis
23. 23
Cliente_1 (confidencial)
La tienda de la madre de nuestro
compañero Luis
500 productos al día
Cliente_1 vende 1.6 billones de productos al
año
Para igualarlo, la madre de Luis tendría que
estar vendiendo durante ¡¡¡¡8700 años!!!
¿Cómo de grandes son nuestros datos?
1
2
Tienda madre de Luis
45. 45
Nos quedamos con Spark
¿Qué es? un motor de procesamiento de Big Data.
Funciona tanto en single node como en multi node
¿Qué hace? evaluación perezosa de las operaciones.
Gestiona la memoria y la carga de los datos
¿Caso de uso? ejecutar operaciones grandes y
complejas que no podemos hacer en Snowflake, por
ejemplo: inferencia de Machine Learning a escala
49. 49
¿Qué quiero probar?
1. Spark y Python -> buena decisión
1. Escala a decenas de millones de puntos
1. Robusto en producción, no Out-Of-Memory
(OOM)
1. Cuanto tarda y $$$
50. 50
Escenario de pruebas
Hacer inferencia sobre ficheros Parquet:
1. Un fichero único de tamaño normal
2. Un fichero grande (que no quepa en la
memoria)
3. Múltiples ficheros de tamaño normal
51. 51
Escenario de pruebas
1. Un fichero único de tamaño normal
2. Un fichero único grande (que no quepa en la
memoria)
3. Múltiples ficheros de tamaño normal
Escenario N filas Espacio en
disco *
Espacio en
memoria (RAM)
1. Único fichero
normal
2M (1.876.835) 74 MB - (no medido)
2. Único fichero
grande
66M
(65.689.225)
2.6 GB 54 GB (53.9)
3. Múltiples
ficheros
9M (9.384.175) 376 MB - (no medido)
* Acordaos de la
compresión Snappy
54. 54
UDF
UDF: User-Defined Function. No se ejecuta en
Spark sino que llama a un sistema externo.
Ventajas: grandísima flexibilidad
Desventajas: terriblemente lento
● Comunicación entre procesos de Scala
(JVM) y de Python (Py4J)
● Transferencia de datos
● Se ejecuta en el interprete de Python
(no en un código compilado y eficiente)
57. 57
Excepción para las UDFs
● Problema embarazosamente paralelo ->
Todas las filas son independientes
● Es muy complejo o inviable reconvertirlo a
código de Spark -> Modelo de ML
entrenado
58. 58
Excepción para las UDFs
● Problema embarazosamente paralelo ->
Todas las filas son independientes
● Es muy complejo o inviable reconvertirlo a
código de Spark -> Modelo de ML
entrenado
EXITO
60. 60
PySpark
PandasOn
Spark
● Ambas son nativas
● Ambas corren sobre el
motor de Spark (JVM,
grafo compilado, etc)
● Ambas funcionan igual de
bien y tienen el mismo
rendimiento
Diferencias: una usa la sintaxis
de Spark y otra la de Pandas
Código Spark: ¿qué API?
61. 61
● Ambas son nativas
● Ambas corren sobre el
motor de Spark (JVM,
grafo compilado, etc)
● Ambas funcionan igual de
bien y tienen el mismo
rendimiento
Esta es la teoría
Código Spark: ¿qué API?
?
64. 64
Resultados
Escenario N filas Espacio en
disco
Espacio en
memoria (RAM)
Pandas On Spark
Tiempo
1. Único fichero
normal
2M (1.876.835) 74 MB - (no medido) 9 minutos (8.55)
2. Único fichero
grande
66M
(65.689.225)
2.6 GB 54 GB (53.9) Fallido (sospecha
de OOM) *
3. Múltiples
ficheros
9M (9.384.175) 376 MB - (no medido) 43 minutos (42.57)
* Escenario 2:
“The spark driver has stopped
unexpectedly and is restarting. Your
notebook will be automatically
reattached.”
73. 73
Según la documentación de Spark
4 cosas importantes para crear
una UDF:
1. Recibe un iterador
2. Devuelve un iterador
3. Es un generador (usa yield
en vez de return)
4. Y no puede recibir ningún
otro parámetro
81. 81
Resultados
Escenario N filas Espacio en
disco
Espacio en
memoria (RAM)
Pandas On Spark
Tiempo
PySpark
Tiempo
1. Único fichero
normal
2M (1.876.835) 74 MB - (no medido) 9 minutos (8.55) 7 minutos
(6.89)
2. Único fichero
grande
66M
(65.689.225)
2.6 GB 54 GB (53.9) Fallido (sospecha
de OOM)
4 horas (3.86)
3. Múltiples
ficheros
9M (9.384.175) 376 MB - (no medido) 43 minutos (42.57) 35 minutos
(35.49)
85. 85
1. Evita HDD
“Es que según la documentación…”
Prueba, innova, pero…
1. No te fíes
2. Haz una PoC y valida
siempre
3. Saca tus propias
conclusiones