(2023/7/19 更新: 新 Megatron-DeepSpeed と旧 Megatron-DeepSpeed では基本のセットアップ方法にほぼ差はありません。)
基本的な手順はこの記事と同様です。
-
pyenv が環境にあるかの確認
> pyenv --version pyenv 2.3.21
入っていない場合は
curl https://pyenv.run | bash
で install 可能です。mdx では、
~/.bashrc
が自動で読み込まれないようなので、pyenv を install した際は# pyenv export PYENV_ROOT="$HOME/.pyenv" command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
を
~/.bashrc
に追記すると思いますが、手動でsource ~/.bashrc
する必要があります。 -
pyenv で python を install
> pyenv install 3.10.10 > cd Megatron-DeepSpeed > pyenv local 3.10.10 > python -m venv .env > source .env/bin/activate
で、python の環境を作成します。
この際、
pyenv local
で指定した python のバージョンが、python --version
で表示されることを確認してください。 (Python3.10.10, Python3.11.4 の両方で動作確認済みです。) -
pip install
nvcc --version
で表示される cuda のバージョンに合わせて、requirements.txt
を変更してください。Megatron-DeepSpeed を
[email protected]:llm-jp/Megatron-DeepSpeed.git
から clone してきた場合は、git switch hpc/fujii/deepspeed-multi-node pip install -r requirements.txt
とすることで、CUDA11.8 に対応した PyTorch などが install されます。
-
apex install
NVIDIA:apex を install します。
git clone [email protected]:NVIDIA/apex.git cd apex
ここで apex を install 際のコマンドを こちらから確認ください。pip version によってコマンドが異なります。
補足: apex の install がうまくいかない場合は、apex の commit を前に戻すと上手くいくことがあります。
-
megatron/data/Makefile
を書き換えるCXXFLAGS += -O3 -Wall -shared -std=c++11 -fPIC -fdiagnostics-color CPPFLAGS += $(shell python3 -m pybind11 --includes) LIBNAME = helpers LIBEXT = $(shell /home/kazukifujii/.pyenv/versions/3.11.4/bin/python3-config --extension-suffix) default: $(LIBNAME)$(LIBEXT) %$(LIBEXT): %.cpp $(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o $@
のような形で、自分の環境に合わせた
python3-config
に書き換えてください。その後、
megatron/data
にてmake
を行うことを忘れないでください。
~/.ssh/config
に使用する node に ssh <name>
で接続できるように config
を設定してください。
ユーザー名や秘密鍵名、node の IP アドレスなどは変更する必要がありますが、以下が参考になると思います。
Host mdx
HostName llm-jp.zapto.org
User kazukifujii
ServerAliveInterval 15
IdentityFile ~/.ssh/mdx
Host 10.2.72.135
HostName 10.2.72.135
User kazukifujii
IdentityFile ~/.ssh/mdx
ServerAliveInterval 15
ProxyCommand ssh -W %h:%p mdx
Host 10.2.72.136
HostName 10.2.72.136
User kazukifujii
IdentityFile ~/.ssh/mdx
ServerAliveInterval 15
ProxyCommand ssh -W %h:%p mdx
mdx に login した状態で ssh <node-name>
で接続できることを確認してください。
旧 Megatron-DeepSpeed の script は、scripts/old_version
に移動しました。
scripts/mpirun
に新 Megatron-DeepSpeed 対応の script があります。
標準出力と標準エラー出力をoutputs/log
に保存するようにしています。
また、checkpoint
についても同様にoutputs/checkpoint
に保存するようにしています。
旧 Megatron-DeepSpeed 対応のコードは scripts/old_version/deepspeed
にあります。
また、新 Megatron-DeepSpeed 対応のコードは scripts/deepspeed
にあります。
log, checkpoint の処理は mpirun と同様です。
scripts/deepspeed/hostfile
に hostfile を置くことを想定しています。
また hostfile は環境依存であり、git 管理するべき対象ではないため.gitignore
に追加しています。
pdsh の install が必要です。 すでに install されている node もありますが、すべてのノードに install されているとは限らないので注意してください。
PDSH の install について: https://zenn.dev/turing_motors/articles/dff1466194f4ac#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97
pyenv を install する前に以下のようなコマンドを打ち
export PYENV_ROOT="model/<user-dir>/.pyenv"
bashrc に書き込むものも、上記のパスに合わせれば ~/
以下でないところに pyenv を install できます。
また python cache も
# pip cache
export PIP_CACHE_DIR="<user-dir>/.cache/pip"
とすることで、cache 作成先を変えることができます。