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!