En este artículo se describe cómo ejecutar de forma eficaz cargas de trabajo que usan nodos de GPU en un clúster de Azure Kubernetes Service (AKS). Obtenga información sobre cómo elegir la SKU adecuada, usar nodos de GPU para entrenar modelos de aprendizaje automático y usar nodos de GPU para ejecutar inferencias en AKS.
Escenarios
Las cargas de trabajo de GPU pueden ser costosas de ejecutar. Para evitar costes innecesarios, sepa cuándo implementar nodos basados en GPU en los clústeres de AKS.
Las GPU están diseñadas específicamente para gráficos, inteligencia artificial y aprendizaje automático y tareas especializadas, lo que las convierte en ideales para cargas de trabajo que consumen muchos procesos. Las CPU administran eficazmente la lógica compleja y la bifurcación. Las GPU están optimizadas para el rendimiento. Pueden controlar eficazmente operaciones aritméticas y vectoriales sencillas.
Para determinar cuándo usar GPU para cargas de trabajo de AKS, debe comprender la optimización de GPU y la intensidad del proceso, pero también debe tener en cuenta otros factores. Para obtener una mejor información sobre el uso de GPU para cargas de trabajo de AKS, tenga en cuenta los siguientes ejemplos de cargas de trabajo que se benefician de los nodos de GPU de un clúster de AKS.
Ciencia y análisis de datos
Puede usar GPU para acelerar el preprocesamiento de datos, la ingeniería de características y el entrenamiento de modelos en flujos de trabajo de ciencia de datos. Para usar de forma eficaz las GPU, los marcos como RAPIDS y Dask GPU amplían las bibliotecas populares de procesamiento de datos, como pandas y Scikit-learn.
Los motores de consultas SQL y las bases de datos en columnas aceleradas por software de código abierto (OSS), como BlazingSQL y HeavyDB , usan GPU para realizar rápidamente consultas y análisis en grandes conjuntos de datos.
Aprendizaje automático y aprendizaje profundo
Los conocidos marcos de aprendizaje automático y aprendizaje profundo, como TensorFlow y PyTorch , se benefician de GPU, ya que pueden acelerar las tareas de entrenamiento e inferencia.
Los modelos de aprendizaje profundo tienen redes neuronales complejas. El procesamiento paralelo en GPU acelera los cálculos del modelo. Las GPU proporcionan multiplicación y convoluciones de matriz altamente eficientes, que son operaciones principales en el aprendizaje profundo.
También puede usar GPU para acelerar tareas como la clasificación de imágenes, la detección de objetos, el procesamiento de lenguaje natural y el reconocimiento de voz.
Visión informática y procesamiento de imágenes
Las tareas de Computer Vision interpretan los datos visuales para extraer información significativa. Estas tareas son cada vez más comunes en aplicaciones con tecnología de inteligencia artificial, vehículos autónomos, imágenes médicas, sistemas de vigilancia y realidad aumentada. Las GPU usan el procesamiento paralelo, por lo que pueden controlar eficazmente los datos de imágenes a gran escala y cálculos complejos para tareas como la detección de objetos, la clasificación de imágenes y la extracción de características.
Procesamiento y streaming de vídeo
Los vídeos son cada vez más frecuentes en los negocios, por lo que las organizaciones necesitan hardware con tecnología GPU en lugar de CPU. Las cargas de trabajo de procesamiento de vídeo, incluida la transcodificación, la codificación y el streaming, consumen muchos procesos, especialmente si tienen contenido de alta definición o contenido 4K. Las GPU proporcionan una plataforma eficaz que ofrece experiencias de vídeo de alto rendimiento y baja latencia en diversas aplicaciones, como streaming de eventos deportivos o vídeos corporativos.
Los nodos de agente habilitados para GPU proporcionan una experiencia de cliente enriquecida en entornos de Virtual Desktop porque descargan tareas que consumen muchos gráficos en la GPU. Las funcionalidades de codificación y descodificación de vídeo aceleradas por GPU ayudan a mejorar el streaming de vídeo en tiempo real, la transcodificación de vídeo y el análisis de vídeo.
Para acelerar tareas de Computer Vision como la detección de objetos, el seguimiento de objetos y el procesamiento de imágenes o vídeos, puede usar marcos como OpenCV, OpenCL, NVIDIA CUDA y NVIDIA cuDNN.
Las plataformas de juegos y los servicios de juegos en la nube se basan en GPU para ofrecer gráficos de alta calidad y experiencias de juego fluidas.
Informática de alto rendimiento
Las aplicaciones informáticas de alto rendimiento (HPC) suelen requerir simulaciones complejas, análisis numéricos y cálculos científicos. Para ejecutar rápidamente estas tareas, puede usar GPU para paralelizar la carga de trabajo entre varios núcleos. Algunos ejemplos de aplicaciones de HPC que necesitan una potencia masiva de procesamiento paralelo incluyen simulaciones científicas, previsión meteorológica, dinámica de fluidos computacionales y modelado molecular. Las GPU son ideales para cálculos paralelos y aceleran significativamente las cargas de trabajo de HPC. Los esfuerzos científicos y de investigación se benefician de las GPU.
Para acelerar las aplicaciones HPC, los marcos como NVIDIA CUDA, OpenCL y OpenACC proporcionan bibliotecas y API habilitadas para GPU.
Análisis genómico y bioinformática
Las cargas de trabajo de ciencias de la salud y la vida, como el análisis genómico y las aplicaciones bioinformáticas, son cada vez más comunes. Estas cargas de trabajo implican el procesamiento de datos genéticos, como secuencias de ADN y estructuras de proteínas, y requieren algoritmos complejos para la alineación de secuencias, llamadas de variantes y minería de datos genómicos. Las GPU aceleran los flujos de trabajo de análisis genómico para que los investigadores puedan procesar datos y obtener información más rápido.
Tenga en cuenta las implicaciones de costes antes de implementar nodos de GPU en clústeres de AKS. Comprenda la optimización de GPU para tareas de proceso intensivo, como Computer Vision, procesamiento de vídeo, HPC y tareas de análisis genómico. Tenga en cuenta estos factores al comparar recursos de GPU frente a recursos de CPU en clústeres de AKS.
Modelos de IA generativa
Los modelos de lenguaje grande (LLM), como OpenAI GPT, Meta Llama, Falcon o Mistral, pueden aprovechar las funcionalidades de procesamiento en paralelo de GPU. Use GPU con estos modelos para mejorar el rendimiento.
Las GPU pueden acelerar las tareas de entrenamiento e inferencia, que implican cálculos complejos y grandes cantidades de datos. Las GPU tienen funcionalidades de procesamiento en paralelo que dividen las tareas de cálculo grandes de un modelo determinado en subtareas más pequeñas que se ejecutan simultáneamente. Este proceso ofrece resultados rápidos y mejora el rendimiento.
Los modelos de lenguaje suelen tener redes neuronales complejas con varias capas y parámetros, lo que puede aumentar la demanda computacional. Las GPU aceleran las operaciones clave en el procesamiento del lenguaje, como la multiplicación de matrices y las convoluciones, lo que acelera los tiempos de entrenamiento e inferencia.
Las GPU proporcionan suficiente capacidad de memoria, ancho de banda y capacidad de procesamiento para controlar las aplicaciones basadas en LLM que tienen interfaces conversacionales y generación de texto. Por ejemplo, las mejoras de GPU proporcionan tiempos de respuesta rápidos para los usuarios que interactúan con bots de chat y asistentes de IA.
No todas las cargas de trabajo se benefician de los nodos de agente habilitados para GPU y, en algunos casos, las CPU son suficientes. Por ejemplo, las cargas de trabajo que son principalmente de entrada y de salida o que no requieren cálculos intensivos podrían no mejorar con las GPU.
Testimonios de clientes
Muchos clientes de Microsoft aprovechan las cargas de trabajo de GPU para innovar para sus clientes. Considere los siguientes ejemplos:
Procedimientos recomendados de implementación de cargas de trabajo de GPU
AKS proporciona varias opciones para implementar cargas de trabajo y grupos de nodos de Linux y Windows habilitados para GPU. Para garantizar el funcionamiento sin problemas de la carga de trabajo de GPU, siga estos procedimientos recomendados.
Implementación de las cargas de trabajo de Linux
Cree un grupo de nodos con una máquina virtual (VM) habilitada para GPU compatible e instale manualmente el complemento de dispositivo NVIDIA para implementar grupos de nodos linux habilitados para GPU. Este método no admite la actualización de un grupo de nodos existente para agregar GPU.
Consulte las máquinas virtuales compatibles habilitadas para GPU en Azure. Se recomienda usar un tamaño mínimo de Standard_NC6s_v3 para los grupos de nodos de AKS. AKS no es compatible con la serie NVv4 basada en GPU AMD.
Comprenda las limitaciones al usar un grupo de nodos habilitado para GPU linux de Azure. Las revisiones de seguridad automáticas no se aplican y el comportamiento predeterminado del clúster es no administrado.
Use selectores de nodos de Kubernetes, afinidad de nodo, contaminaciones y tolerancias al programar cargas de trabajo en los grupos de nodos habilitados para GPU.
Implementación de cargas de trabajo de Windows
Cree un grupo de nodos con una máquina virtual habilitada para GPU compatible para implementar grupos de nodos de Windows habilitados para GPU. AKS instala automáticamente los controladores y los componentes de NVIDIA necesarios. Este método no admite la actualización de un grupo de nodos existente para agregar GPU.
Al seleccionar una máquina virtual habilitada para GPU compatible, AKS instala automáticamente el controlador NVIDIA CUDA o GRID adecuado. Algunas cargas de trabajo dependen de un controlador específico, lo que puede afectar a la implementación. Para los tamaños de máquina virtual de las series NC y ND, AKS instala el controlador CUDA. En el caso de los tamaños de máquina virtual de la serie NV, AKS instala el controlador GRID.
Consulte las máquinas virtuales compatibles habilitadas para GPU en Azure. Se recomienda usar un tamaño mínimo de Standard_NC6s_v3 para los grupos de nodos de AKS. AKS no es compatible con la serie NVv4 basada en GPU AMD.
Comprenda las limitaciones al usar un grupo de nodos de Windows. Las versiones 1.28 y posteriores de Kubernetes no admiten GPU de Windows.
Use selectores de nodos de Kubernetes, afinidad de nodo, contaminaciones y tolerancias al programar cargas de trabajo en los grupos de nodos habilitados para GPU.
Nota:
La GPU de Windows es una característica en versión preliminar. Debe registrar la marca de característica WindowsGPUPreview
.
Operador de GPU de NVIDIA
El operador de GPU de NVIDIA es una herramienta que puede usar para implementar y administrar recursos de GPU de forma eficaz en clústeres de Kubernetes. Puede usar el operador para automatizar la instalación, la configuración y el mantenimiento de los componentes de software. Este enfoque garantiza el uso óptimo de las GPU de NVIDIA para cargas de trabajo exigentes, como las cargas de trabajo de inteligencia artificial y aprendizaje automático.
El operador de GPU de NVIDIA administra automáticamente todos los componentes de software Nvidia que necesita para implementar GPU, como el complemento de dispositivo NVIDIA para Kubernetes y el entorno de ejecución del contenedor nvidia. El operador instala automáticamente el controlador. Para obtener más información, consulte Información general sobre NVIDIA.
Si quiere un mayor control y flexibilidad para cargas de trabajo avanzadas de GPU, puede usar el operador de GPU NVIDIA con los nodos habilitados para GPU en AKS. El operador de GPU NVIDIA no admite GPU de Windows.
Puede usar los siguientes procedimientos recomendados:
Use el operador de GPU de NVIDIA para realizar configuraciones avanzadas de GPU, como la selección de la versión del controlador y la segmentación de tiempo.
Omita la instalación automática del controlador antes de usar el operador de GPU.
Establezca el recuento mínimo en 1 cuando use el operador de GPU con el escalador automático del clúster.
Nota:
Microsoft no admite ni administra el mantenimiento y la compatibilidad de los controladores NVIDIA como parte de la implementación de la imagen de nodo cuando se usa el operador de GPU.
Implementación de las cargas de trabajo de GPU para LLM
El operador de cadena de herramientas de IA de Kubernetes (KAITO) es un operador de Kubernetes que simplifica la forma en que se ejecutan los LLM de código abierto, como Falcon y Llama2, en el clúster de Kubernetes. Puede implementar KAITO en el clúster de AKS como un complemento administrado para AKS. KAITO usa Karpenter para aprovisionar e implementar automáticamente nodos de GPU en función de una especificación en la definición de recursos personalizados del área de trabajo del modelo elegido. KAITO crea el servidor de inferencia como punto de conexión para LLM y reduce el tiempo de incorporación general para que pueda realizar operaciones de aprendizaje automático en lugar de la configuración y el mantenimiento de la infraestructura.
Para mejorar las operaciones de aprendizaje automático, KAITO proporciona las siguientes funcionalidades:
Administración de imágenes de contenedor: use imágenes de contenedor para administrar LLM. KAITO proporciona un servidor HTTP para que pueda usar una biblioteca de modelos compatible para realizar llamadas de inferencia.
Configuración de hardware de GPU: KAITO proporciona configuraciones preestablecidas que se aplican automáticamente en función de los requisitos del modelo. No es necesario ajustar manualmente los parámetros de implementación para ajustarse al hardware de GPU.
Aprovisionamiento automático de nodos de GPU: KAITO aprovisiona automáticamente nodos de GPU en función de los requisitos del modelo y recomienda tamaños de máquina virtual de GPU de menor coste para configurar la inferencia distribuida.
Integración con el Registro de artefactos Microsoft: si la licencia de LLM lo permite, KAITO puede hospedar imágenes de modelo en el registro de artefactos público. Este método simplifica el acceso y la implementación de modelos admitidos. Para los modelos de código abierto con licencias MIT o Apache2 que el repositorio KAITO no admite, puede enviar una solicitud para la incorporación de nuevos modelos.
Para obtener más información sobre KAITO, consulte los siguientes recursos:
- Exploración del proyecto de código abierto KAITO
- Implementación de un modelo de IA en AKS con KAITO
- Ajuste de los modelos de lenguaje con KAITO de código abierto
- Implementación de KAITO en AKS mediante Terraform
Escalado de cargas de trabajo y clústeres
Para escenarios de inteligencia artificial y aprendizaje automático, debe diferenciar entre las cargas de trabajo de entrenamiento y la inferencia con modelos previamente entrenados. Para compilar y entrenar el modelo de aprendizaje automático, considere la posibilidad de usar el proceso de GPU diseñado para el aprendizaje profundo y paralelizar los cálculos de IA. El entrenamiento a menudo requiere escalado gradual y la distribución de grandes cantidades de datos entre GPU para lograr una alta precisión con paralelismo de datos.
El particionamiento de modelos es una técnica avanzada común que puede usar para dividir las fases del entrenamiento del modelo. Puede asignar GPU a distintas tareas y maximizar su uso. Las GPU pueden escalar vertical y horizontalmente cargas de trabajo de HPC, como máquinas virtuales de la serie NV o de la serie ND en Azure. Esta funcionalidad ayuda a mantener un uso elevado de los recursos y a reducir la intervención del usuario para los procesos de aprendizaje automático que son largos y costosos.
Como alternativa, puede usar modelos de inteligencia artificial y aprendizaje automático previamente entrenados y de código abierto solo para la inferencia. Empiece con modelos populares como Llama, Falcon o Mistral como una opción más rápida y rentable en comparación con la creación y entrenamiento de un LLM desde cero. Para obtener más información, consulte Modelos de lenguaje en AKS.
Cuando se usan modelos entrenados previamente para la inferencia, es posible que experimente un uso dinámico y fluctuante de los recursos, en función del volumen de datos que procese. Al ejecutar datos dinámicos a través del modelo elegido, a veces se producen picos en el tráfico en función del tamaño y los requisitos del modelo. Debe mantener un nivel aceptable y bajo de latencia a lo largo del proceso de inferencia. Para usar eficazmente las GPU para lograr un alto rendimiento y una latencia baja, puede realizar la inferencia distribuida con los modelos compatibles con KAITO. Este enfoque amplía las opciones de proceso para incluir SKU de recuento de GPU inferiores que tienen una o dos GPU cada una, proporciona alta disponibilidad entre regiones de Azure y reduce los costes de mantenimiento.
Administración de costes de carga de trabajo de GPU
Las GPU pueden aumentar el coste. Supervise correctamente las cargas de trabajo para ayudar a comprender qué impulsa los costes de GPU e identificar las oportunidades de optimización. Para aumentar la visibilidad de los costes, puede usar el complemento de análisis de costes de AKS.
Los escenarios siguientes se benefician de la visibilidad de los costes.
Coste de tamaño de máquina virtual habilitada para GPU
Seleccione el tamaño de máquina virtual habilitada para GPU adecuado para optimizar el coste de ejecutar GPU. Los costes diarios pueden variar en función del tamaño de máquina virtual que elija. Las GPU A100 son costosas. Debe evitarlas a menos que la carga de trabajo tenga requisitos específicos. El análisis de costes de AKS muestra el coste diario de cada una de las máquinas virtuales y desglosa los costes asociados de cada carga de trabajo que se ejecuta en la máquina virtual habilitada para GPU. Use estos datos para evaluar si tiene un tamaño de máquina virtual adecuado o si necesita una opción más rentable.
Coste por inactividad
Después de crear un grupo de nodos habilitado para GPU, incurre en costes en el recurso de Azure aunque no ejecute una carga de trabajo de GPU. Los costes por inactividad representan el coste de la capacidad de recursos disponibles que no usan las cargas de trabajo. Este coste se suma rápidamente si tiene varios nodos sin usar. Para evitar altos costes de inactividad, cree solo grupos de nodos al ejecutar la carga de trabajo y use métodos como la característica de detención del clúster cuando no ejecute la carga de trabajo. El análisis de costes de AKS muestra los costes inactivos de cada uno de los nodos.
Sobreaprovisionamiento y uso insuficiente
El sobreaprovisionamiento es cuando se asignan más recursos de los necesarios para un pod. El sobreaprovisionamiento conduce a la pérdida de recursos y a su uso insuficiente. El exceso de recursos permanece reservado para el nodo aunque no los use. Para reducir el sobreaprovisionamiento, use el escalador automático vertical de pods para establecer solicitudes y límites precisos en función de los patrones de uso anteriores.
La infrautilización puede producirse cuando las cargas de trabajo no usan las GPU por completo. Considere las técnicas avanzadas de uso compartido y creación de particiones de GPU. En lugar de usar varios nodos, puede usar un único nodo con particiones para maximizar el uso de GPU. Estas técnicas pueden ayudarle a asignar la cantidad adecuada de aceleración de GPU para cada carga de trabajo, lo que puede mejorar el uso y reducir los costes operativos de la implementación.
Las implementaciones de cargas de trabajo de GPU de Linux en AKS admiten GPU de varias instancias. Use esta característica para crear particiones de una GPU NVIDIA A100 en hasta siete instancias independientes. Cada instancia tiene su propia memoria y multiprocesador de transmisión.
NVIDIA admite otras técnicas de creación de particiones, como la segmentación de tiempo y la implementación del servicio multiproceso. Para aplicar manualmente estas configuraciones, use el operador de GPU NVIDIA.
En escenarios avanzados, puede mejorar el empaquetado de contenedores de recursos en los nodos. Puede establecer configuraciones del programador y ejecutar un segundo programador. Configure y mantenga un programador secundario para usar estrategias de ubicación de cargas de trabajo que difieren del programador de AKS predeterminado. Para obtener más información, consulte Configuración de varios programadores en Kubernetes.
Colaboradores
Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.
Autor principal:
- Ayobami Ayodeji | Jefe de programas sénior
Otros colaboradores:
- Steve Buchanan | Administrador de programas principal
- Sachi Desai | Administrador de productos
- Ally Ford | Administradora de productos 2
- Paolo Salvatori | Ingeniero de servicio principal
- Erin Schaffer | Desarrollador de contenido 2
Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.
Pasos siguientes
- Traiga sus propios modelos de IA a aplicaciones inteligentes en AKS con KAITO
- Implementación de un modelo de IA en AKS con KAITO
- Implementación de una aplicación que usa OpenAI en AKS
- Implementación de KAITO en AKS mediante Terraform
- Implementación de la extensión de Azure Machine Learning en clústers de AKS o de Kubernetes habilitados para Azure Arc
- Más información sobre el catálogo de modelos y las colecciones en Azure
- Uso de GPU para grupos de nodos de Windows en AKS
- Uso de GPU en AKS