Haciendo más fácil entrenar modelos grandes con FSDP
Una mirada a simplificar el entrenamiento de modelos grandes usando FSDP y torch.compile.
― 6 minilectura
Tabla de contenidos
- ¿Qué es todo este rollo de FSDP?
- ¿Cómo funciona?
- ¿Qué hace que este nuevo método sea especial?
- Los detalles de cómo todo esto funciona
- Optimización, la cereza del pastel
- Interfaces amigables para el usuario
- Evaluación: ¡Vamos a ver los números!
- Los desafíos que enfrentaron
- Trabajo futuro y mejoras
- Conclusión: Un camino más brillante por delante
- Fuente original
- Enlaces de referencia
Entrenar modelos muy grandes puede ser tan difícil como convencer a un gato de que se bañe. Se necesita un montón de potencia computacional y mucho esfuerzo para que todo funcione sin problemas. Este artículo habla de una nueva forma de hacer que este entrenamiento sea más fácil y rápido usando un método llamado Fully Sharded Data Parallel (FSDP) con una nueva herramienta de PyTorch llamada torch.compile.
¿Qué es todo este rollo de FSDP?
FSDP es como una manera amigable de compartir trabajo entre varias computadoras. En vez de que cada computadora haga todo el trabajo pesado para un modelo grande, FSDP divide el trabajo. Así como dividirías las tareas del hogar entre los miembros de la familia, FSDP reparte las partes del modelo en varios dispositivos para ahorrar memoria y hacer los cálculos más rápidos.
Imagina que tienes un modelo gigantesco, como el Llama 3.1, que requiere nada menos que 30.84 millones de horas de tiempo de computadora para entrenarse. ¡Es un montón de tiempo! FSDP ayuda a reducir esto compartiendo la carga de trabajo, así que ninguna computadora se abruma.
¿Cómo funciona?
Cuando usas FSDP, el modelo se divide en partes más pequeñas, y cada parte vive en una computadora diferente. Cuando es hora de entrenar, cada computadora agarra su pedazo de datos, hace sus cálculos y luego pasa rápidamente los resultados.
Lo genial es que FSDP se puede usar con otros trucos como Tensor Parallel o Pipeline Parallel. Piensa en ellos como herramientas útiles en una caja de herramientas. Cada herramienta ayuda a que el proceso sea más rápido y eficiente.
¿Qué hace que este nuevo método sea especial?
El nuevo giro viene de una función llamada torch.compile, que funciona como magia para tu entrenamiento. Ayuda a organizar el flujo de trabajo para que tanto las comunicaciones como los cálculos puedan ocurrir al mismo tiempo sin estorbarse. Esto significa que no solo ahorras tiempo, sino que también haces que el entrenamiento sea más fluido, como deslizarse por una colina nevada en lugar de arrastrarte por ella.
Esta nueva versión de FSDP tiene algunas características destacadas:
Simplicidad: No necesitas cambiar mucho en tu código. Es fácil de usar, como cambiar de un libro largo y aburrido a una tira cómica.
Composabilidad: Se lleva bien con otros métodos de entrenamiento. Puedes mezclar y combinar sin romperte la cabeza, como mezclar chocolate y mantequilla de maní.
Mejoras de rendimiento: Con un poco de magia del compilador, acelera las cosas. Puedes notar mejoras tanto en el uso de memoria como en la velocidad de ejecución.
Depurabilidad: Aún puedes experimentar y arreglar cosas sin perder los beneficios de estos nuevos trucos. ¡Es como tener tu pastel y comértelo también!
Los detalles de cómo todo esto funciona
Para que todo esto suceda, el nuevo método usa bloques de construcción existentes de PyTorch. Emplea una magia de tensores llamada DTensor y algunas técnicas únicas para envolver y desenvolver esos tensores durante el entrenamiento, como un mago sacando un conejo de un sombrero.
Cuando haces un pase hacia adelante (eso es hablar fancy de hacer los cálculos iniciales), recopila todos los pedacitos que necesita, hace las matemáticas y luego olvida esos pedacitos de inmediato para ahorrar memoria. Es como comer un snack y luego tirar el envoltorio a la basura para mantener todo ordenado.
Durante el pase hacia atrás (que se trata de ajustar el modelo basado en lo que aprendió), hace un baile similar. Recoge lo que necesita, calcula los cambios y pasa la información de vuelta. El método hacia atrás realiza este truco sin problemas, gracias a las poderosas herramientas de PyTorch.
Optimización, la cereza del pastel
Una de las mejores partes es que este método introduce dos trucos especiales llamados "bucketing" y "reordering". Bucketing agrupa las comunicaciones, lo que reduce el número de veces que necesitas enviar información de ida y vuelta. Es como meter todo en una bolsa grande antes de ir a otra habitación en vez de hacer múltiples viajes.
Reordering asegura que estas comunicaciones y cálculos se superpongan, reduciendo el tiempo de espera. Es como hacer malabares: cuanto más mantengas las pelotas en el aire sin dejarlas caer, más suave será el espectáculo.
Interfaces amigables para el usuario
Para aquellos que no son genios de la tecnología pero quieren entrar al ruedo, este método ofrece interfaces simples. Puedes envolver tu modelo en un simple comando y ver cómo se prepara para el entrenamiento, sin magia negra involucrada.
El envoltorio puede hacerse manualmente, donde los usuarios tienen control sobre lo que va dónde, o automáticamente, donde el sistema lo averigua por ti. Es como tener un asistente personal que conoce tus preferencias para organizar tu armario.
Evaluación: ¡Vamos a ver los números!
El nuevo método ha sido puesto a prueba con varios modelos de diferentes tamaños, como el Llama 3.1. Al compararlo con el método anterior, mostró resultados impresionantes. Gracias a las optimizaciones, logró hasta un 28.54% menos de uso de memoria y hasta un 68.67% más rápido en tiempos de procesamiento.
Imagina cocinar un festín para una gran reunión familiar. Ahora puedes hacer la misma comida en la mitad del tiempo – esa es la esencia de lo que logra este nuevo método.
Los desafíos que enfrentaron
Como en toda buena historia, hay desafíos. Entrenar modelos grandes sigue siendo complicado, y mantener todo depurable mientras usas herramientas poderosas puede ser complicado. También hay que asegurar la compatibilidad con varias técnicas usadas en el entrenamiento.
Los métodos anteriores usaban ganchos hacia atrás para comunicaciones eficientes, y esto puede hacer que sea difícil para el nuevo sistema rastrear todo. Es como intentar encontrar tu camino en un laberinto con los ojos vendados: desafiante pero no imposible.
Trabajo futuro y mejoras
Aunque el nuevo método trae mucho a la mesa, siempre hay espacio para mejorar. Futuros desarrollos podrían investigar formas aún más inteligentes de gestionar las comunicaciones y cálculos. Es como actualizar tu bicicleta a una motocicleta para un viaje aún más rápido.
Conclusión: Un camino más brillante por delante
En resumen, este nuevo enfoque más simple para el entrenamiento distribuido con torch.compile ayuda a que el entrenamiento para modelos grandes sea más manejable. Se trata de hacer las cosas más fáciles mientras sigues obteniendo grandes resultados. Usar FSDP junto con estos trucos inteligentes añade una capa de eficiencia que realmente puede ahorrar tiempo y esfuerzo.
El viaje de entrenar modelos, aunque sigue siendo complejo, se vuelve un poco más amigable para el usuario, y quién sabe, con el progreso continuo, podríamos lograr que sea más suave que nunca, como deslizarse por un tobogán recién encerado en el parque.
Título: SimpleFSDP: Simpler Fully Sharded Data Parallel with torch.compile
Resumen: Distributed training of large models consumes enormous computation resources and requires substantial engineering efforts to compose various training techniques. This paper presents SimpleFSDP, a PyTorch-native compiler-based Fully Sharded Data Parallel (FSDP) framework, which has a simple implementation for maintenance and composability, allows full computation-communication graph tracing, and brings performance enhancement via compiler backend optimizations. SimpleFSDP's novelty lies in its unique $torch.compile$-friendly implementation of collective communications using existing PyTorch primitives, namely parametrizations, selective activation checkpointing, and DTensor. It also features the first-of-its-kind intermediate representation (IR) nodes bucketing and reordering in the TorchInductor backend for effective computation-communication overlapping. As a result, users can employ the aforementioned optimizations to automatically or manually wrap model components for minimal communication exposure. Extensive evaluations of SimpleFSDP on Llama 3 models (including the ultra-large 405B) using TorchTitan demonstrate up to 28.54% memory reduction and 68.67% throughput improvement compared to the most widely adopted FSDP2 eager framework, when composed with other distributed training techniques.
Autores: Ruisi Zhang, Tianyu Liu, Will Feng, Andrew Gu, Sanket Purandare, Wanchao Liang, Francisco Massa
Última actualización: 2024-11-05 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2411.00284
Fuente PDF: https://arxiv.org/pdf/2411.00284
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.
Enlaces de referencia
- https://github.com/facebookresearch/repo
- https://ai.meta.com/blog/?page=1
- https://arxiv.org/pdf/2407.21783
- https://colab.research.google.com/drive/1FqbtlCmZrKVfUJh0qYhj48BLYnmB-1fS?usp=sharing
- https://docs.google.com/document/d/1G1zrCmChihyYief6Zn0lZ8SpxHiJAnOKUq0EaVPMOKM/edit?usp=sharing
- https://docs.google.com/document/d/1G1zrCmChihyYief6Zn0lZ8SpxHiJAnOKUq0EaVPMOKM/edit?tab=t.0