Sizing PoC LSF & PowerAI for Engineers schools workloads
1. Equipe IBM : Régis Cely, Samir Attmani, Thibaud Besson, Philippe Brogi
Proof of Concept Cloud PowerAI avec IBM Spectrum LSF
Bois-Colombes le 21 juin 2018
2. Exec Summary
Profil Applicatif
ArchitectureHW & SW
Migration des jeux d’essais (donnéeset programmes)versPower
Résultats obtenus
Spécificitéstechniquesà souligner
Architecturepréconiséepar IBM suite à l’étude de sizing
3. Profil Applicatif
Jeux d’essais envoyé par une école d’ingénieursFrançaise comprenant:
• un workloadlight MNIST sur frameworkPytorch
• un worloadmiddle : word language sur frameworkPytorch
• des applicationsmaisons horsframework
L’écolea fournil’ensembledes donnéesetdes codesdes jeux d’essais.
4. Architecture HW & SW chez IBM à Bois-Colombes
Stack Logiciel sur AC922 :
RedHat 7.5
PowerAI 1.5.1 (free)
LSF 10.1.0.3 (community edition / free)
Gcc 4.8.5
POWER9 AC922 / SMT 4
Frontal LSF
VM POWER8 S822L sur KVM
LSF Master/Client
jobs submission
RTM
(Add-on LSF)
cluster monitoring
/home/
/usr/share/lsf
9.128.137 .18
.190
etud1/
etud2/
etud3/
proftp/
prof/
NFSNFS
LSF Compute node
gpu1gpu0
10.10.8
.190
OpenBMC
5. Migration des jeux d’essais (donnéeset programmes)versPower
Résultats obtenus
Set-up du serveur AC922 avec 2 GPU :
• Installation RedHat 7.5
• Drivers Cuda
• Cuda Toolkit
• Environnement Anaconda 5.1 avec Python 2.7 & 3.5
• Installation LSF 10.1.0.3
Recompilation :
• Pytorch sur Power
• Du code maison (impératif de respecter les conventions des codes retour d’erreur)
Portabilité du code sur la technologie Power :
• Aucune erreur lors des compilations & Editions de lien
• Aucune erreur au runtime
• Aucune ligne de code modifiée
6. Résultats obtenus
Il est à noter que tous les jobs sont soumis aumêmeinstant,ce quin’est pas représentatif d’unLab de
l’école d’ingénieurs qui devrait lisser la chargemachine.
Pytorch MNIST:
1.Profiling unitaire de l’application Pytorch MNIST / Peu de GPU utilisée et peu de mémoire consommée sur les GPU
Low GPU memory usage 1 026MiB / 15 360MiB
Low GPU utilization ~ 7%
Elapsed time on V100 GPU 2min 15sec
2.Tests de la workload Pytorch MNIST sur GPU en mode partagé (limitation à 8 processes en // par GPU pour éviter
des erreurs Out Of Memory)
16 jobs soumis sur 2 GPUs / Elapsed : 2min 53sec (aucun job pending)
80 jobs soumis sur les 2 GPUs / Elapsed : 13min 22sec (gestion de file d’attente par LSF)
Résultats obtenus
7. Résultats obtenus
Word Language :
1.Profiling unitaire de l’application Word Language
Low GPU memory usage 1 490MiB / 15 360MiB
Medium+ GPU utilization ~ 68%
Elapsed time on V100 GPU 4min 22 sec
2.Tests de la workload Word Language sur GPU en mode partagé (limitation à 4 processes en // )
4 jobs soumis sur 2 GPUs / Elapsed : 6min 58sec
16 jobs soumis sur les 2 GPUs / Elapsed : 57min 42sec (gestion de file d’attente par LSF: 16 jobs running en //)
3.Tests de la workload Word Language sur GPU en mode partagé (4 jobs running à l’instant t / LSF management)
16 jobs soumis sur les 2 GPUs / Elapsed : 27min 47sec (gestion de file d’attente par LSF : 4 jobs running en //)
Avec 4 GPU on divisera ce temps par 2 soit : 13min 53 sec (gestion de file d’attente par LSF : 8 jobs running en //)
Et pour 64 jobs ce temps sera multiplié par 4 sur 4 GPU, à savoir : 56min.
Code maison :
Temps de traitement inférieur à 3 secondes pour l’ensemble des jobs (perceptron, logistic regression, ada boost)
Résultats obtenus
8. Spécificités techniques à souligner (1/3)
Gestions des GPUs par LSF : 2 modes de réservation (shared ou dedicated)
Shared : virtualisation de GPU
Permet de partager le GPU entre plusieurs processus. Attention cependant à l’utilisation mémoire du GPU.
A partir de LSF 10.1.0.6 (mai 2018), il est possible de définir la mémoire GPU que l’on souhaite réserver dans les
paramètres du JOB LSF.
Ex: #BSUB -gpu "num=1:mode=shared:mps=no:j_exclusive=no:gmem=1000M”
Pas testé dans le cadre du PoC mais validé sur le cluster à Montpellier
Dedicated : 1 GPU par processus/job
A noter, sur les applications maison, il est impératif de respecter les standards sur les codes retour :
EXIT_SUCCESS = 0
EXIT_FAILURE > 0
LSF est sensible au code retour d’une application et update le statut du job (ERROR or DONE) en fonction du code retour de l’application.
De plus il est possible de resoumettre un job automatiquement en fonction de son code retour.
9. Spécificités techniques à souligner (2/3)
Compilation de pytorchsur ppc64le
Install cmake version 3 and use alternatives to register both cmake and cmake3 configuration
$ yum install –y cmake3
$ sudo alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake 10
--slave /usr/local/bin/ctest ctest /usr/bin/ctest
--slave /usr/local/bin/cpack cpack /usr/bin/cpack
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake
--family cmake
$ sudo alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake3 20
--slave /usr/local/bin/ctest ctest /usr/bin/ctest3
--slave /usr/local/bin/cpack cpack /usr/bin/cpack3
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake3
--family cmake
10. Spécificités techniques à souligner (3/3)
Source NCCL (for Pytorch, we use the nccl provided by powerAI package)
$ source /opt/DL/nccl/bin/nccl-activate
$ export NCCL_ROOT_DIR=/opt/DL/nccl
$ export NCCL_LIB_DIR=/opt/DL/nccl/lib
$ export NCCL_INCLUDE_DIR=/opt/DL/nccl/include
Start the compilation
$ git clone --recursive https://github.com/pytorch/pytorch
$ cd pytorch
$ python setup.py install OR python setup.py bdist_wheel to generate whl package
(if whl package was generated, install it with pip install command)
Test the stack
$ python
>>> import torch
>>> torch.__version__
'0.5.0a0+c446269'
11. Architecture préconisée par IBM suite à l’étude de sizing (1/2)
Un frontal de connexion est nécessaire, il servira de nœud maître à LSF, il
hébergera le portail (LSF Application Center) et le monitoring (LSF Explorer à la
place de RTM) :
- Un serveur LC922 un socket 16 CPU 128 GB 2U
- PCIe3 LP 2-port 32Gb Fibre Channel Adapter
- Disques : 8 x Hdd 3.82 To en RAID5 avec spare : 23 466 GB
Speed gain 7x read speed, no write speed gain
Fault tolerance 1-drive failure
POWER9 AC922 / SMT 4
Nœud de calcul
(Compute Node)
LC922
Frontal LSF
Master Node LSF
(App Center & Explorer)
Stack Logiciel sur AC922 :
RedHat 7.5
PowerAI 1.5.1 (free)
LSF 10.1.0.6 Standard Edition
Une licence LSF suite : 1 cluster , 2 nodes & 80 users simultanés)
Stack Logiciel sur L922 : RedHat 7.5
Licensing model – IBM SpectrumLSF Suites
Suite for Enterprise
Suite for HPC
Suite for Workgroups
Ansible+RPM
Installer
SCF-CE
Application
Center
Standard
Edition
Explorer
Process
Manager
Data Manager
License
Scheduler
Enterprise
Scalability
Resource
Connector
LSF Standard Edition
Spectrum MPI
(Power & x86)
Platform MPI
(x86)
MultiCluster (Send only)
RTM Data Collectors*
Full MultiCluster
Enabled
12. Architecture préconisée par IBM suite à l’étude de sizing (2/2)
Hors considération dePRA,IBMproposeun serveur AC922 uniquepour le calcul
avec :
- 2 sockets de 16 cœurs P9 chacune @ 3,13 GHz
- 4 GPU Nvidia V100 32 GB
- 256 GB de mémoire
- 2 SATA/SSD de 960 GB chacun
- RedHat 7.5 avec Gcc 4.8.5
- PowerAI 1.5.1 (free) avec LMS & DDL
- LSF 10.1.0.6 StandardEdition (interfacegraphique, gestion allocation mémoire GPU par
process, upgrade fixpacket ajout de fonctionnalités)
- PCIe2 LP 4-Port (10Gb + 1GbE)
14. Tâches réalisées
l lsf-frontal
Ø création VMRedHat 7.4, config réseau
Ø installation LSF
Ø partage réseau NFS /homeet /usr/share/lsf
Ø installation RTM
Ø compilation python 3.5,pytorch,partagépar condadans /home
l AC922
Ø installation RHEL 7.5 ALT ppc64le
Ø installation PowerAI
Ø installation python
Ø compilation nmon pour informationsGPU
15. Versions installées
PowerAI : version 1.5.1
$ lsid
IBM Spectrum LSF Community Edition 10.1.0.3, Feb 01 2018
$ python --version
Python 2.7.14 :: Anaconda, Inc.
$ source activate py35 && python --version
Python 3.5.5 :: Anaconda, Inc.
$ pip list | grep torch
torch 0.5.0a0+0a5fe55
torchvision 0.2.1
16. Lancement job ligne de commande
l créer un job contenant
Ø les instructionsLSF
Ø la commandelançantla tâche
$ cat pytorch_mnist.job
#BSUB -gpu "num=1:mode=shared:mps=no:j_exclusive=no"
cd /home/regis/xxxxxx-Lab-Etudiant/Pytorch/mnist/
python /home/regis/xxxxxx-Lab-Etudiant/Pytorch/mnist/main.py
l bsub lance le job
$ bsub < pytorch_mnist.job
Job <414> is submitted to default queue <normal>.
17. Surveillance des jobs sur le frontal
$ bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
413 regis RUN normal lsf-frontal ac922-1.sho *t/main.py Jun 19 14:40
414 regis RUN normal lsf-frontal ac922-1.sho *t/main.py Jun 19 14:49
18. Surveillance des GPU sur l’AC922
$ ssh root@9.128.137.190 'nvidia-smi'
root@9.128.137.190's password:
Tue Jun 19 14:57:34 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.26 Driver Version: 396.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-SXM2... On | 00000004:04:00.0 Off | 0 |
| N/A 33C P0 76W / 300W | 6714MiB / 15360MiB | 65% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla V100-SXM2... On | 00000035:03:00.0 Off | 0 |
| N/A 33C P0 80W / 300W | 6646MiB / 15360MiB | 82% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 86127 C python 1010MiB |
| 0 86178 C python 942MiB |
| 0 86225 C python 942MiB |
| 0 86262 C python 942MiB |
| 0 86284 C python 942MiB |
| 0 86341 C python 942MiB |
| 0 86394 C python 942MiB |
| 1 86115 C python 942MiB |
| 1 86177 C python 942MiB |
| 1 86181 C python 942MiB |
| 1 86224 C python 942MiB |
| 1 86268 C python 942MiB |
| 1 86337 C python 942MiB |
| 1 86386 C python 942MiB |
+-----------------------------------------------------------------------------+
19. Soumission massive de jobs
$ for i in `seq 1 20`;
> do
> bsub < pytorch3_mnist.job
> done
$ for i in `seq 1 10`; do bsub < pytorch3_mnist.job; done
22. Environnement utilisateur
l Création des utilisateurs sur le frontal
- useradd thibaud ; passwd thibaud ; id thibaud
l Création de l’utilisateur sur l’AC922. Le faire dans la suite, pour qu’il ait le meme USERID.
- useradd -u 1003 thibaud
l Installation Anaconda et configuration d’une installation python 3.5 par utilisateur
- wget https://repo.continuum.io/archive/Anaconda2-5.1.0-Linux-ppc64le.sh
- bash Anaconda2-5.1.0-Linux-ppc64le.sh
- conda create -n py35 python=3.5 anaconda
# To activate this environment, use:
# > source activate py35
#
# To deactivate an active environment, use:
# > source deactivate
l Installation pytorch
Ø pip install /deep_learning_frameworks/torch-0.5.0a0+0a5fe55-cp27-cp27mu-linux_ppc64le.whl