Using GPUs with Slurm/fr: Difference between revisions
(Updating to match new version of source page) |
No edit summary |
||
Line 6: | Line 6: | ||
Le tableau suivant décrit les nœuds avec GPU qui sont présentement disponibles. | Le tableau suivant décrit les nœuds avec GPU qui sont présentement disponibles. | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! rowspan=2|Grappe!! rowspan=2|Qté de nœuds!! rowspan=2|Type de GPU!! colspan=3|Par nœud!! rowspan=2|Modèle de GPU !! rowspan=2|Mémoire GPU!! rowspan=2| | ! rowspan=2|Grappe!! rowspan=2|Qté de nœuds!! rowspan=2|Type de GPU!! rowspan=2|Par défaut!!colspan=3|Par nœud!! rowspan=2|Modèle de GPU !! rowspan=2|Mémoire GPU (GiB)!! rowspan=2|Remarques | ||
|- | |- | ||
! Cœurs CPU!! Mémoire CPU !! GPU | ! Cœurs CPU!! Mémoire CPU !! GPU | ||
|- | |- | ||
| Béluga || 172 || | | Béluga || 172 || v100||oui || 40 || 191000M || 4 || V100-SXM2 || 16 || tous les GPU sont associés au même socket CPU et connectés via NVLink | ||
|- | |- | ||
| rowspan=3|Cedar || 114 || p100 || 24 || 128000M || 4 || P100-PCIE || | | rowspan=3|Cedar || 114 || p100 || oui ||24 || 128000M || 4 || P100-PCIE || 12 || deux GPU par socket CPU | ||
|- | |- | ||
| 32 || | | 32 || p100 || || 24 || 257000M || 4 || P100-PCIE || 16 || tous les GPU sont associés au même socket CPU | ||
|- | |- | ||
| 192 || v100l || 32 || 192000M || 4 || V100-SXM2 || | | 192 || v100l || ||32 || 192000M || 4 || V100-SXM2 || 32 || deux GPU par socket CPU; tous les GPU sont connectés via NVLink | ||
|- | |- | ||
| rowspan=5|Graham || 160 || p100 || 32 || 127518M || 2 || P100-PCIE || | | rowspan=5|Graham || 160 || p100 || oui ||32 || 127518M || 2 || P100-PCIE || 12 || un GPU par socket CPU | ||
|- | |- | ||
| 7 || v100 || 28 || 183105M || 8 || V100-PCIE || | | 7 || v100 || ||28 || 183105M || 8 || V100-PCIE || 16 || voir [[Graham/fr#Nœuds_GPU_Volta|Nœuds GPU Volta]] | ||
|- | |- | ||
| 2 || v100l || 28 || 183105M || 8 || V100-PCIE?|| | | 2 || v100l || || 28 || 183105M || 8 || V100-PCIE?|| 32 || || voir [[Graham/fr#Nœuds_GPU_Volta|Nœuds GPU Volta]]- | ||
|- | |- | ||
| 30 || t4 || 44 || 192000M || 4 || Tesla T4 || | | 30 || t4 || ||44 || 192000M || 4 || Tesla T4 || 16 || deux GPU par socket CPU | ||
|- | |- | ||
| 6 || t4 || 16 || 192000M || 4 || Tesla T4 || | | 6 || t4 || ||16 || 192000M || 4 || Tesla T4 || 16 ||   | ||
|- | |- | ||
| rowspan=2|Hélios || 15 || k20 || 20 || 110000M || 8 || K20 || | | rowspan=2|Hélios || 15 || k20 || oui ||20 || 110000M || 8 || K20 || 5 || quatre GPU par socket CPU | ||
|- | |- | ||
| 6 || k80 || 24 || 257000M || 16 || K80 || | | 6 || k80 || ||24 || 257000M || 16 || K80 || 12 || huit GPU par socket CPU | ||
|- | |- | ||
| Mist || 54 || | | Mist || 54 || aucun || 32 || 256GiB || 4 || V100-SXM2 || 32 || voir [https://docs.scinet.utoronto.ca/index.php/Mist#Specifications Mist specifications] | ||
|- | |||
| Arbutus || 9 || aucun || || 80 || 384GiB || 4 || V100 || 32 || infonuagique <b>ne peuvent être utilisés via Slurm</b> | |||
|} | |} | ||
== Comment indiquer le type de GPU à utiliser == | == Comment indiquer le type de GPU à utiliser == |
Revision as of 20:21, 3 June 2021
Pour l'information générale sur l'ordonnancement des tâches, consultez Exécuter des tâches.
Nœuds disponibles
Le tableau suivant décrit les nœuds avec GPU qui sont présentement disponibles.
Grappe | Qté de nœuds | Type de GPU | Par défaut | Par nœud | Modèle de GPU | Mémoire GPU (GiB) | Remarques | ||
---|---|---|---|---|---|---|---|---|---|
Cœurs CPU | Mémoire CPU | GPU | |||||||
Béluga | 172 | v100 | oui | 40 | 191000M | 4 | V100-SXM2 | 16 | tous les GPU sont associés au même socket CPU et connectés via NVLink |
Cedar | 114 | p100 | oui | 24 | 128000M | 4 | P100-PCIE | 12 | deux GPU par socket CPU |
32 | p100 | 24 | 257000M | 4 | P100-PCIE | 16 | tous les GPU sont associés au même socket CPU | ||
192 | v100l | 32 | 192000M | 4 | V100-SXM2 | 32 | deux GPU par socket CPU; tous les GPU sont connectés via NVLink | ||
Graham | 160 | p100 | oui | 32 | 127518M | 2 | P100-PCIE | 12 | un GPU par socket CPU |
7 | v100 | 28 | 183105M | 8 | V100-PCIE | 16 | voir Nœuds GPU Volta | ||
2 | v100l | 28 | 183105M | 8 | V100-PCIE? | 32 | voir Nœuds GPU Volta- | ||
30 | t4 | 44 | 192000M | 4 | Tesla T4 | 16 | deux GPU par socket CPU | ||
6 | t4 | 16 | 192000M | 4 | Tesla T4 | 16 |   | ||
Hélios | 15 | k20 | oui | 20 | 110000M | 8 | K20 | 5 | quatre GPU par socket CPU |
6 | k80 | 24 | 257000M | 16 | K80 | 12 | huit GPU par socket CPU | ||
Mist | 54 | aucun | 32 | 256GiB | 4 | V100-SXM2 | 32 | voir Mist specifications | |
Arbutus | 9 | aucun | 80 | 384GiB | 4 | V100 | 32 | infonuagique ne peuvent être utilisés via Slurm |
Comment indiquer le type de GPU à utiliser
Certaines grappes possèdent plus d'un type de GPU; c'est le cas de Cedar, Graham et Hélios.
Sur Béluga, Cedar et Graham les GPU sont uniquement disponibles sur certains nœuds.
Pour indiquer le type de GPU à utiliser, spécifiez-le dans le script de la tâche.
#SBATCH --gres=gpu:p100:1
If you do not specify a type, Slurm will send your GPU job to a type designated "default" in the table above.
Mist
Mist est une grappe qui comprend des CPU IBM Power9 (et non des Intel x86) et des GPU NVIDIA V100. Les utilisateurs ayant accès à Niagara ont aussi accès à Mist; voyez les directives sur le site web de SciNet.
Tâches avec un seul cœur
Pour une tâche qui nécessite un seul cœur CPU et un GPU,
#!/bin/bash
#SBATCH --account=def-someuser
#SBATCH --gres=gpu:1 # Number of GPUs (per node)
#SBATCH --mem=4000M # memory (per node)
#SBATCH --time=0-03:00 # time (DD-HH:MM)
./program
Tâches multifils
Pour une tâche GPU qui nécessite plusieurs CPU dans un seul nœud,
#!/bin/bash
#SBATCH --account=def-someuser
#SBATCH --gres=gpu:1 # Number of GPU(s) per node
#SBATCH --cpus-per-task=6 # CPU cores/threads
#SBATCH --mem=4000M # memory per node
#SBATCH --time=0-03:00 # time (DD-HH:MM)
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
./program
Pour chaque GPU, les tâches multifils ne devraient pas dépasser
- avec Béluga, 10 cœurs;
- avec Cedar, nous recommandons un maximum de 6 cœurs par GPU P100 (p100 et p100l) et un maximum de 8 cœurs par GPU V100 (v100l);
- avec Graham, 16 cœurs.
Tâches MPI
#!/bin/bash
#SBATCH --account=def-someuser
#SBATCH --gres=gpu:4 # Number of GPUs per node
#SBATCH --nodes=2 # Number of nodes
#SBATCH --ntasks=48 # Number of MPI process
#SBATCH --cpus-per-task=1 # CPU cores per MPI process
#SBATCH --mem=120G # memory per node
#SBATCH --time=0-03:00 # time (DD-HH:MM)
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
srun ./program
Nœuds entiers
Si votre application peut utiliser efficacement un nœud entier et ses GPU associés, vous pouvez probablement réduire le temps d'attente si vous demandez un nœud entier. Utilisez les scripts suivants comme modèle.
Demander un nœud GPU sur Graham
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --gres=gpu:2
#SBATCH --ntasks-per-node=32
#SBATCH --mem=127000M
#SBATCH --time=3:00
#SBATCH --account=def-someuser
nvidia-smi
Demander un nœud GPU P100 sur Cedar
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --gres=gpu:p100:4
#SBATCH --ntasks-per-node=24
#SBATCH --exclusive
#SBATCH --mem=125G
#SBATCH --time=3:00
#SBATCH --account=def-someuser
nvidia-smi
Demander un nœud P100-16G sur Cedar
Sur Cedar se trouve un groupe particulier de nœuds qui ont chacun quatre cartes Tesla P100 16Go, alors que les autres GPU P100 sont de 12Go et les GPU V100 de 32Go.
Les GPU dans les nœuds P100L utilisent le même connecteur PCI, ce qui fait que la latence dans les communications entre GPU est plus faible; cependant, la bande passante entre CPU et GPU est plus basse qu'avec des nœuds GPU réguliers. De plus, la mémoire vive des nœuds est de 256Go.
Pour utiliser ces nœuds, il faut demander des nœuds entiers et indiquer --gres=gpu:p100l:4
. Le temps d'exécution maximal pour les tâches sur GPU P100L est de 28 jours.
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --gres=gpu:p100l:4
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=24 # There are 24 CPU cores on P100 Cedar GPU nodes
#SBATCH --mem=0 # Request the full memory of the node
#SBATCH --time=3:00
#SBATCH --account=def-someuser
hostname
nvidia-smi
Regroupement de tâches pour un seul GPU
Pour exécuter pendant plus de 24 heures quatre programmes qui utilisent un seul GPU ou deux programmes qui utilisent deux GPU, nous recommandons GNU Parallel. Voici un exemple simple :
cat params.input | parallel -j4 'CUDA_VISIBLE_DEVICES=$(({%} - 1)) python {} &> {#}.out'
L'identifiant du GPU est calculé en soustrayant 1 de l'identifiant de la fente (slot), représenté par {%}. L'identifiant de la tâche est représenté par {#}, avec des valeurs partant de 1.
Le fichier params.input devrait contenir les paramètres sur des lignes distinctes, comme suit :
code1.py code2.py code3.py code4.py ...
Vous pouvez ainsi soumettre plusieurs tâches. Le paramètre -j4
fait en sorte que GNU Parallel exécutera quatre tâches concurremment en lançant une tâche aussitôt que la précédente est terminée. Pour éviter que deux tâches se disputent le même GPU, utilisez CUDA_VISIBLE_DEVICES.