https://zenn.dev/turing_motors/articles/04c1328bf6095a こちらの方により詳しい説明があります。 ## セットアップ方法 動作確認をしているPython Versionは3.10.10です。 3.10系であれば問題なく動作すると思います。 (CUDA11.6環境ではPython3.11では上手くpip installできないことが確認されています。) 以下では、Python3.10.10を使用します。 (pyenv等でpython versionを環境ごとに切り替えることをオススメします) 1. [microsoft/magatron-deepspeed](https://github.com/microsoft/Megatron-DeepSpeed) よりgit cloneしてきます 2. CUDA環境を用意してください。 [Lambdalab](https://cloud.lambdalabs.com/instances)の場合はデフォルトで入っています。module loadする必要はありません。 計算資源の環境によっては、moduleをloadする必要があります。 Slurm環境などの場合は、テキトウなリソースを確保してください。 (以下、横田研lab serverの例) ```bash module load cuda/11.6 module load cudnn/cuda-11.6/8.4.1 module load nccl/cuda-11.6/2.11.4 ``` (注意: module loadした場合は、loadできているか、module listで確認しましょう) 3. `nvidia-smi`により環境を確認してください。以下ではCUDA11.7を前提にしています。Cloud環境などで、CUDA versionの変更が不可能な場合は、pip install時にrequirements.txtを工夫してください。以下ではCUDA11.7以外での動作は保証しません。 5. pip install をします。 `cd Megatron-DeepSpeed`をしてから仮想環境を作りましょう。 pyenv virtualenv, poetryによる仮想環境の構築は非推奨です。 おそらく`megatron/data/helper`でimportエラーが発生します。 そのため、以下では`python -m venv .env`などで仮想環境を構築します。 ```bash > python --version 3.10.10 > python -m venv .env > source .env/bin/activate > which python /path/Megatron-DeepSpeed/.env/bin/python ``` 次に仮想環境で`pip install -r requirements.txt`をします。 その後`pip install deepspeed`も行ってください(requirements.txtに書き足してもかまいません) (2023/6/28現在、linux環境で`pip install torch`をするとCUDA11.7対応のPyTorchがinstallされます。お使いのCUDA versionが異なる場合は、[ここ](https://download.pytorch.org/whl/torch/)から環境にあったpytorchを探し出しましょう。探せたら、以下のような形でrequirements.txtを変更します) CUDA11.6の場合の変更例 ```txt pybind11 # for install pytorch version cu116 --find-links https://download.pytorch.org/whl/torch_stable.html torch==1.13.1+cu116 torchvision==0.14.1+cu116 six regex numpy ``` 5. 次にNIVIDA:apexをinstallします。`pip install`では動かないので、sourceからbuildしてください。 install方法がときどき変更になるので、[apex#from-source](https://github.com/NVIDIA/apex#from-source)を自分で見て確かめてください。以下に、6/23時点で上手くいった手順を記します。 以下のコマンドを`Megatron-DeepSpeed/`にて行います。 pipのversionが23.1以降であることを前提にしています。 `pip install --upgrade pip`などでupdateするなりして、23.1以降にしてください 次に以下のコマンドをCUDA環境で行います。Slurm環境などの場合は、テキトウなリソースを確保してmodule load cuda/11.7 をしてください。(手順通りしている場合は、すでにload済みなはずです) ```bash git clone https://github.com/NVIDIA/apex cd apex pip install -v --disable-pip-version-check --no-cache-dir --no-build-isolation --config-settings "--build-option=--cpp_ext" --config-settings "--build-option=--cuda_ext" ./ ``` C++のwarningがたくさん発生します。また環境によっては10分以上installに時間を要します。気長に待ちましょう。 ``` Successfully built apex Installing collected packages: apex Successfully installed apex-0.1 ``` と出れば成功です。(もしエラーが発生した場合は、おそらくCUDA環境が正しくloadできていません。) ## 動作チェック 仮のJobを流して動作チェックをします 1. データダウンロード ```bash cd dataset bash download_books.sh bash download_vocab.sh ``` 2. 1 node 1 GPUで実験 `examples/pretrain.sh`を変更して、jobを投げる。 手順通りしている場合は `Megatron-Deepspeed/`にて `mkdir -p checkpoints/345m-1gpu`とした後 ```bash #! /bin/bash # Runs the "345M" parameter model RANK=0 WORLD_SIZE=1 DATA_PATH=dataset/BookCorpusDataset_text_document CHECKPOINT_PATH=checkpoints/345m-1gpu python pretrain_gpt.py \ --num-layers 24 \ --hidden-size 1024 \ --num-attention-heads 16 \ --micro-batch-size 4 \ --global-batch-size 8 \ --seq-length 1024 \ --max-position-embeddings 1024 \ --train-iters 500000 \ --lr-decay-iters 320000 \ --save $CHECKPOINT_PATH \ --load $CHECKPOINT_PATH \ --data-path $DATA_PATH \ --vocab-file dataset/gpt2-vocab.json \ --merge-file dataset/gpt2-merges.txt \ --data-impl mmap \ --split 949,50,1 \ --distributed-backend nccl \ --lr 0.00015 \ --min-lr 1.0e-5 \ --lr-decay-style cosine \ --weight-decay 1e-2 \ --clip-grad 1.0 \ --lr-warmup-fraction .01 \ --checkpoint-activations \ --log-interval 100 \ --save-interval 10000 \ --eval-interval 1000 \ --eval-iters 10 \ --fp16 ``` と変更する。 `bash examples/pretrain.sh`で実行できる (module loadなどは適時お願いします) 3. 1 node 8 GPU での実験 torchrun が 推奨なのですが、examplesは `python -m torch.distributed.lanch`となっています。(pytorch2.0系からwarningが出るようになっていますが、とりあず気にせず実行しましょう) 先程と同様に`DATA_PATH`, `CHECKPOINT_PATH`を書き換えます。 その後、さらに ``` --vocab-file dataset/gpt2-vocab.json \ --merge-file datasetgpt2-merges.txt \ ``` を書き換えます。 MASTER_PORT=6000で問題ないようならそのままで良いです。 (衝突の可能性がある場合は、衝突の可能性がなさそうなportを指定しましょう`例 12345`とか) `bash examples/pretrain_gpt_distributed.sh` で動くはずです。 ## 補足 ``` File "/home/<user>/<path>/Megatron-DeepSpeed/megatron/data/gpt_dataset.py", line 289, in _build_index_mappings from megatron.data import helpers ImportError: cannot import name 'helpers' from 'megatron.data' ``` 上記のエラーが出た場合は以下のリンクを参照ください (横田研lab server上で CUDA11.6で環境構築をした際の手順が書かれています) https://github.com/okoge-kaz/Megatron-DeepSpeed/blob/feature/format-by-black/examples/README.md