Pytorchでの分散学習
1. pytorch + horovod 環境の構築手順
[username@es1 ~]$ qrsh -g grpname -l rt_G.small=1
[username@g0001 ~]$ module load python/3.6/3.6.5 cuda/10.1/10.1.243 cudnn/7.6/7.6.5 nccl/2.5/2.5.6-1 openmpi/2.1.6 gcc/7.4.0
[username@g0001 ~]$ python3 -m venv ~/venv/pytorch+horovod
[username@g0001 ~]$ source ~/venv/pytorch+horovod/bin/activate
(pytorch+horovod) [username@g0001 ~]$ pip3 install --upgrade pip setuptools
(pytorch+horovod) [username@g0001 ~]$ pip3 install torch torchvision
(pytorch+horovod) [username@g0001 ~]$ HOROVOD_WITH_PYTORCH=1 HOROVOD_GPU_OPERATIONS=NCCL HOROVOD_NCCL_HOME=$NCCL_HOME pip3 install --no-cache-dir horovod
(pytorch+horovod) [username@g0001 ~]$ deactivate
[username@g0001 ~]$ exit
2. 実行スクリプト(例)
#!/bin/sh
#$ -l rt_F=2
#$ -l h_rt=1:23:45
#$ -j y
#$ -cwd
source /etc/profile.d/modules.sh
module load python/3.6/3.6.5 cuda/10.1/10.1.243 cudnn/7.6/7.6.5 nccl/2.5/2.5.6-1 openmpi/2.1.6 gcc/7.4.0
source ~/venv/pytorch+horovod/bin/activate
NUM_NODES=${NHOSTS}
NUM_GPUS_PER_NODE=4
NUM_GPUS_PER_SOCKET=$(expr ${NUM_GPUS_PER_NODE} / 2)
NUM_PROCS=$(expr ${NUM_NODES} \* ${NUM_GPUS_PER_NODE})
MPIOPTS="-np ${NUM_PROCS} -map-by ppr:${NUM_GPUS_PER_NODE}:node -mca pml ob1 -mca btl ^openib -mca btl_tcp_if_include bond0"
mpirun ${MPIOPTS} python3 /<path to directory>/pytorch_mnist.py
deactivate
コメント
他のやり方 Yamada さん: 2020-10-01 18:50:39
torch.distributed.launchを使うやり方もあるのでしょうか
通報
コメント
コメントを削除
この操作は取り消しできません。本当に続けますか?
torch.distributed.launchの利用について hagi さん: 2020-10-06 08:56:23
torch.distributed.launchは、現在サポートしていません。
通報
コメント
コメントを削除
この操作は取り消しできません。本当に続けますか?
torch.distributed.launchは使える? at_yana さん: 2020-10-28 11:14:27
先日開催された ABCIミニキャンプ 後のQ&Aにおいて、
NVIDIAのメンターの方から、torch.distributed.launchを使う話が
出てましたので、使えるように思います。
※私自身、検証スキルがないので的外れでしたらすいません。
どなたかお分かりになる方、ぜひコメントお願いします!
通報
コメント
コメントを削除
この操作は取り消しできません。本当に続けますか?
torch.distributed.launchモジュールが使えるようになりました! hagi さん: 2021-01-27 17:02:22
資源タイプrt_Fを指定してノード占有でジョブを実行する場合には、qrsh、qsubコマンド実行時のオプション指定により、計算ノードへのSSHログインを有効にすることができるようになりましたので、torch.distributed.launchモジュールが使えるようになりました。
参考ですが、qrsh コマンドの -inherit オプションを使用した場合の実行例を以下に示します。
バッチジョブスクリプト(run.sh)
-----------------------------------------------------
#!/bin/sh
#$ -l rt_F=4
#$ -cwd
#$ -j y
source /etc/profile.d/modules.sh
source /etc/profile.d/uge.sh
module load python/3.6/3.6.5
source pytorch/bin/activate
export OMP_NUM_THREADS=20
export NGPU_PER_NODE=4
# launch on slave nodes
node_rank=1
for slave_node in `cat $SGE_JOB_HOSTLIST | awk 'NR != 1 { print }'`; do
qrsh -inherit -V -cwd $slave_node python -m torch.distributed.launch --nproc_per_node $NGPU_PER_NODE --nnodes $NHOSTS --node_rank $node_rank --master_addr `hostname` try2.py &
node_rank=`expr $node_rank + 1`
done
# launch on master node
node_rank=0
python -m torch.distributed.launch --nproc_per_node $NGPU_PER_NODE --nnodes $NHOSTS --node_rank $node_rank --master_addr `hostname` try2.py
# finalize
wait
exit 0
-----------------------------------------------------
バッチジョブ投入
-----------------------------------------------------
$ qsub -g grpname run.sh
-----------------------------------------------------
*ジョブ実行中の計算ノードへのSSHアクセスについては、下記をご参照ください。
https://docs.abci.ai/ja/appendix/ssh-access/
通報
コメント
コメントを削除
この操作は取り消しできません。本当に続けますか?