agosto 1, 2021

Final del experimento principal de Ars AI: hemos llegado, hemos visto, hemos utilizado mucho tiempo de cálculo

Final del experimento principal de Ars AI: llegamos, vimos, usamos mucho tiempo de cálculo

Aurich Lawson | imágenes falsas

Es posible que hayamos mordido más de lo que podíamos masticar, amigos.

Un ingeniero de Amazon me dijo que cuando escuchó lo que estaba tratando de hacer con los títulos de Ars, lo primero que pensó fue que habíamos elegido un problema aparentemente difícil. Advirtió que tenía que tener cuidado de establecer correctamente mis expectativas. Si se trataba de un problema empresarial real … bueno, lo mejor que podía hacer era sugerir que reformulara el problema de «título bueno o malo» a algo menos concreto.

Esta declaración fue la forma más concisa y concisa para que las familias enmarquen el resultado de mi curso intensivo de cuatro semanas a tiempo parcial sobre aprendizaje automático. A partir de ahora, mis núcleos de PyTorch no son tanto antorchas como fuegos de basura. La precisión ha mejorado ligeramente gracias a la intervención profesional, pero no estoy ni cerca de implementar una solución funcional. Hoy, dado que supuestamente estoy de vacaciones visitando a mis padres por primera vez en más de un año, me senté en un sofá en su sala de estar trabajando en este proyecto y accidentalmente lancé un trabajo de capacitación de modelo local en la computadora portátil Dell que traje, con un CPU Intel Core i3 7100U de 2,4 GHz, en lugar de la copia de SageMaker del mismo portátil Jupyter. El Dell se estrelló tanto que tuve que sacar la batería para reiniciarlo.

Pero bueno, si la máquina no está necesariamente aprendiendo, al menos yo lo estoy. Ya casi terminamos, pero si esto fuera una prueba de clase, mi calificación de expediente probablemente sería «Incompleta».

La pandilla prueba algo de aprendizaje automático

En resumen: se me han proporcionado los pares de títulos utilizados para los artículos de Ars en los últimos cinco años con los datos sobre los ganadores de la prueba A / B y sus tasas relativas de clics. Luego se me pidió que usara SageMaker de Amazon Web Services para crear un algoritmo de aprendizaje automático para predecir el ganador en futuros pares de títulos. Terminé atravesando algunos callejones sin salida de ML antes de consultar varias fuentes de Amazon para obtener la ayuda que tanto necesitaba.

La mayoría de las piezas están en su lugar para completar este proyecto. Nosotros (más precisamente, mi línea de vida de «llamar a un amigo en AWS») hemos tenido cierto éxito con diferentes enfoques de modelado, aunque la calificación de precisión (justo al norte del 70%) no fue tan definitiva como uno quisiera. Tengo suficiente con qué trabajar para producir (con un poco de esfuerzo adicional) un modelo distribuido y un código para hacer predicciones sobre pares de valores si tomo sus notas y uso los algoritmos creados en consecuencia.

Pero tengo que ser honesto: mis esfuerzos por reproducir ese trabajo tanto en mi servidor local como en SageMaker han fallado. En el proceso de modificar las complejidades de SageMaker (incluido olvidar apagar los portátiles, ejecutar procesos de aprendizaje automático que luego me recomendaron que fueran para «clientes comerciales» y otros errores), he gastado más presupuesto de AWS del que me gustaría. mía, cómoda para gastar dinero en una aventura sin fondos. Y aunque entiendo intelectualmente cómo desplegar los modelos que son el resultado de todo este futzing, todavía estoy depurando la ejecución real de esa distribución.

Al menos, este proyecto se ha convertido en una lección muy interesante sobre todas las formas en que los proyectos de aprendizaje automático (y las personas detrás de ellos) pueden fallar. Y esta vez la falla comenzó con los datos en sí, o incluso con la pregunta que decidimos hacer con ellos.

Todavía podría obtener una solución funcional de este esfuerzo. Pero mientras tanto, compartiré el conjunto de datos en mi GitHub con el que he estado trabajando para proporcionar un componente más interactivo a esta aventura. Si puede obtener mejores resultados, asegúrese de unirse a nosotros la próxima semana para burlarse de mí en la conclusión en vivo de esta serie. (Más detalles sobre esto al final).

Pegamento para modelar

