Mejorando la gestión de memoria de GPU para el entrenamiento de DNN
Un nuevo marco mejora el uso de la memoria en redes neuronales profundas a gran escala.
― 8 minilectura
Tabla de contenidos
- El Problema de la Memoria en GPU
- Enfoques de Gestión de Memoria
- Nuevo Marco de Asignación de Memoria
- Gestión de Memoria Virtual
- Características Clave de GPU Memory Lake
- Pool de Memoria Virtual
- Estrategia de Asignación Eficiente
- Transparencia y Compatibilidad
- Evaluación Experimental
- Impacto en el Entrenamiento de DNN
- Conclusión
- Fuente original
- Enlaces de referencia
Las redes neuronales profundas a gran escala (DNNS), especialmente los modelos de lenguaje grandes (LLMs), son cada vez más importantes en el campo de la inteligencia artificial (IA). Estos modelos pueden realizar tareas complejas, como entender y generar lenguaje humano. Sin embargo, entrenar y ajustar estos modelos grandes requiere recursos computacionales significativos, especialmente memoria. Uno de los problemas principales al usar unidades de procesamiento gráfico (GPUs) para estas tareas es que a menudo se quedan sin memoria, lo que lleva a errores y un uso ineficiente de recursos.
Tradicionalmente, la gestión de memoria en GPUs ha dependido de asignadores de memoria nativos o métodos de caching que pueden acelerar la asignación de memoria. Sin embargo, estos métodos enfrentan desafíos al manejar las solicitudes de memoria irregulares generadas por técnicas de entrenamiento modernas, lo que lleva a la Fragmentación. La fragmentación ocurre cuando la memoria libre se divide en muchas piezas pequeñas, dificultando encontrar suficiente espacio contiguo para nuevas solicitudes de memoria.
Para abordar estos problemas de memoria, se ha desarrollado un nuevo marco de asignación de memoria. Este marco utiliza técnicas avanzadas para mejorar la utilización de la memoria, reducir la fragmentación y permitir un entrenamiento eficiente de modelos DNN a gran escala.
GPU
El Problema de la Memoria enMuchos métodos de entrenamiento de DNN utilizan técnicas como recomputación, offloading, entrenamiento distribuido y adaptación de bajo rango para reducir el uso de memoria. Aunque estos métodos pueden ahorrar memoria, también llevan a solicitudes frecuentes e impredecibles de asignación y liberación de memoria. Esta irregularidad a menudo resulta en fragmentación, donde la memoria disponible está dispersa en pequeñas piezas inutilizables.
Por ejemplo, cuando un modelo necesita una cantidad específica de memoria, puede que no encuentre un solo bloque de espacio libre lo suficientemente grande porque la memoria está fragmentada. Como resultado, el sistema reportará un error de fuera de memoria (OOM), lo que detiene el proceso de entrenamiento. Este problema se acentúa a medida que aumenta el tamaño y la complejidad de los modelos.
Enfoques de Gestión de Memoria
Las técnicas de gestión de memoria tradicionales, como el asignador nativo, no son lo suficientemente flexibles para las necesidades dinámicas de los DNNs. Los asignadores nativos, como cudaMalloc y cudaFree, introducen una sobrecarga significativa, ralentizando el proceso. En respuesta, muchos marcos de aprendizaje profundo, como PyTorch y TensorFlow, utilizan asignadores de caching. Estos métodos de caching mantienen un grupo de memoria que permite una asignación y liberación más rápidas sin involucrar las APIs nativas de GPU cada vez.
Sin embargo, los asignadores de caching pueden tener problemas con la fragmentación. A menudo emplean un mecanismo de división para hacer un mejor uso de la memoria disponible en el grupo. Si bien esto puede ayudar a mejorar la utilización de la memoria, también puede llevar a una fragmentación significativa, particularmente con requisitos de entrenamiento grandes y complejos.
Nuevo Marco de Asignación de Memoria
Para abordar estos problemas, se ha propuesto un novedoso marco de asignación de memoria. Este marco utiliza un concepto llamado cosido de memoria virtual (VMS). VMS permite la combinación de bloques de memoria no contiguos, fusionándolos esencialmente para crear bloques más grandes de memoria disponible. Esta técnica ayuda a mitigar la fragmentación al permitir el uso eficiente de la memoria libre dispersa.
El marco, llamado GPU Memory Lake, actúa de manera transparente con los modelos DNN existentes y otras técnicas de optimización de memoria. Funciona en segundo plano, permitiendo la ejecución ininterrumpida de tareas de aprendizaje profundo que consumen muchos recursos. Al emplear características de gestión de memoria virtual de bajo nivel en GPU, GPU Memory Lake puede reducir significativamente el uso de memoria y la fragmentación.
Gestión de Memoria Virtual
La gestión de memoria virtual de bajo nivel proporciona nuevas APIs que permiten la manipulación de la memoria directamente a un nivel granular. Esto permite un mejor control sobre cómo se asigna, reserva y mapea la memoria. El marco GPU Memory Lake aprovecha estas características para crear un sistema de gestión de memoria que opera de manera efectiva para el entrenamiento de DNN a gran escala.
La API de gestión de memoria virtual permite la reserva de direcciones virtuales para la asignación de memoria, creando fragmentos de memoria física y mapeando estos a direcciones virtuales para acceso. Al usar estas APIs, GPU Memory Lake puede asignar bloques de memoria física no contiguos mientras optimiza el uso general de la memoria.
Características Clave de GPU Memory Lake
Pool de Memoria Virtual
Uno de los componentes clave de GPU Memory Lake es la creación de un pool de memoria virtual. Este pool almacena memoria virtual y reduce el número de asignaciones de memoria física. Incluye dos tipos principales de pools de memoria: el pool de memoria primitiva y el pool de memoria cosida.
El pool de memoria primitiva contiene bloques de memoria más pequeños que se pueden asignar individualmente. En contraste, el pool de memoria cosida contiene bloques de memoria más grandes que han combinado múltiples bloques primitivos. Al gestionar estos dos pools de manera efectiva, GPU Memory Lake puede lograr una alta utilización de memoria mientras minimiza la fragmentación.
Estrategia de Asignación Eficiente
La estrategia de asignación dentro de GPU Memory Lake utiliza un algoritmo innovador que asegura una gestión eficiente de la memoria. Cuando se solicita un nuevo bloque de memoria, el sistema evalúa varios estados para determinar la mejor solución. La estrategia se centra en minimizar la fragmentación reutilizando bloques existentes siempre que sea posible.
El proceso incluye verificar coincidencias exactas, dividir bloques más grandes, fusionar múltiples bloques o asignar nuevos bloques cuando es necesario. Este enfoque dinámico permite que el sistema se adapte a las demandas de memoria variables y maneje eficientemente las operaciones de memoria durante el entrenamiento de DNN.
Transparencia y Compatibilidad
GPU Memory Lake está diseñado para ser transparente para los usuarios. Esto significa que los modelos y bibliotecas DNN existentes pueden usarse sin necesidad de modificaciones. El marco puede integrarse fácilmente en herramientas populares de aprendizaje profundo, ofreciendo los beneficios de una mejor gestión de memoria sin requerir un esfuerzo adicional del usuario.
Evaluación Experimental
GPU Memory Lake ha sido probado contra asignadores de memoria tradicionales en varios escenarios de entrenamiento de DNN a gran escala. El marco ha mostrado resultados impresionantes al reducir la fragmentación de memoria y el uso general de memoria.
En varios experimentos, GPU Memory Lake pudo reducir la fragmentación hasta en un 33% en comparación con los asignadores de caching existentes. Además, permitió un ahorro significativo de memoria, demostrando la capacidad de liberar 25 GB de memoria GPU en algunos casos.
Las pruebas incluyeron una variedad de LLMs y diversas técnicas de optimización para evaluar qué tan bien opera el marco en diferentes escenarios de entrenamiento. Los resultados mostraron consistentemente una mejor utilización de la memoria y una reducción de la fragmentación, confirmando su efectividad.
Impacto en el Entrenamiento de DNN
La capacidad de gestionar la memoria de manera más efectiva tiene un impacto significativo en el entrenamiento de DNNs a gran escala. Al reducir la fragmentación de memoria, GPU Memory Lake permite tamaños de lote más grandes y procesos de entrenamiento más eficientes. Esto se traduce en tiempos de entrenamiento más rápidos y un mejor rendimiento para modelos complejos.
Además, el marco asegura que los usuarios puedan trabajar en grandes modelos DNN sin tener que preocuparse por errores OOM, que pueden interrumpir el entrenamiento y llevar a un desperdicio de recursos. La integración fluida ayuda a mantener la eficiencia del flujo de trabajo mientras maximiza la utilización de recursos.
Conclusión
En resumen, los desafíos planteados por la gestión de memoria en GPU son críticos para avanzar en las tecnologías de aprendizaje profundo. La introducción de GPU Memory Lake, con su innovador mecanismo de cosido de memoria virtual, proporciona una solución robusta a la fragmentación y el uso ineficiente de memoria que a menudo aquejan el entrenamiento de DNNs a gran escala.
Este marco no solo mejora la utilización de la memoria, sino que también simplifica la experiencia del usuario al permitir una integración sencilla en los flujos de trabajo existentes. El desarrollo continuo de tales técnicas de gestión de memoria será esencial para mejorar aún más las capacidades de los modelos de IA y asegurar que los avances en poder computacional se realicen plenamente en aplicaciones prácticas.
A medida que la demanda de modelos más grandes y complejos crece, sistemas de gestión de memoria eficientes como GPU Memory Lake jugarán un papel crucial en habilitar el futuro de la investigación y desarrollo de IA.
Título: GMLake: Efficient and Transparent GPU Memory Defragmentation for Large-scale DNN Training with Virtual Memory Stitching
Resumen: Large-scale deep neural networks (DNNs), such as large language models (LLMs), have revolutionized the artificial intelligence (AI) field and become increasingly popular. However, training or fine-tuning such models requires substantial computational power and resources, where the memory capacity of a single acceleration device like a GPU is one of the most important bottlenecks. Owing to the prohibitively large overhead (e.g., $10 \times$) of GPUs' native memory allocator, DNN frameworks like PyTorch and TensorFlow adopt a caching allocator that maintains a memory pool with a splitting mechanism for fast memory (de)allocation. Unfortunately, the caching allocator's efficiency degrades quickly for popular memory reduction techniques such as recomputation, offloading, distributed training, and low-rank adaptation. The primary reason is that those memory reduction techniques introduce frequent and irregular memory (de)allocation requests, leading to severe fragmentation problems for the splitting-based caching allocator. To mitigate this fragmentation problem, we propose a novel memory allocation framework based on low-level GPU virtual memory management called GPU memory lake (GMLake). GMLake employs a novel virtual memory stitching (VMS) mechanism, which can fuse or combine non-contiguous memory blocks with a virtual memory address mapping. GMLake can reduce an average of 9.2 GB (up to 25 GB) GPU memory usage and 15% (up to 33% ) fragmentation among eight LLM models on GPU A100 with 80 GB memory. GMLake is completely transparent to the DNN models and memory reduction techniques and ensures the seamless execution of resource-intensive deep-learning tasks. We have open-sourced GMLake at https://github.com/intelligent-machine-learning/glake/tree/main/GMLake.
Autores: Cong Guo, Rui Zhang, Jiale Xu, Jingwen Leng, Zihan Liu, Ziyu Huang, Minyi Guo, Hao Wu, Shouren Zhao, Junping Zhao, Ke Zhang
Última actualización: 2024-01-16 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2401.08156
Fuente PDF: https://arxiv.org/pdf/2401.08156
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.