Anúncio
Anúncio

Mais conteúdo relacionado

Similar a Ricardo - Meetup Python Madrid marzo 2023.pptx(20)

Anúncio

Ricardo - Meetup Python Madrid marzo 2023.pptx

  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
  2. 2 Una pregunta ¿Habéis oído hablar de los dos estados del programador?
  3. 3 Los 2 estados del programador
  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
  5. 5 Trabajo con modelos
  6. 6 Trabajo con modelos… matemáticos
  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í
  8. 1 8 ¿Qué problema tengo que resolver?
  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
  15. 15 Inferencia 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
  16. 16 ¿Cómo es nuestro problema?
  17. 17 1) Desventajas (o retos)
  18. 18 Gran volumetría
  19. 19 ¿Pero cómo de grandes?
  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
  24. 24 Gran volumetría: conclusión Gran reto No valen apaños Necesitamos herramientas adecuadas
  25. 25 2) Ventajas
  26. 26 Nuestro problema es paralelizable
  27. 27 ¿Paralelizable? Pero si son series temporales
  28. 28 Ejemplo didáctico: generamos serie
  29. 29 Ejemplo didáctico: transformamos
  30. 30 Ejemplo didáctico: transformamos
  31. 31 X Y Ejemplo didáctico: transformamos
  32. 32 Ejemplo didáctico: transformamos
  33. 33 Patrón: Embarazosamente paralelo
  34. 34 El problema ya está definido y acotado 1. Necesidad de herramientas especializadas. Gran volumetría 2. Trabajo embarazosamente paralelo
  35. 2 35 Análisis de la tecnología
  36. 36 ¿Herramientas nativas cloud? AWS - Sagemaker GCP - Vertex AI
  37. 37 ¿Herramientas nativas cloud? GCP - Vertex AI AWS - Sagemaker Estrategia multicloud Muy buena idea, pero …
  38. 38 ¿Snowflake? Ya lo estamos usando, es nuestro Data Warehouse. Lo tenemos todo ahí
  39. 39 ¿Snowflake? Machine Learning No es muy buena idea
  40. 40 ¿Snowpark?
  41. 41 ¿Snowpark? Muy buena idea, pero … 1. No versión estable (en aquel momento) 2. No conocimiento en la compañía
  42. 42 ¿Entonces por donde tiramos? ¿Bucles for + batches? ¿Django + colas de Celery? Trabajo artesano, que funciona bien … O podemos …
  43. 43 ¿Entonces por donde tiramos?
  44. 44 ¿Spark? Barbol, Merry y Pippin El señor de los anillos
  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
  46. 46 ¿Y es difícil empezar?
  47. 47 ¿Es difícil empezar? Existe versión community (gratis)
  48. 3 48 Experimentos
  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
  52. 52 Escenario de pruebas Máquina: r5.large (16 gb ram, 2 cores) Cliente: Cliente_1 Columnas totales: 71 columnas Variables del modelo: 59 columnas Modelo: LightGBM
  53. 53 ¿Y cómo diseñamos el código? ¿Alguien en la sala sabe lo que es una UDF?
  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)
  55. 55 ¿Cuando usamos una UDF?
  56. 56 ¿Cuando usamos una UDF?
  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
  59. 59 Código Spark: ¿qué API? PySpark PandasOnSpark
  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? ?
  62. 62 Empezamos con PandasOnSpark PandasOnSpark
  63. 63 Tras un tiempo programando…
  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.”
  65. 65 Los 2 estados del programador
  66. 66 Pasan los días
  67. 67 PandasOnSpark PySpark
  68. 68 Es que hay un bug en la API La API de PandasOnSpark intenta cargar todo el fichero en memoria Fichero: 54 gb Memoria: 16 gb
  69. 69 Los 2 estados del programador
  70. 70 Continuamos con PySpark PySpark
  71. 71 Enseñame ya el código Vale, ahora si CODE
  72. 72 Según la documentación de Spark
  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
  74. 74 Mi bonita UDF que hace predicciones
  75. 75 Como aplicar una UDF a un Spark Dataframe
  76. 76 Mi bonita UDF que hace predicciones
  77. 77 Problema No puede funcionar Los parámetros no coinciden No estamos siguiendo las reglas
  78. 78 Los 2 estados del programador
  79. 79 Python avanzado
  80. 80 Python avanzado EXITO
  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)
  82. 82 Los 2 estados del programador
  83. 4 83 Conclusiones y recomendaciones
  84. 84 1. HDD: Hype-Driven Development “He visto esta tecnología en un blog…”
  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
  86. 86 2. Haz pruebas de concepto, itera rápido ● Python ● Notebooks ● Databricks
  87. 87 3. Prueba de concepto != Producción PoC Producción Cuidado con la gestión de expectativas
  88. 88 4. ¿Cuales son tus herramientas? No tenemos esto Tenemos todo esto ¿Todo en Snowflake? ¿Todo en Spark?
  89. 89 5. Las UDFs molan mucho… pero con precaución No valen para todo… Pero si encuentras el caso de uso…
  90. - 90 Y por último…
  91. 91 ¿Alguna pregunta?
  92. 92 Gracias por venir www.linkedin.com/in/ricgu8086 ricgu8086@gmail.com @ricgu8086
  93. 93
Anúncio