Después de varias iteraciones de ajuste fino del modelo SqueezeBert que usamos en nuestro intento redirigido de entrenar para los títulos, el conjunto resultante logró consistentemente una precisión del 66% en las pruebas, un poco menos de lo que se sugirió anteriormente por encima del 70% de la promesa.

Esto incluyó esfuerzos para reducir el tamaño de los pasos tomados entre los ciclos de aprendizaje para ajustar las entradas: el hiperparámetro de «tasa de aprendizaje» utilizado para evitar sobreajustar o desajustar el modelo. Hemos reducido sustancialmente la velocidad de aprendizaje, porque cuando tiene una pequeña cantidad de datos (como lo hacemos aquí) y la velocidad de aprendizaje es demasiado alta, se harán suposiciones más amplias en términos de la estructura y sintaxis del conjunto de datos. . Una reducción que obliga al modelo a ajustar esos saltos a pequeños, pequeños pasos. Nuestra tasa de aprendizaje original se estableció en 2×10-5 (2E-5); lo reducimos a 1E-5.

También probamos un modelo mucho más grande que había sido previamente entrenado en una gran cantidad de texto, llamado DeBERTa (decodificación BERT mejorada con atención centrada). DeBERTa es un modelo muy sofisticado: 48 niveles de transformación con 1.500 millones de parámetros.

DeBERTa es tan imaginativo que superó a los humanos en tareas de comprensión del lenguaje natural en el punto de referencia SuperGLUE, el primer modelo en hacerlo.

El paquete de distribución resultante también es bastante pesado: 2,9 gigabytes. Con todo este peso adicional del aprendizaje automático, logramos una precisión del 72%. Teniendo en cuenta que DeBERTa es supuestamente mejor que un humano cuando se trata de identificar el significado dentro del texto, esta precisión es, como dijo una vez un famoso operador de una planta de energía nuclear, «ni genial, ni terrible».

Distribución de la espiral de la muerte

Además, el tiempo se estaba acabando. Necesitaba intentar poner en funcionamiento mi versión para probar con datos reales.

Un intento de implementación local no tuvo éxito, especialmente desde el punto de vista del rendimiento. Sin una buena GPU disponible, los trabajos de PyTorch que ejecutan el modelo y el punto final literalmente colapsaron mi sistema.

Entonces, volví a intentar implementar en SageMaker. Intenté hacer el trabajo de modelado SqueezeBert más pequeño en SageMaker yo mismo, pero rápidamente se volvió más complicado. El entrenamiento requiere PyTorch, el marco de aprendizaje automático de Python, así como una colección de otros módulos. Pero cuando importé los diversos módulos de Python requeridos a mi kernel de SageMaker PyTorch, no coincidieron claramente a pesar de las actualizaciones.

Como resultado, algunas partes del código que se ejecutaban en mi servidor local fallaron y mis esfuerzos se vieron empantanados en un atolladero de enredo de dependencias. Resultó ser un problema con una versión de la biblioteca NumPy, excepto cuando forcé una reinstalación (pip uninstall numpy, pip install numpy -no-cache-dir), la versión era la misma y el error persistía. Finalmente resolví el problema, pero luego me encontré con otro error que me impidió hacer el trabajo de capacitación y me pidió que me pusiera en contacto con el servicio de atención al cliente:

ResourceLimitExceeded: An error occurred (ResourceLimitExceeded) when calling the CreateTrainingJob operation: The account-level service limit 'ml.p3.2xlarge for training job usage' is 0 Instances, with current utilization of 0 Instances and a request delta of 1 Instances. Please contact AWS support to request an increase for this limit.

Para completar completamente este esfuerzo, necesitaba que Amazon aumentara mi cuota, algo que no había anticipado cuando comencé a desconectar. Es una solución simple, pero resolver los conflictos del formulario tomó la mayor parte del día. Y el tiempo se agotó mientras intentaba utilizar la plantilla prediseñada proporcionada por mi ayuda experta, implementándola como un punto final de SageMaker.

Este esfuerzo está ahora en horas extraordinarias. Aquí es donde habría discutido cómo le fue al modelo en las pruebas con pares recientes de títulos, si alguna vez llevé el modelo a ese punto. Si finalmente logro hacerlo, pondré el resultado en los comentarios y una nota en mi página de GitHub.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *