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

Final del experimento de titulares 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 titulares de Ars, lo primero que pensó fue que habíamos elegido un problema engañosamente difícil. Me advirtió que tenía que tener cuidado al establecer correctamente mis expectativas. Si se trataba de un problema empresarial real … bueno, lo mejor que podía hacer era sugerir que se reformulara el problema de “titular bueno o malo” a algo menos concreto.

Esa declaración fue la forma más concisa y familiar de enmarcar el resultado de mi curso intensivo de cuatro semanas a tiempo parcial sobre aprendizaje automático. A partir de este momento, 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 que funcione. Hoy, como 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 modelo localmente en la computadora portátil Dell que traje, con un CPU Intel Core i3 7100U de 2,4 GHz, en lugar de en la copia de SageMaker del mismo portátil Jupyter. El Dell se bloqueó con tanta fuerza que tuve que sacar la batería para reiniciarlo.

Pero bueno, si la máquina no está necesariamente aprendiendo, al menos yo lo estoy. Estamos casi al final, pero si esta fuera una tarea de clase, mi calificación en la transcripción probablemente sería “Incompleta”.

La pandilla prueba algo de aprendizaje automático

En resumen: me dieron los pares de titulares utilizados para los artículos de Ars durante los últimos cinco años con datos sobre los ganadores de la prueba A / B y sus tasas de clics relativas. 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 titulares. Terminé yendo por 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 terminar este proyecto. Nosotros (más exactamente, mi línea de vida de “llamar a un amigo en AWS”) tuvimos cierto éxito con diferentes enfoques de modelado, aunque la calificación de precisión (justo al norte del 70 por ciento) no fue tan definitiva como uno quisiera. Tengo lo suficiente con lo que trabajar para producir (con algo de esfuerzo adicional) un modelo y código implementados para ejecutar predicciones en pares de titulares si tomo sus notas y uso los algoritmos creados como resultado.

Pero tengo que ser honesto: mis esfuerzos por reproducir ese trabajo tanto en mi propio servidor local como en SageMaker han fracasado. En el proceso de tantear mi camino a través de las complejidades de SageMaker (incluido olvidar apagar los portátiles, ejecutar procesos de aprendizaje automatizados que luego me dijeron que eran para “clientes empresariales” y otros errores), he gastado más presupuesto de AWS del que me sentiría cómodo gastando en una aventura sin fondos. Y si bien entiendo intelectualmente cómo implementar los modelos que han resultado de todo esto, todavía estoy depurando la ejecución real de esa implementació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 el fracaso esta vez comenzó con los datos en sí, o incluso con la pregunta que decidimos hacer con ellos.

Todavía puedo obtener una solución funcional de este esfuerzo. Pero mientras tanto, voy a compartir el conjunto de datos en mi GitHub con el que trabajé 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 el resumen en vivo de esta serie. (Más detalles sobre eso al final).

Pegamento de modelador

Después de varias iteraciones de ajuste del SqueezeBert modelo que usamos en nuestro intento redirigido de entrenar para los titulares, el conjunto resultante obtenía consistentemente una precisión del 66 por ciento en las pruebas, algo menos que la promesa por encima del 70 por ciento sugerida anteriormente.

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” que se usa para evitar el sobreajuste o el desajuste del modelo. Redujimos la tasa de aprendizaje sustancialmente, porque cuando tiene una pequeña cantidad de datos (como lo hacemos aquí) y la tasa de aprendizaje es demasiado alta, básicamente hará suposiciones más grandes en términos de la estructura y sintaxis del conjunto de datos. Reducir eso obliga al modelo a ajustar esos saltos a pequeños pasos de bebé. Nuestra tasa de aprendizaje original se estableció en 2×10-5 (2E-5); lo redujimos a 1E-5.

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

DeBERTa es tan elegante que tiene superaron a los humanos en tareas de comprensión del lenguaje natural en el Punto de referencia de SuperGLUE—El primer modelo en hacerlo.

El paquete de implementación resultante también es bastante considerable: 2,9 gigabytes. Con todo ese peso adicional del aprendizaje automático, obtuvimos una precisión de hasta el 72 por ciento. Teniendo en cuenta que DeBERTa es supuestamente mejor que un humano cuando se trata de detectar el significado dentro del texto, esta precisión, como dijo una vez un famoso operador de una planta de energía nuclear, “no es excelente, no es terrible”.

Espiral de la muerte del despliegue

Además de eso, el reloj seguía corriendo. Necesitaba intentar tener una versión propia en funcionamiento para probar con datos reales.

Un intento de implementación local no fue bien, particularmente desde la perspectiva del desempeño. Sin una buena GPU disponible, los trabajos de PyTorch que ejecutaban el modelo y el punto final literalmente detuvieron mi sistema.

Entonces, volví a intentar implementar en SageMaker. Intenté ejecutar el trabajo de modelado SqueezeBert más pequeño en SageMaker por mi cuenta, pero rápidamente se volvió más complicado. La formación requiere PyTorch, el marco de trabajo 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, partes del código que funcionaban en mi servidor local fallaron y mis esfuerzos se vieron empantanados en un enredo de dependencia. 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 lo solucioné, pero luego me encontré con otro error que me impidió ejecutar el trabajo de capacitación y me indicó 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 hacer que Amazon aumentara mi cuota, algo que no había anticipado cuando comencé a conectarme. Es una solución fácil, pero la resolución de problemas de los conflictos del módulo consumió la mayor parte del día. Y se me acabó el tiempo mientras intentaba dar un paso al costado utilizando el modelo prediseñado que me brindó mi ayuda experta, implementándolo como un punto final de SageMaker.

Este esfuerzo está ahora en tiempo extra. Aquí es donde habría estado discutiendo cómo funcionó el modelo en las pruebas con pares de titulares recientes, si alguna vez llegué al modelo a ese punto. Si finalmente puedo hacerlo, pondré el resultado en los comentarios y en una nota en mi página de GitHub.

Leave a Reply

Your email address will not be published. Required fields are marked *