Tu GPU no es pequeña... el problema es tu configuración

BBetter Stack
컴퓨터/소프트웨어자격증/평생교육AI/미래기술

Transcript

00:00:00Esto es DeepSpeed, la librería de código abierto de Microsoft que se integra con PyTorch y soluciona el verdadero problema de la memoria.
00:00:07Permite cargar modelos que normalmente fallarían al instante en una sola GPU sin sobrecargarla. Los modelos grandes no fallan por ser lentos.
00:00:14Fallan porque los estados del optimizador, los gradientes y los parámetros terminan agotando la VRAM. El secreto de DeepSpeed es ZeRO, que fragmenta los estados de entrenamiento.
00:00:23Así no almacenas lo mismo en todas partes. Publicamos vídeos constantemente, ¡así que asegúrate de suscribirte!
00:00:30Entremos en materia y pongámoslo en marcha. Voy a ejecutar todo esto en Google Colab, ya que estoy usando un Mac con chip M4 Pro.
00:00:40Como no tengo las GPUs de Nvidia es un poco más difícil, pero puedo hacerlo igualmente en Colab.
00:00:46Primero, haré una comprobación rápida de mis GPUs y luego instalaremos todos los paquetes con pip.
00:00:51Instalaré cosas como PyTorch, Hugging Face y DeepSpeed, y luego ejecutaré DS Report para verificar la configuración de CUDA y el compilador.
00:00:59Haremos unas cuantas instalaciones más para asegurar que todo funcione sin problemas.
00:01:02Después crearemos nuestro archivo JSON de configuración para DeepSpeed. Este archivo es la clave de todo.
00:01:09Empezaremos con ZeRO Stage 2, que fragmenta los estados del optimizador y los gradientes entre las GPUs.
00:01:14Esto reduce drásticamente el uso de memoria mientras los parámetros del modelo se mantienen replicados. No os obsesionéis con esto, a mí me volvió loco.
00:01:22Simplemente empezad con la documentación oficial, cambiad una cosa a la vez y resistid la tentación de añadir configuraciones al azar.
00:01:28Podéis encontrar la configuración tanto en la documentación de Hugging Face como en la de DeepSpeed.
00:01:34De ahí saqué también la mayor parte de mi script de Python.
00:01:37Aunque hice algunos ajustes para que mi sistema Mac lo gestionara mejor.
00:01:42Si este paso falla, detente aquí, porque la mayoría de los problemas de DeepSpeed son incompatibilidades con CUDA, no con tu modelo.
00:01:48Vamos a ejecutarlo todo ahora y a ver cómo funciona.
00:01:51Usaré un conjunto de datos pequeño importado para este ejemplo, para que corra más rápido.
00:01:58Y listo, tras unos minutos, podemos ver los pasos realizados y también el pico de memoria de la GPU.
00:02:03Es cierto que la pérdida de entrenamiento en esta ejecución no cambió ni bajó demasiado.
00:02:08Pero podríamos optimizarlo o usar un conjunto de datos mayor para mejorar el resultado. Ahora bien...
00:02:13Esto es lo que la gente cree que obtiene, pero aun así se quedan sin memoria.
00:02:16ZeRO viene por etapas, y cada una responde a una pregunta: “¿Qué puedo dejar de almacenar en una sola GPU?”
00:02:24La Etapa 1 fragmenta los estados del optimizador; la Etapa 2 hace lo mismo y añade los gradientes.
00:02:30Aquí ya estás recortando en lo que consume tu memoria en silencio. Luego tenemos ZeRO Stage 3.
00:02:36Esta es la importante: fragmenta los estados del optimizador, los gradientes y los parámetros.
00:02:40Es el mayor ahorro de memoria posible, pero incluso eso podría no ser suficiente.
00:02:45Si aun así el modelo no cabe, ZeRO-Infinity permite descargar datos a la CPU o incluso a un NVMe.
00:02:50Sí, sacrificas velocidad por escala, pero a veces la victoria es simplemente lograr que el modelo funcione.
00:02:56Si piensas que la memoria no es tu único problema, tienes razón. DeepSpeed soporta paralelismo 3D: de datos, de pipeline y de tensores.
00:03:04También incluye soporte nativo para modelos de Mezcla de Expertos (MoE).
00:03:09Así, los modelos dispersos no te devoran el cómputo.
00:03:12Ahora tenemos opciones reales. DeepSpeed se integra de maravilla con Hugging Face y Accelerate.
00:03:19Así que no necesitas construirlo todo desde cero.
00:03:21Básicamente tomas lo que necesitas e ignoras el resto. Los benchmarks dependen mucho de tu configuración.
00:03:27Así que no te fíes siempre de los números espectaculares. Intenté ejecutar esto varias veces.
00:03:30Pero de nuevo, con mi chip M4 Pro, no pude optimizarlo más allá con este modelo básico.
00:03:36Es difícil de decir, pero otros proyectos con DeepSpeed han mostrado mejoras brutales en el rendimiento.
00:03:41Especialmente cuando la memoria era el factor limitante. En Windows o Linux, esto puede ser un cambio radical.
00:03:46El mejor consejo es probarlo. Empieza utilizando las configuraciones oficiales.
00:03:51Eso es lo que hice yo; lo ajusté un poco para Mac y solucioné los problemas de CUDA.
00:03:56Vigila la RAM de la CPU si habilitas la descarga (offload) y si decides pasar a multi-GPU más adelante.
00:04:01DeepSpeed es básicamente el botón de “me niego a quedarme sin memoria hoy”.
00:04:07Una vez entiendes ZeRO y el funcionamiento del offload, los modelos grandes se vuelven prácticos en hardware limitado.
00:04:14Aunque configurarlo puede ser confuso al principio.
00:04:17Suscríbete si esto te ha ahorrado tiempo de GPU o si te encantan estas herramientas de desarrollo. ¡Nos vemos en otro vídeo!

