Pytorchでの分散学習

投稿:hagi  
4 3756 通報 ウォッチ

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/

    通報

    ログインしてコメントを書く

    関連する投稿