Procedimientos recomendados para el aprendizaje profundo en Azure Databricks
En este artículo se incluyen sugerencias para el aprendizaje profundo en Azure Databricks e información sobre herramientas y bibliotecas integradas, diseñadas para optimizar cargas de trabajo de aprendizaje profundo, como por ejemplo:
- Delta y Mosaic Streaming para cargar datos
- Optuna para paralelizar el entrenamiento
- UDF de Pandas para la inferencia
Databricks Mosaic AI proporciona una infraestructura de aprendizaje profundo pregenerada con Databricks Runtime para Machine Learning, que incluye las bibliotecas de aprendizaje profundo más comunes, como TensorFlow, PyTorch y Keras. También tiene compatibilidad integrada preconfigurada con GPU, incluidos los controladores y las bibliotecas auxiliares.
Databricks Runtime ML también incluye todas las funcionalidades del área de trabajo de Azure Databricks, como la creación y administración de clústeres; la administración de bibliotecas y entornos; la administración de código con carpetas de Git de Databricks; la compatibilidad con automatización, incluidos trabajos y API de Databricks; y MLflow integrado para el seguimiento del desarrollo de modelos y la implementación y el servicio de modelos.
Administración de recursos y entornos
Azure Databricks le ayuda a personalizar el entorno de aprendizaje profundo y a mantener la coherencia del entorno entre los usuarios.
Personalización del entorno de desarrollo
Con Databricks Runtime, puede personalizar el entorno de desarrollo en los niveles de cuaderno, clúster y trabajo.
- Use bibliotecas de Python con ámbito de cuaderno o bibliotecas de R con ámbito de cuaderno para usar un conjunto o versión específicos de las bibliotecas sin afectar a otros usuarios del clúster.
- Instale bibliotecas a nivel de clúster para estandarizar las versiones de un equipo o un proyecto.
- Configure un trabajo de Azure Databricks para asegurarse de que una tarea repetida se ejecuta en un entorno coherente e invariable.
Uso de directivas de clúster
Puede crear directivas de clúster para guiar a los científicos de datos a las opciones adecuadas, como el uso de un clúster de nodo único para el desarrollo y el uso de un clúster de escalado automático para trabajos de gran tamaño.
Considere la posibilidad de usar GPU A100 para cargas de trabajo de aprendizaje profundo
Las GPU A100 son una opción eficaz para muchas tareas de aprendizaje profundo, como el entrenamiento y la optimización de modelos de lenguaje grandes, procesamiento de lenguaje natural, detección y clasificación de objetos y motores de recomendaciones.
- Databricks admite GPU A100 en todas las nubes. Para obtener la lista completa de los tipos de GPU admitidos, consulte Tipos de instancia admitidos.
- Las GPU A100 suelen tener disponibilidad limitada. Póngase en contacto con el proveedor de nube para la asignación de recursos o considere la posibilidad de reservar capacidad de antemano.
Programación de GPU
Para maximizar las GPU para el entrenamiento e inferencia de aprendizaje profundo distribuido, optimice la programación de GPU. Consulte Programación de GPU.
Procedimientos recomendados para la carga de datos
El almacenamiento de datos en la nube normalmente no está optimizado para E/S, lo que puede ser un reto para los modelos de aprendizaje profundo que requieren grandes conjuntos de datos. Databricks Runtime ML incluye Delta Lake y Mosaic Streaming optimizar el rendimiento de los datos en las aplicaciones de aprendizaje profundo.
Databricks recomienda usar tablas de Delta Lake para el almacenamiento de datos. Delta Lake simplifica la extracción, transformación y carga de datos (ETL), y le permite acceder a los datos de forma eficaz. En especial para las imágenes, Delta Lake ayuda a optimizar la ingesta para el entrenamiento y la inferencia. La solución de referencia para aplicaciones de imagen proporciona un ejemplo de optimización de ETL para imágenes con Delta Lake.
Databricks recomienda Mosaic Streaming para la carga de datos en PyTorch o Mosaic Composer, sobre todo cuando implica cargas de trabajo distribuidas. Las API StreamingDataset y StreamingDataLoader que se proporcionan ayudan a simplificar el entrenamiento en conjuntos de datos grandes, a la vez que maximizan las garantías de corrección, el rendimiento, la flexibilidad y la facilidad de uso en un entorno distribuido. Si desea más detalles al respecto, consulte Carga de datos mediante Mosaic Streaming.
Procedimientos recomendados para entrenar modelos de aprendizaje profundo
Databricks recomienda usar Databricks Runtime for Machine Learning, el seguimiento de MLflow y el registro automático para el entrenamiento de todos los modelos.
Inicio con un clúster de nodo único
Un clúster de nodo único (solo controlador) o GPU suele ser más rápido y rentable para el desarrollo de modelos de aprendizaje profundo. Es probable que un nodo con 4 GPU sea más rápido para el entrenamiento de aprendizaje profundo que 4 nodos de trabajo con 1 GPU cada uno. Esto se debe a que el entrenamiento distribuido incurre en una sobrecarga de comunicación de red.
Un clúster de nodo único es una buena opción durante el desarrollo rápido e iterativo, y para entrenar modelos en datos de tamaño pequeño a medio. Si el conjunto de datos es lo suficientemente grande como para que el entrenamiento sea lento en una sola máquina, considere la posibilidad de pasar a varias GPU e, incluso, a procesos distribuidos.
Uso de TensorBoard y métricas de clúster para supervisar el proceso de entrenamiento
TensorBoard está preinstalado en Databricks Runtime ML. Puede usarlo en un cuaderno o en una pestaña independiente, consulte TensorBoard para obtener más información.
Las métricas de clúster están disponibles en todos los entornos de ejecución de Databricks. Puede usarlo para examinar el uso de la red, el procesador y la memoria para inspeccionar los cuellos de botella. Consulte métricas de clúster para obtener más información.
Optimización del rendimiento para el aprendizaje profundo
En Databricks, puede —y debe— usar técnicas de optimización del rendimiento de aprendizaje profundo.
Detención anticipada
La detención anticipada supervisa el valor de una métrica calculada en el conjunto de validación y detiene el entrenamiento cuando la métrica deja de mejorar. Este es un enfoque mejor que adivinar un buen número de épocas hasta completarse. Cada biblioteca de aprendizaje profundo proporciona una API nativa para la detención anticipada. Por ejemplo, consulte las API de devolución de llamada de EarlyStopping para TensorFlow/Keras y PyTorch Lightning. Para obtener un cuaderno de ejemplo, consulte la sección sobre el cuaderno de ejemplo de TensorFlow Keras.
Ajuste del tamaño de lote
El ajuste del tamaño de lote ayuda a optimizar el uso de GPU. Si el tamaño del lote es demasiado pequeño, los cálculos no pueden usar por completo las funcionalidades de GPU. Puede usar las métricas del clúster para ver las métricas de GPU.
Ajuste el tamaño de lote junto con la velocidad de aprendizaje. Una buena regla general es que, al aumentar el tamaño del lote en n, la velocidad de aprendizaje aumente sqrt(n). Al ajustar manualmente, intente cambiar el tamaño de lote por un factor de 2 o 0,5. Después, continúe con el ajuste para optimizar el rendimiento, ya sea manualmente o probando diversos hiperparámetros mediante una herramienta automatizada, como Optuna.
Transferencia de aprendizaje
Con el aprendizaje por transferencia, comienza con un modelo entrenado previamente y lo modifica según sea necesario para la aplicación. El aprendizaje por transferencia puede reducir significativamente el tiempo necesario para entrenar y ajustar un modelo nuevo. Consulte Caracterización para el aprendizaje por transferencia para obtener más información y un ejemplo.
Cambio al entrenamiento distribuido
Databricks Runtime ML incluye TorchDistributor, DeepSpeed y Ray para facilitar el pasaje desde un nodo único al entrenamiento distribuido.
TorchDistributor
TorchDistributor es un módulo de código abierto en PySpark que facilita el entrenamiento distribuido con PyTorch en clústeres de Spark, lo que permite iniciar trabajos de entrenamiento de PyTorch como trabajos de Spark. Vea Entrenamiento distribuido con TorchDistributor.
Optuna
Optuna proporciona ajuste adaptable de hiperparámetros para el aprendizaje automático.
Procedimientos recomendados para la inferencia
Esta sección contiene sugerencias generales sobre el uso de modelos para la inferencia con Azure Databricks.
Para minimizar los costos, tenga en cuenta las CPU y las GPU optimizadas para inferencia, como la serie NC T4_v3. No hay ninguna recomendación clara, ya que la mejor opción depende del tamaño del modelo, las dimensiones de datos y otras variables.
Use MLflow para simplificar la implementación y el servicio de modelos. MLflow puede registrar cualquier modelo de aprendizaje profundo, incluida la lógica personalizada de preprocesamiento y posprocesamiento. Los modelos en Unity Catalog o los modelos registrados en el Registro de modelos del área de trabajo pueden implementarse para la inferencia por lotes, en streaming o en línea.
Servicio en línea
La mejor opción para el servicio de baja latencia es el servicio en línea detrás de una API REST. Databricks ofrece Servicio de modelos para la inferencia en línea. El servicio de modelos proporciona una interfaz unificada para implementar, controlar y consultar modelos de IA y admite el siguiente servicio:
- Modelos personalizados. Estos son modelos de Python empaquetados en el formato MLflow. Algunos ejemplos son los modelos de transformador scikit-learn, XGBoost, PyTorch y Hugging Face.
- Modelos abiertos de última generación disponibles por las API de Foundation Model. Estos modelos son arquitecturas de modelos fundamentales mantenidos que admiten la inferencia optimizada. Por ejemplo, los modelos base como Llama-2-70B-chat, BGE-Large y Mistral-7B están disponibles para su uso inmediato con precios de pago por token. En el caso de las cargas de trabajo que requieren garantías de rendimiento y variantes de modelo optimizadas, puede implementarlas con rendimiento aprovisionado.
- Modelos externos. Estos son modelos hospedados fuera de Databricks. Por ejemplo, modelos de inteligencia artificial generativa como GPT-4 de OpenAI, Claude de Anthropic y otros. Los puntos de conexión que atienden estos modelos se pueden regular de forma centralizada y los clientes pueden establecer límites de velocidad y controles de acceso para ellos.
Como alternativa, MLflow proporciona API para implementar en varios servicios administrados para la inferencia en línea, así como API para crear contenedores de Docker para soluciones de servicio personalizadas.
Otros servicios administrados comunes para la inferencia en línea incluyen:
Inferencia por lotes y de streaming
La puntuación por lotes y streaming admite puntuaciones de alto rendimiento y bajo costo con latencias de tan solo minutos. Para obtener más información, consulte Uso de MLflow para la inferencia de modelos.
- Si espera tener acceso a los datos para la inferencia más de una vez, considere la posibilidad de crear un trabajo de preprocesamiento para la extracción, transformación y carga de datos de los datos en una tabla de Delta Lake antes de ejecutar el trabajo de inferencia. De este modo, el costo de ingerir y preparar los datos se distribuye entre varias lecturas de los datos. La separación del preprocesamiento de la inferencia también permite seleccionar hardware diferente para cada trabajo a fin de optimizar el costo y el rendimiento. Por ejemplo, puede usar las CPU para ETL y las GPU para la inferencia.
- Use UDF de Spark Pandas para escalar la inferencia por lotes y de streaming en un clúster.
- Al registrar un modelo desde Azure Databricks, MLflow proporciona automáticamente código de inferencia para aplicar el modelo como udF de Pandas.
- También puede optimizar aún más la canalización de inferencia, en especial para modelos de aprendizaje profundo de gran tamaño. Consulte la solución de referencia para ETL de imágenes para ver un ejemplo.