Aprendizaje automático (ML) se está convirtiendo en una parte cada vez más importante de la pila de aplicaciones modernas. Ya sea a gran escala, pública grandes modelos de lenguaje (LLM) como GPT o modelos privados de pequeña escala entrenados en contenido de la empresa, los desarrolladores necesitan encontrar formas de incluir esos modelos en su código.
Eso significa encontrar formas de probar ese código, sin enviarlo a servidores de producción. Podemos basarnos en algunos de los MLOps conceptos utilizados para gestionar los modelos subyacentes, fusionándolos con conceptos familiares. devops técnicas. Sin embargo, gran parte de ese trabajo es a medida, y los desarrolladores construyen sus propias cadenas de herramientas y sus propios arneses de prueba. A medida que los equipos cambian, la rueda se reinventa una y otra vez.
Como resultado, los proyectos tardan más en ejecutarse y las lecciones clave no se transmiten de un equipo a otro. No existe un marco común para determinar el rendimiento real y los costos de inferencia resultantes, lo que dificulta la presentación de argumentos comerciales para aplicaciones de aprendizaje automático de nicho, aunque es posible que puedan ofrecer un valor significativo a una empresa.
Uso de Flyte para la orquestación de ML en Kubernetes
Una ruta hacia un futuro «ML devops» es usar herramientas de orquestación de flujo de trabajo, como Flyte, para crear y ejecutar aplicaciones de aprendizaje automáticoaprovechando plataformas nativas de la nube y contenedores para funcionar a escala. Este enfoque tiene mucho valor, ya que le brinda una plataforma única para ejecutar inferencias, utilizando tecnologías como Kubernetes escalar según sea necesario. Pero solo respalda el lado operativo de las cosas, y al mismo tiempo requiere que los desarrolladores trabajen con datos de prueba inadecuados y su propia infraestructura básica en la nube.
Flyte aprovecha el soporte de Kubernetes para el acceso a GPU desde contenedores, combinando la encapsulación de modelos en contenedores y el código de soporte con una canalización de orquestación de Python. El motor de orquestación subyacente está escrito en Go, lo que le brinda compatibilidad con Kubernetes y el alto rendimiento necesario para las operaciones de aprendizaje automático en tiempo de ejecución.
Sin embargo, desde el primer momento, Flyte todavía tiene muchos de los mismos problemas que otras herramientas de canalización, ya que requiere que los desarrolladores completen el desarrollo antes de que la aplicación pueda probarse con datos en vivo, incluso cuando solo está haciendo un ligero cambio. Como resultado, las pruebas locales a menudo se llevan a cabo en un conjunto de datos artificiales curados, uno que a menudo es mucho más pequeño que los conjuntos de datos de producción. Los modelos también están obligados a ejecutarse en computadoras portátiles u otros sistemas de desarrollo, lo que dificulta determinar los niveles de cuantificación apropiados sin múltiples pasadas.
Muchas empresas utilizan Flyte para alojar sus canales de aprendizaje automático, incluida la filial LinkedIn de Microsoft. LinkedIn pasó a utilizar Flyte hace un año y pronto creó herramientas interorganizacionales sobre el marco. Esto eliminó algunos de los cuellos de botella, particularmente al brindar a los desarrolladores un conjunto común de componentes que redujo la necesidad de herramientas personalizadas. Sin embargo, el equipo de LinkedIn aún no pudo solucionar todos los problemas que surgen al integrar el aprendizaje automático en un entorno devops. Una brecha importante fue la falta de herramientas de desarrollo interactivas.
Una experiencia de desarrollador interactiva para Flyte
El equipo de LinkedIn ML comenzó a trabajar en una herramienta basada en Desarrollo remoto de código de Visual Studio para llenar ese vacío. Ahora disponible como proyecto de código abierto, FlyteInteractivo aleja el desarrollo de ML de los procesos actuales de desarrollo por lotes hacia un enfoque mucho más cercano al desarrollo de aplicaciones modernas.
FlyteInteractive es, como su nombre indica, un modo de desarrollo interactivo para tuberías Flyte. FlyteInteractive permite a los desarrolladores examinar las operaciones del modelo y probar diferentes parámetros mientras trabajan en un entorno cercano a la producción, aprovechando el aislamiento proporcionado por los contenedores Kubernetes de Flyte y las capacidades de depuración del servidor remoto de Visual Studio Code.
Si está utilizando Flyte y ha instalado los componentes FlyteInteractive, usar FlyteInteractive es tan fácil como agregar una sola línea a la tarea de Python que ejecuta su trabajo de ML. Esta única línea, un decorador @vscode simple, cambia su canalización del modo por lotes al modo interactivo, implementando un contenedor con una interfaz lista para usar. Servidor de código de Visual Studio. Luego puede conectarse al tiempo de ejecución del contenedor con VS Code, lo que le brinda acceso a un trabajo de ML en ejecución utilizando las herramientas de depuración familiares en VS Code.
La ventaja de este enfoque es que los desarrolladores pueden obtener acceso a entornos de producción y datos reales. Incluso existe la opción de trabajar con modelos a escala. FlyteInteractive le permite tener una mejor idea del rendimiento y la precisión del modelo y reducir el riesgo de error. Al mismo tiempo, puede trabajar para ajustar y cuantificar sus modelos, de modo que hagan un uso eficiente de los recursos y mantengan los costos operativos al mínimo.
Además, Visual Studio Code le brinda acceso a depuradores de Python y otras herramientas específicas del lenguaje que pueden ayudarlo a examinar el modelo en ejecución con más detalle. En lugar de esperar los resultados de un trabajo por lotes, puede establecer puntos de interrupción y utilizar el depurador para inspeccionar las operaciones, avanzando y realizando cambios a medida que avanza.
FlyteInteractive también le brinda acceso a los cuadernos Jupyter que contienen su modelo y su código. Esto le brinda acceso a las herramientas de visualización y análisis numérico de Python para explorar los datos de su prueba y comprender qué tan preciso es su modelo y si los resultados que obtiene son estadísticamente significativos.
Comenzando con FlyteInteractive
Instalar FlyteInteractive es bastante simple, ya que está disponible a través del conocido instalador pip de Python. Una vez que haya instalado FlyteInteractive y haya agregado el decorador @vscode a su tarea, puede conectarse a él desde Visual Studio Code a través de una URL en la consola Flyte o usando la línea de comando de Kubernetes para abrir un puerto en su pod de prueba.
Luego, todo lo que necesita hacer es usar la opción ejecutar y depurar en VS Code, aprovechando su depurador interactivo incorporado. Una ejecución de depuración hereda las entradas de la tarea que creó. Puede utilizar esto para realizar cambios en su modelo sobre la marcha. Debe asegurarse de copiarlos en su propio entorno de desarrollo, por ejemplo, como confirmaciones en Git, ya que se perderán cuando se cierre la sesión interactiva.
Una de las características más útiles de FlyteInteractive es un recolector de basura integrado. Esto garantiza que su entorno no consuma recursos sin ofrecer resultados. Una opción establece un tiempo máximo de vida, mientras que la otra establece límites al tiempo de inactividad. Si se excede cualquiera de los límites, el contenedor de prueba se cierra y se elimina. De esta manera puede asegurarse de que los experimentos fallidos no cuesten más de lo necesario.
Las versiones futuras de FlyteInteractive bien podrían proporcionar ganchos de observabilidad en modelos que proporcionen datos sobre el uso de recursos a las herramientas finops, permitiendo a los equipos cuantificar modelos para que puedan adaptarse no solo en términos de rendimiento y precisión, sino también de costo. Agregar funciones de observabilidad podría ayudar a ajustar el rendimiento y depurar una canalización de aprendizaje automático como parte de una aplicación más grande.
LinkedIn estima una mejora del 96% en la búsqueda de errores y la ejecución de experimentos desde que comenzó a utilizar FlyteInteractive. Antes de FlyteInteractive, el ciclo de construcción y prueba en sistemas activos podía tardar hasta 15 minutos para probar un flujo de trabajo, con una tasa de éxito de apenas el 20 % para encontrar errores.
Si estás usando modelos de Hugging Face, especialmente la nueva generación de pequeños modelos de lenguaje, FlyteInteractive debería ser de gran ayuda para obtener el nivel de cuantificación correcto y la precisión adecuada para sus aplicaciones, y ya no tendrá que sentarse esperando para ver si un trabajo por lotes terminará como se espera. Herramientas como FlyteInteractive serán una parte esencial de la cadena de herramientas de ML.
Copyright © 2024 IDG Communications, Inc.