Esta solución se basa en herramientas de código abierto que incluyen PyTorch, Hugging Face Transformers y Liger Kernels. Los autores también desean agradecer a Aiham Taleb, Arefeh Ghahvechi, Manav Choudhary, Rohit Thekkanal, Daz Akbarov, Jamila Jamilova, Ross Povelikin, Almas Moldakanov, Christelle Xu e Ivan Khvostishkov por sus contribuciones para hacer posible este proyecto.
Azercell Telecom LLC, el principal proveedor de telecomunicaciones de Azerbaiyán, quería crear un modelo de lenguaje grande (LLM) azerbaiyano en Amazon SageMaker AI para casos de uso de telecomunicaciones y un chatbot de cara al cliente. El desafío: adaptar los modelos básicos (FM) a un lenguaje morfológicamente rico con datos de capacitación limitados y sin un plan existente para una capacitación LLM eficiente en azerbaiyano. En una colaboración de seis semanas, Azercell trabajó con el Centro de innovación de IA generativa de AWS para establecer un marco listo para producción en Amazon SageMaker AI que brindó un rendimiento de entrenamiento un 23 % mayor y un uso máximo de memoria de GPU un 58 % menor a través de optimizaciones a nivel de kernel en una instancia ml.p5.48xlarge. El marco también logró una mejora del doble en tokens por palabra utilizando un tokenizador personalizado, duplicando efectivamente la cantidad de texto en azerbaiyano que cabe dentro de la ventana de contexto del modelo. Si trabaja con lenguajes de bajos recursos o morfológicamente complejos, esta publicación explica el enfoque para que pueda evaluar técnicas similares.
Descripción general de la solución
El marco implementa tres etapas secuenciales, cada una de las cuales produce artefactos que alimentan a la siguiente.
Etapa 1: El desarrollo del tokenizador crea un tokenizador eficiente para los azerbaiyanos. Evaluamos tres enfoques (tokenizadores básicos optimizados en inglés, extensión de vocabulario y tokenizadores monolingües personalizados) que miden la eficiencia de la codificación a través de métricas estandarizadas. El tokenizador monolingüe personalizado logró los resultados más sólidos, reduciendo a la mitad los tokens por palabra en comparación con la línea de base. Etapa 2: La capacitación previa continua (CPT) adapta un FM (Llama 3.2 1B) para comprender el azerbaiyano mediante capacitación distribuida y optimizaciones de Liger Kernel en trabajos de capacitación de IA de Amazon SageMaker. Esto permite tamaños de lotes más grandes y un mayor rendimiento en el mismo hardware. Si bien no se requirió capacitación distribuida para esta prueba de concepto a escala 1B, será esencial a medida que Azercell escale a modelos más grandes. Etapa 3: el ajuste supervisado con adaptación de bajo rango (LoRA) transforma el modelo previamente entrenado en un asistente conversacional. Después del CPT, el modelo puede predecir los tokens azerbaiyanos pero no puede entablar un diálogo. La etapa 3 aplica LoRA, un método de ajuste fino eficiente en los parámetros que reduce significativamente los parámetros entrenables.
Las etapas de capacitación (ajuste fino de CPT y LoRA) se ejecutaron como trabajos de capacitación de IA de Amazon SageMaker lanzados desde Amazon SageMaker Unified Studio, cada uno de los cuales apuntaba a un script de capacitación personalizado. Cada trabajo aprovisiona instancias nuevas de Amazon Elastic Compute Cloud (Amazon EC2) y finaliza una vez finalizado, por lo que usted paga solo por el tiempo de procesamiento real sin costo de clúster inactivo.
El siguiente diagrama ilustra la arquitectura modular, donde cada etapa se puede optimizar de forma independiente. Las mejoras del Tokenizer benefician cada etapa de capacitación posterior y las configuraciones de CPT se transfieren a través de tareas de ajuste.
Figura 1. La arquitectura del canal de formación. Los operadores lanzan trabajos de capacitación desde instancias de cuadernos de IA de Amazon SageMaker. Los datos de entrenamiento y los artefactos del modelo se almacenan en Amazon Simple Storage Service (Amazon S3). Las métricas de capacitación se rastrean con TensorBoard en Amazon SageMaker AI y las métricas del sistema se capturan a través de Amazon CloudWatch.
Desarrollando un tokenizador azerbaiyano
Idiomas como el azerbaiyano son ricos morfológicamente, con palabras individuales que codifican el significado gramatical mediante sufijos que el inglés expresaría usando varias palabras. Sin embargo, los tokenizadores estándar optimizados en inglés fragmentan estas formas complejas de palabras. Por ejemplo, dividir "kitablardan" (que significa de los libros) en múltiples tokens de subpalabras como se ilustra en la Figura 2, lo que reduce el contenido real que cabe dentro de una ventana de contexto de tamaño fijo.
Figura 2. Comparación de la tokenización básica y personalizada para el texto en azerbaiyano, que muestra una fragmentación de tokens reducida.
Para solucionar este problema, entrenamos un tokenizador personalizado en texto en azerbaiyano utilizando un algoritmo de codificación de pares de bytes a nivel de bytes (BBPE), que fusiona de forma iterativa los pares de bytes más frecuentes en entradas de vocabulario. A partir de bytes sin formato en lugar de conjuntos de caracteres predefinidos, se proporciona una cobertura completa de los caracteres específicos de Azerbaiyán sin necesidad de definiciones alfabéticas manuales. Experimentamos con tamaños de vocabulario que oscilaban entre 50.000 y 100.000 tokens para encontrar el equilibrio adecuado: demasiado pequeño y el tokenizador fragmenta demasiado las palabras, demasiado grande y los tokens raros carecen de suficiente señal de entrenamiento.
Entrenamos tokenizadores personalizados utilizando la biblioteca de tokenizadores Hugging Face con la misma configuración que el tokenizador nativo Llama 3.2, variando solo el tamaño del vocabulario. Después de entrenar y evaluar múltiples tokenizadores con diferentes tamaños de vocabulario, seleccionamos un vocabulario final de 100.000 tokens. Para verificar que el tokenizador personalizado no sacrificara la calidad del modelado, comparamos los modelos después de un entrenamiento previo continuo utilizando Bits por byte (BPB) en lugar de perplejidad, porque BPB normaliza las diferencias de vocabulario midiendo la calidad de la predicción a nivel de bytes. El modelo que utiliza el tokenizador personalizado logró un BPB de 0,5795 en el conjunto de validación, en comparación con el 0,6830 de la línea base, lo que confirma que la eficiencia de codificación mejorada se produjo sin una compensación por la calidad.
Más allá de preservar la calidad del modelado, el tokenizador personalizado ofrece importantes ganancias prácticas de eficiencia. La eficiencia de la codificación se puede cuantificar a través de la puntuación de fertilidad: el número promedio de tokens por palabra, donde los valores más bajos indican una codificación más eficiente. El tokenizador básico Llama 3.2 promedió 3,22 tokens por palabra en azerbaiyano, mientras que el tokenizador monolingüe personalizado logró 1,59, una mejora del doble en la eficiencia de codificación. Con la ventana de contexto de 128.000 tokens de Llama 3.2, esto se traduce en diferencias de capacidad reales: aproximadamente 40.000 palabras con el tokenizador básico versus 80.000 con el optimizado, duplicando efectivamente el contenido que el modelo considera a la vez.
Entrenamiento previo continuo
La formación previa continua adapta el FM (Llama 3.2 1B) para comprender el azerbaiyano. El principal cuello de botella de esta etapa es la memoria de la GPU: la optimización de la utilización de la memoria determina directamente qué parte de la inversión en hardware se traduce en rendimiento del entrenamiento. Realizamos evaluaciones comparativas en instancias ml.p4d.24xlarge (8 × GPU NVIDIA A100) y ml.p5.48xlarge (8 × GPU NVIDIA H100). Las siguientes secciones describen los dos enfoques de optimización evaluados: entrenamiento distribuido con Fully Sharded Data Parallel (FSDP) de PyTorch y la integración de Liger Kernel.
Capacitación distribuida con datos paralelos totalmente fragmentados (FSDP)
La huella de memoria de un modelo incluye no solo pesos, sino también gradientes, estados del optimizador y activaciones. Estos componentes pueden superar los 100 GB para modelos más grandes como Llama 3.1 8B en precisión mixta. Desarrollamos y validamos la configuración de capacitación distribuida en el modelo 1B para que escalar a arquitecturas más grandes solo requiera un cambio de configuración, no una reestructuración de la canalización. Standard Distributed Data Parallel (DDP) replica el modelo completo en cada GPU, lo que limita el tamaño del lote y la escala del modelo que puede lograr. FSDP fragmenta parámetros, gradientes y estados del optimizador en las GPU, reuniendo dinámicamente solo lo que se necesita durante cada paso de cálculo. Esto redujo la memoria de estado del modelo por GPU de 9,23 GB a 1,17 GB en ml.p4d.24xlarge, liberando espacio para lotes de mayor tamaño.
Integración del kernel de Liger
Los Liger Kernels son implementaciones basadas en Triton y eficientes en memoria de operaciones LLM comunes que fusionan múltiples operaciones en lanzamientos de un solo kernel de GPU, lo que reduce las asignaciones de memoria intermedia y produce resultados numéricamente equivalentes. Admiten varias arquitecturas de modelos populares, incluida Llama. Le recomendamos que verifique la compatibilidad con su arquitectura antes de la adopción.
La integración requiere cambios mínimos de código: una única llamada a función parchea el modelo con núcleos optimizados antes de la creación de instancias, y Liger Kernels funciona con PyTorch FSDP sin modificaciones en la configuración de entrenamiento distribuido. Validamos la ejecución correcta con PyTorch Profiler, confirmando operaciones fusionadas en el seguimiento. La siguiente tabla resume el impacto acumulativo de cada paso de optimización en ambos tipos de instancias. Tenga en cuenta que la memoria DDP y el rendimiento en las instancias p5 no se compararon porque FSDP era la configuración de destino.
Métrico DDP FSDP FSDP + Liger Tamaño máximo de lote por GPU en ml.p4d.24xlarge (8× GPU NVIDIA A100) 2 4 14 Tamaño máximo de lote por GPU en ml.p5.48xlarge (8× GPU NVIDIA H100) 4 10 18 Memoria máxima de GPU incl. activaciones (GB) en ml.p5.48xlarge: 64 27 Rendimiento de entrenamiento por GPU (tokens/s) en ml.p5.48xlarge: 63 771 78 319
En ml.p4d.24xlarge, la pila de optimización completa generó un aumento de 7 veces en el tamaño máximo de lote con respecto a DDP. En ml.p5.48xlarge, la memoria máxima de GPU cayó un 58 % y el rendimiento por GPU aumentó un 23 % al agregar Liger Kernels a FSDP.
Configuración previa al entrenamiento
Cada configuración del tokenizador de la Etapa 1 se llevó a cabo a través de CPT de un extremo a otro para comparar el comportamiento de convergencia y la calidad descendente. Con el tokenizador azerbaiyano personalizado (100.000 vocabulario), el corpus de entrenamiento asciende a aproximadamente 2.500 millones de tokens.
El script de entrenamiento personalizado admite ventanas de contexto configurables, precisión mixta BFloat16, programación de tasa de aprendizaje de coseno con AdamW y puntos de control automáticos a Amazon S3 para tolerancia a fallas. Establecimos la ventana de contexto en 2048 tokens porque más del 90% de las muestras de entrenamiento cayeron por debajo de esta longitud después de la tokenización, aunque la configuración admite hasta el límite nativo de 128k tokens del modelo.
Cuando se agregan nuevos tokens al vocabulario, CPT sigue un enfoque de dos fases. En la primera fase, la columna vertebral del modelo se congela y solo se entrena la capa de incrustación. Esto adapta las nuevas representaciones de tokens al espacio interno existente del modelo sin alterar el conocimiento previamente entrenado. En la segunda fase, los parámetros se descongelan para un entrenamiento completo, lo que permite que el modelo aprenda en profundidad los patrones del idioma azerbaiyano. La siguiente tabla muestra la configuración de entrenamiento usando el tokenizador personalizado de Azerbaiyán (vocabulario de 100k). La capacitación utilizó dos instancias ml.p4d.24xlarge (16 GPU NVIDIA A100 en total) con optimizaciones de FSDP y Liger Kernel.
Parámetro Fase 1: Incrustación Fase de adaptación 2: Entrenamiento completo Red troncal congelada Sí No Tasa de aprendizaje 0,0032 0,0024 Tamaño de lote por GPU 14 14 Pasos 5000 15 000 Tiempo de entrenamiento ~11 400 segundos (~3,2 horas) ~43 000 segundos (~11,9 horas)
Una tasa de aprendizaje más baja en la fase de formación completa preserva el conocimiento adquirido durante la adaptación integrada. Con un tamaño de lote efectivo de 224 (14 por GPU × 16 GPU) y una ventana de contexto de 2048 tokens, cada paso de entrenamiento procesa aproximadamente 450 000 tokens, lo que arroja un tiempo estimado por época de aproximadamente 4,3 horas en esta configuración. En ml.p5.48xlarge, un mayor rendimiento por GPU y tamaños de lote más grandes reducirían aún más el tiempo por época.
Ajuste supervisado con LoRA
Después de CPT, el modelo puede predecir con fluidez el próximo token azerbaiyano, pero no tiene ningún concepto de estructura conversacional. Dada una pregunta, genera continuaciones plausibles en lugar de respuestas útiles. LoRA cierra esta brecha de manera eficiente al congelar los pesos previamente entrenados y entrenar pequeñas matrices de descomposición de bajo rango inyectadas en las capas de atención y retroalimentación del modelo. En lugar de actualizar una matriz de peso completo, LoRA entrena dos matrices más pequeñas cuyo producto se aproxima a la actualización completa, lo que reduce los parámetros entrenables a una pequeña fracción del total. La siguiente tabla resume la configuración de ajuste fino de LoRA.
Parámetro Rango Alfa Abandono Módulos objetivo Longitud máxima de secuencia Valor 64 28 0,05 proyecciones q, k, v, o; puerta, proyecciones arriba, abajo 1,024
Este tamaño compacto significó que el ajuste se ejecutara en una sola instancia ml.g5.8xlarge (1 × GPU NVIDIA A10G), y se completara en minutos. El ajuste utilizó aproximadamente 2000 pares de preguntas y respuestas azerbaiyanos de un solo turno usando SFTTrainer de Hugging Face con una tasa de aprendizaje de 1e-4, más alta que las tasas de aprendizaje de CPT porque los adaptadores LoRA se inicializan aleatoriamente y se benefician de actualizaciones de gradiente más fuertes.
El entrenamiento utilizó una plantilla de chat estilo Llama con enmascaramiento de pérdida solo para asistente: el modelo es penalizado solo por predecir los tokens de respuesta del asistente y el token de fin de turno (<|eot_id|>), mientras que las indicaciones del usuario y los delimitadores de plantilla están excluidos de la pérdida. Como resultado, el modelo centra su capacidad de aprendizaje en generar respuestas apropiadas en lugar de memorizar patrones de entrada del usuario.
Resultados y validación
El entrenamiento previo continuo utilizó aproximadamente 2.500 millones de tokens con el tokenizador azerbaiyano personalizado, y el ajuste fino utilizó 2000 pares de preguntas y respuestas. El marco proporcionó mejoras mensurables en cuatro dimensiones:
2 veces la eficiencia de codificación a través de tokenización personalizada El tokenizador monolingüe personalizado redujo a la mitad la puntuación de fertilidad (de 3,22 a 1,59 tokens por palabra), duplicando efectivamente el contenido en azerbaiyano que cabe dentro de la ventana de contexto de 128k tokens del modelo. Una puntuación BPB de 0,5795 frente a 0,6830 de la línea base confirmó que esta ganancia no sacrificaba la calidad del modelado. Importante optimización de la memoria y el rendimiento La fragmentación de datos paralelos completamente fragmentados (FSDP) y la integración de Liger Kernel permitieron tamaños de lote más grandes en el mismo hardware, hasta 7 veces en ml.p4d.24xlarge y 4,5 veces en ml.p5.48xlarge sobre sus respectivas líneas base de DDP, al tiempo que redujeron el pico de memoria de la GPU en un 58 % y aumentaron el rendimiento por GPU en un 23 %. Infraestructura escalable y lista para producción Las configuraciones validadas en las instancias ml.p4d.24xlarge y ml.p5.48xlarge brindan a Azercell una base flexible que escala a medida que crecen los requisitos de capacitación, con la configuración distribuida diseñada para que pasar a modelos más grandes solo requiera un cambio de configuración. Generación coherente del idioma azerbaiyano El Llama 3.2 1B disponible en el mercado genera resultados repetitivos e incoherentes cuando se le solicita en azerbaiyano, un modo de falla común en los idiomas subrepresentados. El modelo perfeccionado produce respuestas concisas y semánticamente coherentes que demuestran una clara comprensión del idioma azerbaiyano. Esto se ilustra en la siguiente tabla para un ejemplo de mensaje proporcionado por Azercell. Mensaje de salida en azerbaiyano Traducción al inglés Mensaje de entrada Yeni bir dil öyrənmək yalnız ünsiyyət imkanlarını genişləndirmir… Aprender un nuevo idioma no solo amplía las oportunidades de comunicación… Llama 3.2 1B
Yeni bir dil öyrənmək yalnız ünsiyyət imkanlarını genişləndirmir. Bu, əksinə, dili öyrənən insanlara yeni bir dil öyrənmək üçün fərqli məqsədlərlə yanaşı, onların özü də yeni bir dil öyrənməyə başlayır.
Dil öyrənməsi, həmçinin, yeni bir dil öyrənməyə olan istiqamətlərin və təcrübələrinin genişləndirilməsinə səbəb olur. Yeni bir dil öyrənməyə olan istiqamətləri və təcrübələrinin genişləndirilməsindən sonra, yeni bir dil öyrənməyə olan istiqamətlərin və təcrübələrinin genişləndirilməsi…
Aprender un nuevo idioma no sólo amplía las oportunidades de comunicación. Por el contrario, también lleva a las personas que aprenden un idioma a abordar el aprendizaje de idiomas con objetivos diferentes, y ellos mismos inician el proceso de aprendizaje de un nuevo idioma. El aprendizaje de idiomas también contribuye a la expansión de direcciones y experiencias relacionadas con el aprendizaje de un nuevo idioma. Después de ampliar estas direcciones y experiencias, continúa el desarrollo de enfoques y experiencias en el aprendizaje de un nuevo idioma… Llama afinada 3.2 1B Yeni bir dil öyrənmək yalnız ünsiyyət imkanlarını genişləndirmir, həm də yeni dostlar və əlaqələr yaradır. Aprender un nuevo idioma no sólo amplía las oportunidades de comunicación sino que también crea nuevas amistades y conexiones.
Conclusión
En esta publicación, mostramos cómo Azercell y el Centro de innovación de IA generativa de AWS crearon un marco para entrenar modelos de lenguaje azerbaiyano en Amazon SageMaker AI. El proceso de tres etapas (tokenización personalizada, capacitación previa continua con optimizaciones de FSDP y Liger Kernel, y ajuste fino de LoRA) transforma un modelo básico de propósito general en un asistente conversacional azerbaiyano al tiempo que maximiza la utilización de la GPU. Azercell ahora opera el marco de manera independiente, con una metodología que admite corpus más grandes, arquitecturas escaladas y casos de uso ampliados. Para obtener más información, explore los siguientes recursos:
Para explorar la implementación de una solución similar, comuníquese con el equipo de su cuenta de AWS o visite el Centro de innovación de IA generativa de AWS. Si está capacitando LLM para idiomas de bajos recursos u optimizando la utilización de GPU en SageMaker AI, nos encantaría saber de usted. Comparta sus pensamientos y preguntas en los comentarios.