Utiliser les GPU de vesta
1 Les GPU de vesta : AMD Instinct MI210
Les nœuds de calcul de vesta sont équipés de cartes AMD Instinct MI210 (2022, architecture CDNA 2). Ce sont des cartes conçues uniquement pour le calcul : elles n’ont pas de sortie vidéo.
Pour comparaison, la NVIDIA T4 est le GPU proposé gratuitement sur Google Colab.
| Caractéristique | AMD Instinct MI210 (vesta) | NVIDIA T4 (Colab) |
|---|---|---|
| Année, architecture | 2022, CDNA 2 | 2018, Turing |
| Mémoire | 64 Go HBM2e | 16 Go GDDR6 |
| Bande passante mémoire | 1,6 To/s | 320 Go/s |
| Unités de calcul | 104 (6 656 cœurs) | 2 560 cœurs CUDA, 320 Tensor Cores |
| FP64 | 23 TFLOPS (45 en calcul matriciel) | 0,25 TFLOPS |
| FP32 | 23 TFLOPS (45 en calcul matriciel) | 8,1 TFLOPS |
| FP16 (calcul matriciel) | 181 TFLOPS | 65 TFLOPS |
| BF16 (calcul matriciel) | 181 TFLOPS | non supporté |
| Consommation | 300 W | 70 W |
Les TFLOPS sont des valeurs maximales théoriques : en pratique, l’écart dépend du modèle, et un petit modèle peut être limité par autre chose que le GPU (chargement des données, Python…).
Deux conséquences pour l’apprentissage profond :
- 64 Go de mémoire permettent d’entraîner des modèles et des batchs bien plus gros que sur un ordinateur portable, dont le GPU a en général quelques Go de mémoire.
- Les calculs en 16 bits (FP16, BF16) sont environ 4 fois plus rapides qu’en 32 bits. C’est l’intérêt de l’entraînement en précision mixte (
torch.autocast).
Les GPU AMD utilisent la plateforme ROCm, et non CUDA comme les GPU NVIDIA. Mais PyTorch garde les mêmes noms : on écrit torch.device("cuda") et torch.cuda.is_available() comme avec une carte NVIDIA. Le code des TD fonctionne sans modification.
2 Connexion ssh
- Télécharger le fichier config sur Moodle.
- Le déplacer dans le dossier
~/.ssh. - Remplacer
unistrausernamepar votre nom d’utilisateur. - Tester la connexion dans un terminal :
ssh vesta3 Installer uv (une seule fois)
uv est un gestionnaire de paquets pour Python. Sur vesta, avant de charger un module :
python3 -m pip install --user uvCette commande ne fonctionne pas après module load py-torch/2.12.0. Si un module est déjà chargé, se déconnecter puis se reconnecter avant de la lancer.
Vérifier que la commande uv est trouvée :
uv --versionuv n’est pas trouvé
Ajouter le dossier ~/.local/bin au PATH, puis se déconnecter et se reconnecter :
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc4 Créer le projet M2 (une seule fois)
PyTorch est fourni par le module py-torch, compilé pour les GPU AMD de vesta. On crée un environnement Python pour le projet, qui utilise ce PyTorch, et dans lequel on installe les autres paquets avec uv.
module load py-torch/2.12.0
export UV_PYTHON_DOWNLOADS=never
SITE_MODULE=$(python -c "import site; print(site.getsitepackages()[0])")
uv init M2
cd M2
uv python pin 3.14
uv venv --python "$(which python)"
echo "$SITE_MODULE" > .venv/lib/python3.14/site-packages/module_torch.pth
uv add transformers datasetsUV_PYTHON_DOWNLOADS=neverempêche uv de télécharger son propre Python : il faut utiliser celui du module, pour lequel PyTorch a été compilé.- Le module
py-torchest lui-même un environnement Python. Le fichiermodule_torch.pthajoute ses paquets (dont PyTorch) à l’environnement du projet. Les paquets installés avecuv addrestent prioritaires.
Vérifier que PyTorch est bien celui du module :
source .venv/bin/activate
python -c "import torch; print(torch.__file__, torch.version.hip)"Le chemin affiché doit commencer par /nfs/vesta/sw/py-torch/.
Sur le nœud de connexion, un avertissement sysfs nodes path '/sys/class/kfd/kfd/topology/nodes' does not exist peut s’afficher. C’est normal : il n’y a pas de GPU sur ce nœud. Les calculs sur GPU se font dans un job (Section 8).
5 Ajouter un paquet plus tard
module load py-torch/2.12.0
export UV_PYTHON_DOWNLOADS=never
cd ~/M2
uv add nom_du_paquetNe jamais faire uv add torch. Si un paquet installe sa propre version de PyTorch, celle-ci remplace la version du module et le GPU n’est plus utilisé. Après chaque uv add, refaire la vérification de la partie précédente.
6 Connexion via Visual Studio Code
- Ouvrir VS Code.
- Cliquer sur l’icône
><en bas à gauche, puisConnect to Host, puisvesta. - Ouvrir le répertoire
M2. - Télécharger le fichier
example.batchsur Moodle, et le glisser-déposer dans la liste de fichiers de VS Code pour le déposer sur le serveur. - Faire de même pour les fichiers
test.pyettelecharger.py.
7 Télécharger les données (une seule fois)
Les jobs n’ont pas accès à internet. Il faut donc télécharger les données avant, depuis le nœud de connexion (sans sbatch) :
module load py-torch/2.12.0
cd ~/M2
source .venv/bin/activate
python telecharger.pyLes données sont enregistrées dans le cache de Hugging Face (~/.cache/huggingface), où les jobs les retrouvent. Pour utiliser d’autres données dans un TD ou un projet, les ajouter dans telecharger.py et le relancer.
8 Lancer un job sur GPU
Le fichier example.batch doit contenir, après les lignes #SBATCH :
module load py-torch/2.12.0
export HF_HUB_OFFLINE=1
cd ~/M2
source .venv/bin/activate
python -u test.pyHF_HUB_OFFLINE=1indique à Hugging Face de lire uniquement le cache, sans essayer de se connecter à internet.- L’option
-uforce Python à écrire les messages immédiatement dans le fichier log. Sans elle, ils n’apparaissent qu’à la fin du job.
Lancer le job, puis suivre son état :
sbatch example.batch
squeue -u $USERLe script test.py charge le dataset TinyStories, puis entraîne un petit réseau sur des données aléatoires. Pendant et après le job, dans le répertoire M2 :
slurm-<numéro du job>.outcontient tous les messages du script : le GPU utilisé, le chargement du dataset, puis une ligne par epoch ;resultats_<numéro du job>.csvcontient une ligne par epoch (loss d’entraînement, précision sur le test, durée), écrite au fur et à mesure.
La précision sur le test doit augmenter au fil des epochs, bien au-delà de 50 %.