Aller au contenu

Nanotron - Entraînement LLM parallèle 3D minimaliste

Nanotron - Entraînement LLM parallèle 3D minimaliste

Nanotron (par Hugging Face) est un cadre minimaliste pour le préentraînement de grands modèles de langage avec parallélisme 3D — données, tenseurs et pipeline parallèles — implémentés en Python délibérément lisible. Son objectif est d’être suffisamment petit et modifiable pour réellement comprendre, tout en distribuant l’entraînement sur de nombreux GPUs. C’est un excellent choix quand vous voulez apprendre ou personnaliser la mécanique de l’entraînement distribué sans la complexité des plus grands cadres.

L’entraînement est gourmand en calcul ; commencez petit. Validez une config sur un petit modèle et quelques GPUs avant de mettre à l’échelle.

Installation

MéthodeCommande
Depuis la sourcegit clone https://github.com/huggingface/nanotron && cd nanotron && pip install -e .
Flash attentionpip install flash-attn (recommandé)
ExigencesPyTorch + GPUs CUDA
Vérifierexécuter un exemple de config sur 1–2 GPUs

Parallélisme 3D

DimensionDiviseClé de config
Parallélisme des données (DP)Le lot sur les répliquesdp
Parallélisme des tenseurs (TP)Les couches sur les GPUstp
Parallélisme des pipelines (PP)Le modèle en étapespp

Le produit dp × tp × pp doit égaler votre nombre total de GPUs.

Configuration (YAML)

L’entraînement Nanotron est défini par un fichier de config YAML décrivant le modèle, les données, le parallélisme et l’optimiseur.

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

Lancement de l’entraînement

# Single node, multiple GPUs
torchrun --nproc_per_node=8 run_train.py --config-file config.yaml

# Generate a starter config
python examples/config_tiny_llama.py
CléSens
run_train.pyPoint d’entrée d’entraînement principal
--config-fileLe fichier de config YAML d’entraînement
pp_engineCalendrier du pipeline (par ex. 1F1B, AFAB)
micro_batch_sizeLot micro par étape
batch_accumulation_per_replicaAccumulation de gradient

Données

OptionNote
Datasets prétokenisésPointez la config vers les données tokenisées
Datasets HFFlux/charges via Hugging Face
NanosetFormat d’ensemble de données efficace de Nanotron
TokenizerDéfini via la config tokenizer

Points de contrôle et reprise

AspectComment
Fréquence d’enregistrementcheckpoints.checkpoint_interval
Chemin d’enregistrementcheckpoints.checkpoints_path
Reprendre--config-file + pointez vers un checkpoint sauvegardé
SharderLes checkpoints connaissent le parallélisme

Surveillance

MétriqueSens
loss / lm_lossPerte d’entraînement
tokens/sDébit
grad normMagnitude du gradient (stabilité)
LoggingIntégration W&B / TensorBoard

Nanotron vs autres cadres d’entraînement

AspectNanotronTorchTitanMegatron-LM
PhilosophieMinimal, modifiableRéférence native PyTorchRiche en fonctionnalités, à grande échelle max
Parallélisme3D (dp/tp/pp)4D (ajoute contexte)3D+ extensive
LisibilitéÉlevée (apprendre à partir de cela)ÉlevéeInférieure (grande base de code)
Meilleur pourComprendre/personnaliser 3DMise à l’échelle native PyTorchFormation à grande échelle frontière

Ressources