Nanotron - Entrenamiento de LLM paralelismo 3D minimalista
Nanotron (de Hugging Face) es un marco minimalista para entrenar previamente modelos de lenguaje grandes con paralelismo 3D — paralelo de datos, tensor y pipeline — implementado en Python deliberadamente legible. Su objetivo es ser lo suficientemente pequeño y hackable para entender realmente, mientras sigue distribuyendo el entrenamiento entre muchas GPUs. Es una opción fuerte cuando deseas aprender o personalizar la mecánica del preentrenamiento distribuido sin la complejidad de los marcos más grandes.
El preentrenamiento requiere muchos cálculos; comienza pequeño. Valida una configuración en un modelo diminuto y un par de GPUs antes de escalar.
Instalación
| Método | Comando |
|---|
| Desde fuente | git clone https://github.com/huggingface/nanotron && cd nanotron && pip install -e . |
| Atención flash | pip install flash-attn (recomendado) |
| Requerimientos | PyTorch + GPUs CUDA |
| Verificar | ejecuta una configuración de ejemplo en 1–2 GPUs |
Paralelismo 3D
| Dimensión | Divide | Clave de configuración |
|---|
| Paralelo de datos (DP) | El lote entre réplicas | dp |
| Paralelo de tensor (TP) | Capas entre GPUs | tp |
| Paralelo de pipeline (PP) | El modelo en etapas | pp |
El producto dp × tp × pp debe ser igual a tu conteo total de GPUs.
Configuración (YAML)
El entrenamiento de Nanotron se define mediante una configuración YAML que describe el modelo, datos, paralelismo y optimizador.
parallelism:
dp: 2
tp: 2
pp: 2
pp_engine: 1f1b # pipeline schedule
model:
model_config:
hidden_size: 2048
num_hidden_layers: 24
num_attention_heads: 16
optimizer:
learning_rate_scheduler:
learning_rate: 3.0e-4
optimizer_factory:
adam_beta1: 0.9
adam_beta2: 0.95
tokens:
sequence_length: 2048
micro_batch_size: 4
batch_accumulation_per_replica: 8
Lanzamiento del entrenamiento
# Nodo único, múltiples GPUs
torchrun --nproc_per_node=8 run_train.py --config-file config.yaml
# Genera una configuración de inicio
python examples/config_tiny_llama.py
| Clave | Significado |
|---|
run_train.py | Punto de entrada principal de entrenamiento |
--config-file | La configuración YAML de entrenamiento |
pp_engine | Programa de pipeline (por ejemplo 1F1B, AFAB) |
micro_batch_size | Lote micro por paso |
batch_accumulation_per_replica | Acumulación de gradiente |
Datos
| Opción | Nota |
|---|
| Conjuntos de datos pretokenizados | Apunta la configuración a datos tokenizados |
| Conjuntos de datos de HF | Stream/carga a través de Hugging Face |
| Nanoset | Formato de conjunto de datos eficiente de Nanotron |
| Tokenizador | Establece a través de la configuración del tokenizador |
Puntos de control y reanudar
| Aspecto | Cómo |
|---|
| Guardar frecuencia | checkpoints.checkpoint_interval |
| Ruta de guardado | checkpoints.checkpoints_path |
| Reanudar | --config-file + apunta a un punto de control guardado |
| Particionado | Los puntos de control son conscientes del paralelismo |
Monitoreo
| Métrica | Significado |
|---|
| pérdida / lm_loss | Pérdida de entrenamiento |
| tokens/s | Rendimiento |
| grad norm | Magnitud del gradiente (estabilidad) |
| Logging | Integración W&B / TensorBoard |
Nanotron vs otros marcos de entrenamiento
| Aspecto | Nanotron | TorchTitan | Megatron-LM |
|---|
| Filosofía | Minimalista, hackable | Referencia nativa de PyTorch | Completo, escala máxima |
| Paralelismo | 3D (dp/tp/pp) | 4D (agrega contexto) | 3D+ extenso |
| Legibilidad | Alta (aprender de ella) | Alta | Inferior (base de código grande) |
| Mejor para | Comprensión/personalización de 3D | Escalado nativo de PyTorch | Entrenamiento a escala de frontera |
Recursos