Key Takeaway

DeepSpeed permite entrenar y ejecutar modelos de IA de gran escala en hardware limitado mediante la fragmentación inteligente de datos y la descarga de memoria hacia la CPU o el almacenamiento.

Highlights

DeepSpeed es una librería de Microsoft que optimiza el uso de VRAM fragmentando estados del modelo.

La tecnología ZeRO (Zero Redundancy Optimizer) es el núcleo que permite cargar modelos grandes en hardware limitado.

ZeRO Stage 3 y ZeRO-Infinity permiten incluso descargar datos a la CPU o NVMe para evitar errores de memoria.

La configuración se gestiona mediante un archivo JSON

Timeline

Introducción a DeepSpeed y el problema de la memoria

El narrador introduce DeepSpeed como la solución de Microsoft para los problemas de memoria en PyTorch. Explica que los fallos en modelos grandes no suelen deberse a la velocidad, sino al agotamiento de la VRAM por culpa de los estados del optimizador y gradientes. El concepto clave presentado es ZeRO, una tecnología que fragmenta estos estados para evitar redundancias en la GPU. Esta sección establece la base técnica de por qué la gestión eficiente de la memoria es más importante que el tamaño bruto del hardware. Se enfatiza que este sistema permite cargar modelos que normalmente fallarían al instante.

Configuración del entorno y primeros pasos en Colab

El autor explica su flujo de trabajo utilizando Google Colab debido a las limitaciones de su equipo local con chip M4 Pro. Detalla el proceso de instalación de dependencias críticas como PyTorch, Hugging Face y la propia librería DeepSpeed mediante pip. Se menciona el uso de la herramienta "DS Report" para verificar la correcta configuración de CUDA y el compilador del sistema. Esta parte es fundamental para entender que, aunque se use hardware de Apple, el desarrollo se orienta a entornos compatibles con Nvidia. El objetivo aquí es asegurar que el entorno esté listo antes de proceder con la lógica del modelo.

La importancia del archivo JSON y ZeRO Stage 2

Se describe la creación del archivo JSON de configuración, el cual actúa como el cerebro de la optimización en DeepSpeed. El vídeo se centra en ZeRO Stage 2, que se encarga de fragmentar los estados del optimizador y los gradientes entre múltiples GPUs. El orador advierte sobre la complejidad de este paso y aconseja basarse en la documentación oficial de Hugging Face para evitar frustraciones. Recomienda cambiar un solo parámetro a la vez para mantener el control sobre el rendimiento del sistema. Este segmento subraya que la configuración correcta es a menudo el mayor obstáculo para los desarrolladores.

Ejecución, resultados y depuración de errores

En esta fase se ejecuta el script de entrenamiento utilizando un conjunto de datos pequeño para agilizar la demostración. El narrador señala que la mayoría de los errores en DeepSpeed surgen por incompatibilidades con CUDA más que por fallos en el modelo mismo. Tras la ejecución, se analizan métricas como el pico de memoria de la GPU y los pasos realizados durante el proceso. Aunque la pérdida de entrenamiento no mejoró significativamente, se explica que esto es normal debido a la simplicidad del conjunto de datos usado. Lo importante aquí es validar que el modelo se mantuvo estable sin superar los límites de VRAM.

Explicación profunda de las etapas de ZeRO

El vídeo profundiza en las diferentes etapas de ZeRO para aclarar qué datos se dejan de almacenar en cada fase. La Etapa 1 fragmenta solo el optimizador, la Etapa 2 añade los gradientes y la Etapa 3 incluye también los parámetros del modelo. Para casos extremos, se presenta ZeRO-Infinity, que permite el "offload" o descarga de datos hacia la RAM de la CPU o discos NVMe. El autor admite que esto sacrifica velocidad, pero resalta que la prioridad es lograr que el modelo funcione. Esta sección es vital para comprender la escalabilidad del sistema según las necesidades de memoria.

Funciones avanzadas, integración y consejos finales

Finalmente, se exploran capacidades avanzadas como el paralelismo 3D y el soporte para arquitecturas de Mezcla de Expertos (MoE). El narrador destaca la excelente integración con el ecosistema de Hugging Face y la herramienta Accelerate para simplificar el despliegue. Se ofrece un consejo práctico sobre vigilar la RAM de la CPU cuando se activa el offload en configuraciones multi-GPU. El vídeo concluye definiendo a DeepSpeed como la herramienta definitiva para evitar errores de memoria en modelos de gran tamaño. El autor cierra invitando a la audiencia a suscribirse si el contenido les ha ayudado a optimizar su tiempo de cómputo.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video