
Table des matières
Accelerate Huggingface
Accelerate est une bibliothèque d'HuggingFace permettant de faciliter l'usage des accélérateurs (GPU ici dans le cas de Jean Zay).
Mono-noeud
Vous pouvez normalement déjà utiliser Accelerate en mono-noeud aisément avec la documentation classique d’HuggingFace.
Multi-noeud
Dans le cas d'une utilisation en multi-noeud, il est nécessaire de générer un ou plusieurs fichiers de configuration yaml et de les transmettre au code Accelerate avec le paramètre --config_file
(ou --config
pour les anciennes versions). De plus, il faut une exécution par nœud avec pour chaque exécution le bon fichier de configuration.
Il est possible d'utiliser facilement Accelerate en multi-noeud sur Jean Zay grâce au lanceur idr_accelerate. Cet outil implémenté par l'IDRIS disponible sur la majorité des modules Jean Zay.
Ce lanceur gère pour vous les contraintes mentionnées précédemment en créant et exécutant les codes Accelerate pour vous.
Il vient remplacer le lanceur Accelerate de la manière suivante : accelerate launch train.py
devient idr_accelerate train.py
.
Pour utiliser idr_accelerate en multi-noeuds, il faut simplement configurer 1 tâche par nœud et utiliser srun pour lancer une exécution par nœud. Voici un exemple simple:
#!/bin/bash #SBATCH --job-name=accelerate_multi-node #SBATCH --gres=gpu:4 #SBATCH --ntasks-per-node=1 #SBATCH --nodes=2 #SBATCH --cpus-per-task=40 #SBATCH --hint=nomultithread #SBATCH --time=02:00:00 #SBATCH --qos=qos_gpu-dev #SBATCH --account=account@v100 ## load module module purge module load llm srun idr_accelerate train.py --lr 0.5 --epochs 10
Un exemple complet d’utilisation d’Accelerate pour faire de la DDP est disponible sur notre git d’exemples de LLM.
Deepspeed via Accelerate
Accelerate permet une utilisation “simplifiée” de DeepSpeed. Cela permet notamment de profiter de certaine optimisation comme ZeRO. La documentation deepspeed accelerate permet de comprendre le fonctionnement de base et fourni quelques exemples.
Vous pouvez utiliser DeepSpeed de 3 manières différentes avec idr_accelerate :
# On donne uniquement des flags d'utilisation (simple mais peu d'option possible) srun idr_accelerate --use_deepspeed --zero_stage 2 --mixed_precision fp16 train.py --lr 0.5 # On donne un fichier de configuration accelerate contenant les paramètres DeepSpeed à utiliser srun idr_accelerate --config_file configs/accelerate_deepspeed.yaml train.py --lr 0.5 # On donne un fichier de configuration accelerate qui pointe vers un fichier de configuration DeepSpeed # (méthode la plus complexe mais aussi avec le plus d'option) srun idr_accelerate --config_file=configs/accelerate_deepspeed-config.yaml train.py --lr 0.5