🤖

Megatron-SWIFT(ms-swift) 環境構築

に公開

Megatron-SWIFT(ms-swift) 環境構築

以下の「参考URL」の記事の通りに環境構築していたのですが、意外と苦労しました。
わりと同じような苦労をする人が居るかもしれないということで、情報共有の記事を作成します。

参考URL

環境

  • 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 で失敗する

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のドキュメントにも書かれていました。

https://swift.readthedocs.io/en/latest/Instruction/Megatron-SWIFT-Training.html

git checkout e13873debc4699d39c6861074b9a3b2a02327f92

torchのcudaバージョンがあっていなかったので、一旦アンインストールしました

pip uninstall torch torchvision torchaudio

私のPCでは cuda 12.8 を使用しているので、cu128を選択します。
詳細は、以下のURLを参照してください。

https://pytorch.org/get-started/locally/

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

pip install では上手くインストールできなかったので色々ネットを漁っていたところ、apexのissuesで、以下のコメントを見つけました。

https://github.com/NVIDIA/apex/issues/86

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