Consideraciones bien diseñadas para cargas de trabajo de inteligencia artificial en la infraestructura de Azure (IaaS)
Las consideraciones bien diseñadas para la inteligencia artificial en la infraestructura de Azure implican procedimientos recomendados que optimizan la confiabilidad, la seguridad, la eficiencia operativa, la administración de costos y el rendimiento de las soluciones de inteligencia artificial. Estos principios garantizan una implementación sólida, un control seguro de datos, una operación eficaz del modelo y una infraestructura escalable en la plataforma IaaS de Azure. La aplicación de estos principios permite a las organizaciones crear modelos de inteligencia artificial resistentes, seguros y rentables que satisfagan las necesidades empresariales.
Fiabilidad
La confiabilidad implica minimizar el tiempo de inactividad y garantizar un rendimiento coherente para las aplicaciones de inteligencia artificial en la infraestructura de Azure. Garantizar operaciones confiables en máquinas virtuales distribuidas y mantener el rendimiento durante los cambios en la infraestructura evita interrupciones del servicio. Estos procedimientos son importantes porque garantizan la disponibilidad continua del modelo y mejoran la experiencia del usuario.
Distribuir máquinas virtuales entre zonas de disponibilidad. Minimice el tiempo de inactividad de los errores de hardware o los eventos de mantenimiento mediante Availability Zones. Distribuyen máquinas virtuales entre dominios de error y actualización para garantizar una operación continua de la aplicación.
Configure la supervisión de estado con Azure Monitor. Realice un seguimiento del rendimiento de la CPU, la memoria y la red en las máquinas virtuales mediante Azure Monitor y configure alertas para notificarle la degradación del rendimiento o los errores en la infraestructura que admite los modelos. Para más información, consulte Azure Monitor VM Insights.
Automatice la aplicación de revisiones y actualizaciones con instancias graduales. Use Azure Update Management para aplicar revisiones de forma gradual, lo que permite actualizar una instancia mientras otras siguen atendiendo el tráfico, lo que evita el tiempo de inactividad durante el mantenimiento.
Diseñe para degradación correcta durante errores parciales. Asegúrese de que la funcionalidad básica sigue estando disponible al atender modelos de IA menos complejos o limitar características específicas cuando algunas máquinas virtuales no están disponibles, lo que permite a los usuarios acceder a servicios esenciales incluso durante interrupciones.
Implemente copias de seguridad periódicas para los recursos clave. Realice copias de seguridad periódicas de los datos del modelo, los conjuntos de datos de entrenamiento y las configuraciones para habilitar la restauración rápida si se produjo un error, lo que protege el progreso y los datos valiosos.
Seguridad
La seguridad cubre las medidas de protección para proteger los modelos de inteligencia artificial, los datos y la infraestructura frente al acceso y las amenazas no autorizados. Implemente actualizaciones, supervise la integridad del modelo y controle el acceso para evitar vulnerabilidades que podrían poner en peligro la información confidencial. Estos pasos son esenciales para mantener la privacidad de los datos y la confiabilidad de las soluciones de inteligencia artificial en entornos de producción.
Programar actualizaciones para los recursos de Azure. Use configuraciones de mantenimiento para establecer programaciones de actualización específicas para máquinas virtuales y extensiones, lo que reduce las ventanas de vulnerabilidad.
Aplique revisiones a las máquinas virtuales y a las imágenes de contenedor con regularidad. Habilite la aplicación automática de revisiones de invitados para máquinas virtuales y conjuntos de escalado para mantener la seguridad frente a nuevas amenazas. Para obtener más información, consulte Información general sobre las actualizaciones de invitado y el mantenimiento del host.
Supervise el desfase del modelo y garantice la integridad. Asegúrese de la integridad del modelo mediante la implementación de mecanismos de seguridad como firmas digitales o comprobaciones hash para archivos de modelo para evitar modificaciones no autorizadas. Use Azure Monitor para realizar un seguimiento de las métricas de rendimiento clave e identificar el desfase del modelo, lo que podría indicar posibles vulnerabilidades de seguridad o cambios de datos. Puede definir métricas personalizadas (precisión, puntuación F1 y distribución de datos en los modelos) en el código mediante el SDK de métricas de Azure Monitor. El SDK de métricas de Azure Monitor permite enviar las estadísticas de rendimiento del modelo y las medidas de desfase de datos a Azure Monitor. La supervisión de los cambios de rendimiento a lo largo del tiempo puede ayudar a detectar cuándo se desvía el comportamiento de un modelo, lo que podría indicar un ataque o una necesidad de volver a entrenar. Este enfoque proactivo ayuda a proteger la integridad del modelo y a mantener el cumplimiento de la seguridad.
Implementar registros de auditoría y acceso. Use Azure Monitor y Log Analytics para registrar el acceso a modelos y máquinas virtuales, lo que ayuda a identificar patrones de uso no autorizados o inusuales. Para más información, consulte Registros de actividad en Azure Monitor.
Use el control de versiones para los archivos de modelo. Almacene archivos de modelo en Azure Storage (blob, archivo o disco) con control de versiones para realizar un seguimiento de los cambios, lo que garantiza una pista de auditoría clara para identificar y revertir modificaciones perjudiciales. El uso de Azure DevOps para el control de versiones mejora la seguridad mediante la administración del acceso a los cambios de código y la aplicación de procedimientos recomendados en las revisiones de código. Este enfoque en capas mitiga los riesgos de cambios no autorizados y proporciona responsabilidad. Para más información, consulte Control de versiones de blobs en Azure Storage.
Configure la detección de anomalías para las salidas del modelo. Use Azure Monitor para realizar un seguimiento de las métricas de salida de los modelos y configurar alertas para un comportamiento inusual. Por ejemplo, la supervisión de respuestas de API del modelo puede ayudar a detectar resultados anómalos. Puede establecer la detección de anomalías en una métrica como la precisión de la predicción para detectar automáticamente cuándo cae fuera de un intervalo esperado. Para obtener más información, consulte Creación y administración de alertas de métricas con umbrales dinámicos.
Aplicar directivas de acceso de modelo. Use el control de acceso basado en rol (RBAC) de Azure y el id. de Microsoft Entra para proteger el acceso a máquinas virtuales y archivos de modelo, lo que limita el acceso solo a los usuarios autorizados.
Revalida periódicamente los modelos con los datos actualizados. La implementación de la revalidación periódica del modelo mediante scripts o flujos de trabajo automatizados en las máquinas virtuales garantiza que el modelo siga siendo preciso y eficaz con los conjuntos de datos actuales, lo que mitiga los riesgos de predicciones obsoletas o inexactas. Al programar estas tareas con Azure Automation o Azure Logic Apps, puede mantener el cumplimiento de los estándares de datos y mejorar la seguridad general del modelo. Este enfoque proactivo ayuda a identificar las vulnerabilidades al principio, lo que garantiza la mejora continua y la protección contra posibles amenazas. Puede programar los flujos de trabajo de automatización para desencadenar periódicamente tareas de revalidación. Comience con un runbook de Azure Automation, ejecute en la máquina virtual y cree una programación adecuada para obtener los resultados de la validación.
Realice un seguimiento del linaje de datos y los cambios en los archivos de modelo. Habilite el control de versiones en Azure Blob Storage y realice un seguimiento de los datos usados en el entrenamiento y la inferencia, lo que garantiza que ningún dato no autorizado afecte a los resultados del modelo.
Aplicar cuotas de recursos y límites de velocidad. Implemente límites de velocidad y cuotas para las API del modelo a través de Azure API Management para evitar el uso excesivo o el abuso, lo que puede provocar vulnerabilidades del sistema o interrupciones del servicio. Esta estrategia garantiza que el sistema sigue respondiendo durante un tráfico elevado y mitiga los riesgos asociados a ataques por denegación de servicio. Al controlar el acceso, puede mantener el rendimiento y proteger los datos confidenciales frente a posibles cuotas y límites de API Management.
Realice exámenes de vulnerabilidades regulares. Use el examen de vulnerabilidades de Microsoft Defender para realizar evaluaciones de vulnerabilidades de las máquinas virtuales y los recursos relacionados. Compruebe periódicamente si hay problemas de seguridad o configuraciones incorrectas en la configuración de la máquina virtual que podrían exponer los modelos. Examen de vulnerabilidades de Microsoft Defender.
Optimización de costos
La optimización de costos implica alinear el uso de recursos con los requisitos de carga de trabajo para evitar gastos innecesarios. El ajuste de tamaño correcto de las máquinas virtuales, la confirmación en instancias reservadas y la configuración del escalado automático ayudan a administrar los costos sin poner en peligro el rendimiento. El control de los costos en la infraestructura de Azure es fundamental para la sostenibilidad a largo plazo y la escalabilidad de las implementaciones de inteligencia artificial.
Confirmar en instancias reservadas. Ahorre en costos de máquina virtual (VM) confirmando un período de uno o tres años, lo que ofrece tarifas con descuento.
Use Conjuntos de escalado de máquinas virtuales de Azure para el escalado automático.Escalado automático Instancias de máquina virtual basadas en métricas como el uso de CPU, pagando solo por lo que necesita y evitando el aprovisionamiento excesivo.
Establezca apagados automáticos para instancias inactivas. Evite los costos de los recursos no utilizados al habilitar el apagado automático, especialmente para entornos de desarrollo y pruebas.
Use Planes de ahorro de Azure para un uso predecible. Reduzca los costos en comparación con los precios de pago por uso al confirmar el uso coherente entre tamaños y regiones de máquina virtual.
Use instancias de Azure Spot para cargas de trabajo tolerantes a errores. Obtenga descuentos sustanciales en la capacidad de reserva de las cargas de trabajo que pueden tolerar interrupciones.
Seleccione la solución de almacenamiento correcta. Equilibre el costo y el rendimiento en función de las necesidades de carga de trabajo. Elija Azure Managed Lustre (AMLFS) para aplicaciones de alto rendimiento, a gran escala y Azure NetApp Files (ANF) para la administración y confiabilidad avanzadas de datos.
Excelencia operativa
La excelencia operativa implica optimizar la configuración y la administración de los recursos de Azure para mejorar la funcionalidad de las aplicaciones de inteligencia artificial. La asignación eficaz de recursos, la optimización del rendimiento y el entrenamiento distribuido admiten un funcionamiento y una adaptación suaves a distintas demandas. Este enfoque en la eficiencia operativa garantiza que los modelos de inteligencia artificial funcionen según lo previsto, sin un uso excesivo de recursos.
Optimización de la asignación de recursos. Revise periódicamente los tamaños y configuraciones de las máquinas virtuales de Azure en función del uso real de los recursos para satisfacer las necesidades de la carga de trabajo. Use Azure Advisor para obtener recomendaciones sobre el ajuste de tamaño y el escalado óptimos.
Configure el escalado automático para mejorar la eficacia. Configure el escalado automático para máquinas virtuales o contenedores para controlar las demandas de carga de trabajo sin sobreaprovisionamiento. Use Conjuntos de escalado de máquinas virtuales de Azure para ajustar los recursos dinámicamente en función de la demanda. Para más información, consulte Azure Virtual Machine Scale Sets.
Realice un ajuste de rendimiento normal. Generar perfiles continuos de la aplicación para identificar y resolver cuellos de botella de rendimiento. Use Application Insights Profiler para analizar el uso de recursos y el código del modelo.
Implemente el entrenamiento distribuido para mejorar la eficacia. Use técnicas de entrenamiento distribuidas, si procede, para reducir el tiempo de entrenamiento mediante el uso de varias máquinas virtuales. Los marcos como Horovod y PyTorch admiten el entrenamiento distribuido en Azure.
Guarde los puntos de control en Azure Blob Storage. Guarde periódicamente los estados, pesos y configuraciones del modelo en Azure Blob Storage. Puede usar sdk o bibliotecas de Azure disponibles en el lenguaje de programación que usa para LLM. Almacene los puntos de control en un formato estructurado, como tensorFlow SavedModel o los archivos de punto de comprobación de PyTorch. Modifique el código de entrenamiento o de inferencia para incluir lógica de punto de control. Comience con intervalos de configuración (después de cada época o algunas iteraciones) para guardar el estado del modelo. Use una convención de nomenclatura coherente para los archivos de punto de control para realizar un seguimiento del estado más reciente fácilmente.
Diseño para la recuperación de estado. Asegúrese de que la aplicación puede recuperarse de un punto de control guardado. Implemente la lógica para cargar el estado del modelo desde Azure Blob Storage cuando se inicie la aplicación. Incluye, comprueba los puntos de control existentes y carga el punto de control más reciente si está disponible, lo que permite que la aplicación se reanude sin perder el progreso.
Eficiencia del rendimiento
La eficiencia del rendimiento hace referencia a maximizar la potencia de procesamiento de la infraestructura de Azure para satisfacer las demandas del modelo de IA. Debe ajustar la configuración de GPU, optimizar los procesos de entrada y salida (E/S) y ejecutar pruebas comparativas para mejorar la velocidad computacional y la capacidad de respuesta. Garantizar un alto rendimiento admite la ejecución de modelos complejos de inteligencia artificial a escala, lo que mejora la satisfacción del usuario y reduce la latencia.
Optimización de GPU
Aumente la velocidad de reloj de una unidad de procesamiento gráfico (GPU) para mejorar el rendimiento, especialmente para las tareas que requieren un procesamiento gráfico elevado o cálculos complejos. Las velocidades de reloj más altas permiten que la GPU ejecute más operaciones en un período de tiempo determinado, lo que mejora la eficacia general. Use este script de optimización de GPU para establecer las frecuencias de reloj de GPU en sus valores máximos.
- Habilite Las redes aceleradas. Accelerated Networking es una tecnología de aceleración de hardware que permite a las máquinas virtuales usar la virtualización de E/S raíz única (SR-IOV) en los tipos de máquinas virtuales compatibles. Proporciona menor latencia, vibración reducida y disminución del uso de la CPU. Habilitar redes aceleradas ofrece mejoras sustanciales en el rendimiento de la red front-end.
Optimización de E/S
Optimice el almacenamiento temporal. El principio debe tener un alto rendimiento y una latencia baja. El trabajo de entrenamiento requiere leer datos, procesarlos y usar esta ubicación de almacenamiento como espacio temporal mientras se ejecuta el trabajo. Idealmente, usaría el SSD local directamente en cada máquina virtual. Si necesita un sistema de archivos compartido para el principio, combinar todos los SSD NVMe para crear un sistema de archivos paralelos (PFS) podría ser una excelente opción en términos de costo y rendimiento, suponiendo que tiene suficiente capacidad. Un método consiste en usar Azure Managed Lustre. Si Azure Managed Lustre no es adecuado, puede explorar opciones de almacenamiento como Azure NetApp Files o Azure Native Qumulo.
Implemente el almacenamiento de puntos de control. Los trabajos de aprendizaje profundo de gran tamaño se pueden ejecutar durante semanas, en función del número de máquinas virtuales usadas. Al igual que cualquier clúster de HPC, puede encontrar errores, como problemas de InfiniBand, errores de módulo de memoria en línea dual (DIMM), errores de corrección de errores (ECC) en la memoria gpu. Es fundamental tener una estrategia de punto de control. Conozca el intervalo de punto de comprobación (cuando se guardan los datos). Comprender la cantidad de datos que se transfieren cada vez. Tener una solución de almacenamiento que cumpla los requisitos de capacidad y rendimiento. Use Blob Storage si satisface las necesidades de rendimiento.
Pruebas comparativas
Las pruebas comparativas ayudan a evaluar y mejorar el rendimiento de entrenamiento de aprendizaje profundo distribuido en GPU, especialmente para modelos a gran escala. Estas pruebas miden la eficacia de la comunicación de GPU entre nodos, con el objetivo de reducir los cuellos de botella de transferencia de datos durante el entrenamiento distribuido. Las tres pruebas que se describen incluyen:
- Marco megatron: admite modelos de lenguaje a gran escala mediante la mejora de la eficacia del entrenamiento distribuido.
- Las pruebas nvidia Collective Communications Library (NCCL) y ROCm Communication Collectives Library (RCCL): evalúe el rendimiento y la precisión en la comunicación con varias GPU mediante bibliotecas NCCL o RCCL, probando patrones como all-reduce y dispersión.
Estas pruebas garantizan la escalabilidad y el rendimiento óptimo para las VM, con Megatron centrado en el entrenamiento del modelo y NCCL/RCCL en la comunicación con GPU.
Prueba de NVIDIA Megatron-LM
NVIDIA Megatron-LM es un marco de código abierto para entrenar modelos de lenguaje grandes. Permite a los desarrolladores crear redes neuronales masivas para tareas de NLP, con características como:
- Paralelismo: admite el paralelismo de modelos, datos y canalizaciones para modelos de miles de millones de parámetros.
- Escalabilidad: escala entre varias GPU y nodos para un entrenamiento eficaz de modelos grandes.
- Flexibilidad: permite la configuración de la arquitectura del modelo, la carga de datos y las estrategias de entrenamiento.
- Optimizaciones: usa optimizaciones de GPU de NVIDIA para mejorar el rendimiento.
Megatron-LM se implementa en la infraestructura de Azure HPC y usa la escalabilidad de Azure para modelos de lenguaje grandes sin necesidad de hardware local.
Configuración de pruebas de Megatron-LM
La implementación de Megatron-LM requiere software y hardware específicos.
Elija las opciones de implementación adecuadas. Use cycleCloud Workspace for Slurm para simplificar la implementación. Elija SKU de serie NC o ND para la partición de GPU. Para el entrenamiento de varios nodos, se recomiendan SKU de la serie ND para la compatibilidad con RDMA. Las imágenes de Marketplace de HPC de Azure suelen incluir estos controladores y bibliotecas. Si se necesita la personalización, el repositorio azhpc-images puede garantizar la compatibilidad.
Use la imagen correcta. Los requisitos de software para el proyecto incluyen un sistema operativo basado en Linux, normalmente Ubuntu. Para la comunicación entre varias GPU y varios nodos, es esencial tener bibliotecas de comunicación como NCCL y MPI. Además, se deben instalar los controladores DE NVIDIA adecuados para garantizar la aceleración de GPU. Las imágenes de Marketplace de HPC de Azure incluyen estos controladores y bibliotecas preinstalados. Sin embargo, si es necesaria la personalización, el repositorio azhpc-images se puede usar para garantizar la compatibilidad.
Uso de pruebas de Megatron-LM
Debe ejecutar Megatron-LM con la versión más reciente del contenedor pyTorch de NGC. Para ejecutar el contenedor en un clúster de HPC basado en Slurm tradicional, debe instalar y configurar estos otros componentes en el clúster:
- enroot: una herramienta que permite a los usuarios ejecutar aplicaciones en contenedores en clústeres de HPC sin necesidad de privilegios raíz ni modificar el sistema host.
- pyxis: un complemento para Slurm que permite la integración sin problemas de enroot con Slurm, lo que permite a los usuarios enviar trabajos en contenedores a colas de Slurm y ejecutarlos en nodos de HPC.
Ambos componentes se incluyen en CycleCloud Workspace for Slurm , pero actualmente no se incluyen en clústeres de Slurm que se compilan a través de CycleCloud. Puede introducir estos componentes adicionales a través de cluster-init con proyectos de CycleCloud. Con estos requisitos cumplidos, puede usar Megatron-LM para el entrenamiento de LLM mediante:
- Comprobación del rendimiento del clúster: identifique los posibles problemas de hardware antes de ejecutar la carga de trabajo con comprobaciones de estado de node. Use pruebas NCCL para comprobar el rendimiento distribuido de reducción total del clúster.
- Selección de los datos de entrenamiento: use el modelo codeParrot como punto de partida para validar el flujo de trabajo.
- Preprocesamiento de los datos: use el script de preprocess_data.py dentro del repositorio Megatron-LM para convertir los datos a un formato compatible con Megatron-LM.
- Entrenamiento con Megatron-LM: use los ejemplos de Megatron-LM como referencia para configurar Megatron para el entrenamiento.
Esta configuración garantiza una implementación y entrenamiento eficaces de modelos de lenguaje grandes en la infraestructura de Azure.
Prueba de ancho de banda ncCL
Para comprobar y optimizar la comunicación de GPU entre nodos, ejecute la prueba de ancho de banda ncCL. La prueba de ancho de banda ncCL es una herramienta especializada dentro de NCCL, una biblioteca que facilita la comunicación de alta velocidad entre GPU. NCCL admite operaciones colectivas, como all-reduce, all-gather, reduce, broadcast y reduce la dispersión, en nodos de una o varias GPU, y logra un rendimiento óptimo en plataformas con PCIe, NVLink, NVswitch o configuraciones de red como InfiniBand o TCP/IP. Para obtener más información, consulte Pruebas nvidia/NCCL.
Métricas de rendimiento de NCCL
Use la prueba de ancho de banda ncCL para evaluar las métricas clave, incluido el tiempo y el ancho de banda. "Tiempo" (en milisegundos) mide la sobrecarga o latencia en las operaciones, lo que resulta útil para evaluar las operaciones con tamaños de datos pequeños. "Ancho de banda" (en GB/s) evalúa la eficacia de la operación de punto a punto, como Enviar o recibir. El "ancho de banda de bus" refleja la eficacia del uso del hardware al tener en cuenta la velocidad de comunicación entre GPU y los cuellos de botella en componentes como NVLink o PCI. Se proporcionan cálculos para diversas operaciones colectivas, como AllReduce, ReduceScatter, AllGather, Broadcast y Reduce.
Iniciación de pruebas NCCL
Para iniciar estas pruebas dentro de una implementación de CycleCloud, conéctese al nodo del programador a través de SSH y acceda a un nodo de proceso equipado con GPU. Clone el repositorio de Git para las pruebas NCCL, vaya al nccl-tests
directorio y cree un archivo host que muestre los nodos para realizar pruebas. Obtenga la dirección IP del nodo del programador de la aplicación web de CycleCloud.
Argumentos de prueba ncCL
Antes de ejecutar pruebas, especifique distintos -e
), el incremento de paso (-i
o -f
), el tipo de operación de reducción (), el tipo de datos (-o
-d
), el dispositivo raíz (-r
), el recuento de iteraciones (-n
), el recuento de preparación () y la configuración del grafo CUDA (-w
-G
). Consulte la documentación de prueba de NCCL para obtener una lista completa de parámetros ajustables.
Pruebas RCCL
RoCm Communication Collectives Library (RCCL) es una biblioteca especializada diseñada para una comunicación eficaz entre GPU AMD. Proporciona operaciones colectivas como all-reduce, all-gather, broadcast y reduce, lo que admite la comunicación entre nodos y gpu entre nodos. Optimizado para plataformas que usan PCIe y tecnologías de red como InfiniBand, RCCL garantiza la transferencia de datos escalable en entornos de varias GPU. Admite la integración en flujos de trabajo de un solo proceso y varios, como los que usan MPI. Para obtener más información, consulte Biblioteca de colectivos de comunicación ROCm.
- Configurar entorno. Instale ROCm y asegúrese de que RCCL está instalado correctamente en todos los nodos.
- Crear pruebas RCCL. Clone el repositorio, vaya al directorio rccl-tests y compile las pruebas.
- Ejecutar pruebas de ancho de banda. Use los ejecutables de prueba proporcionados (rccl-tests), especificando operaciones de comunicación como all-reduce.
- Analizar el rendimiento. Compare los resultados de ancho de banda y latencia entre nodos y GPU.