🤖
Megatron-SWIFT(ms-swift) 環境構築
Megatron-SWIFT(ms-swift) 環境構築
以下の「参考URL」の記事の通りに環境構築していたのですが、意外と苦労しました。
わりと同じような苦労をする人が居るかもしれないということで、情報共有の記事を作成します。
参考URL
- aratakoさんの記事を参考にさせて頂きました
環境
- promxmox VE 8.3.5
- LXCコンテナのUbuntu 24.04 LTS
- HOSTとLXCコンテナ両方に、以下2つのドライバを入れています。
- nvidiaドライバ: NVIDIA-Linux-x86_64-570.124.04.run
- cudaドライバ: cuda_12.8.1_570.124.06_linux.run
- cuDNN: cudnn9-cuda-12, cudnn9-cuda-12-9, libcudnn9-cuda-12, libcudnn9-dev-cuda-12, libcudnn9-headers-cuda-12, libcudnn9-static-cuda-12
- GPUは、RTX-3090(24GB)とRTX-4060Ti(16GB)の2枚
ryuuri@ct103:~$ nvidia-smi --version
NVIDIA-SMI version : 570.124.04
NVML version : 570.124
DRIVER version : 570.124.04
CUDA Version : 12.8
インストール作業フォルダ作成
mkdir -p ~/FineTuning/ms-swift
venv作成
cd ~/FineTuning/ms-swift
python3.12 -m venv venv-ms-swift
. venv-ms-swift/bin/activate
環境設定(apexやTransformerEngineのビルドに必要な設定も含んでいます)
vi env.bash
export TORCH_CUDA_ARCH_LIST="7.0;8.0;8.9"
export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64
export CUDA_HOME=/usr/local/cuda-12.8
export CUDNN_LIBRARY=/usr/local/cuda-12.8/lib64
export SITE_PACKAGES=$(python -c "import site; print(site.getsitepackages()[0])")
echo "SITE_PAKAGES ... $SITE_PACKAGES"
export CUDNN_PATH=$SITE_PACKAGES/nvidia/cudnn
export CPLUS_INCLUDE_PATH=$SITE_PACKAGES/nvidia/cudnn/include
if [ ":$PATH:" != *":/usr/local/cuda-12.8/bin:"* ]; then
export PATH="/usr/local/cuda-12.8/bin:$PATH"
fi
echo "PATH ... $PATH"
環境設定の反映
. env.bash
ms-swiftインストール
git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .
install tranformers, linger-kernel, pybind11
pip install liger-kernel transformers -U
pip install pybind11
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable で失敗する
- 解決方法は、右のURLを参照 https://github.com/modelscope/ms-swift/issues/3793
- これでも解決しなかったので、以下の通り手動で修正しつつインストールしました
git cloneして、stableブランチのチェックアウト、submoduleの取り込みを実施しています
cd /tmp
git clone https://github.com/NVIDIA/TransformerEngine.git
cd TransformerEngine
git checkout stable
git submodule update --init --recursive
wheelが必要になるので、pip install します
pip install wheel
setup.pyで、うまくarchsを取り込めないようなので、即値を設定します
- 私のLinuxマシンのRTX-3090では compute_100, compute_120でエラーが出たので、"70;80;89;90"としました
- https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/ を見ると、Ampere は、87までなので、89と90も取った方が良かったかもしれません
diff TransformerEngine.old/setup.py TransformerEngine.new/setup.py
60c60
< cmake_flags = ["-DCMAKE_CUDA_ARCHITECTURES={}".format(archs)]
---
> cmake_flags = ["-DCMAKE_CUDA_ARCHITECTURES=70;80;89;90"]
CMakeLists.txtでエラーがでたので対応しました
- transformer_engine/common/CMakeLists.txt で、GET CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES 0 cuda_include_path が上手く動作しなかったので、get_target_propertyでINTERFACE_INCLUDE_DIRECTORIESから取得するようにしました
- 5行-12行目は、あまり必要なさそうなんですが、消すと上手く動かなかったので残してあります(バッドノウハウ・・・)
diff TransformerEngine.old/transformer_engine/common/CMakeLists.txt TransformerEngine.new/transformer_engine/common/CMakeLists.txt
5a6,7
> enable_language(CUDA)
> project(TransformerEngine LANGUAGES C CXX CUDA)
10c12
< set(CMAKE_CUDA_ARCHITECTURES 70 80 89 90 100 120)
---
> set(CMAKE_CUDA_ARCHITECTURES 70 80 89 90)
145c147,150
< GET CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES 0 cuda_include_pathGET CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES 0 cuda_include_path
---
> # list(GET CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES 0 cuda_include_path)
> get_target_property(cuda_include_path CUDA::toolkit INTERFACE_INCLUDE_DIRECTORIES)
> message(STATUS "CUDA include path: ${cuda_include_path}")
- そして、/tmp/TransformerEngine で、 pip install . します。
cd /tmp/TransformerEngine
pip install .
apex のインストール
まずは、apex を git cloneします
git clone https://github.com/NVIDIA/apex
cd apex/
そのままビルドすると、ampが無いというエラーになります。
最新で、ampが削除されているためです。
そこで、ampが削除されたコミットの1つ前のコミットに巻き戻します。
このコミットのハッシュは以下のURLのドキュメントにも書かれていました。
git checkout e13873debc4699d39c6861074b9a3b2a02327f92
torchのcudaバージョンがあっていなかったので、一旦アンインストールしました
pip uninstall torch torchvision torchaudio
私のPCでは cuda 12.8 を使用しているので、cu128を選択します。
詳細は、以下のURLを参照してください。
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
pip install では上手くインストールできなかったので色々ネットを漁っていたところ、apexのissuesで、以下のコメントを見つけました。
setup.pyでインストールする方法があるらしいので、やってみたところ、無事インストール完了しました。(このコメントでは、何かwarningになっていたようですが)
python setup.py install --cuda_ext --cpp_ext
megatron-coreのインストール
pip install git+https://github.com/NVIDIA/Megatron-LM.git@core_r0.12.0
これで、環境構築は完了です。
動作確認
モデルを自動ダウンロードして、mcore形式に変換
CUDA_VISIBLE_DEVICES=0 swift export --model Qwen/Qwen3-4B-Base --to_mcore true --torch_dtype bfloat16 --output_dir /home/ryuuri/FineTuning/ms-swift/MODEL/Qwen3-4B-Base-mcore
mcore形式のモデルをHFモデルに変換
CUDA_VISIBLE_DEVICES=0 swift export --mcore_model /home/ryuuri/FineTuning/ms-swift/MODEL/Qwen3-4B-Base-mcore --to_hf true --torch_dtype bfloat16 --output_dir /home/ryuuri/FineTuning/ms-swift/MODEL/HF/Qwen3-4B-Base-HF
モデルを自動ダウンロードして推論
CUDA_VISIBLE_DEVICES=0 swift infer --model Qwen/Qwen3-4B-Base --stream true --infer_backend pt --max_new_tokens 2048
※ mcoreに変換するときにダウンロードしているので、今回はダウンロードは走らない
ローカルのHFモデルで推論
CUDA_VISIBLE_DEVICES=0 swift infer --model /home/ryuuri/FineTuning/ms-swift/MODEL/HF/Qwen3-4B-Base-HF --stream true --infer_backend pt --max_new_tokens 2048
Discussion