WindowsにPython+CUDA+PyTorch+TransformersでLLM実行環境を構築したら色々大変だった
会社にGPU搭載ノートがあったので、DL用マシンにすべく、素人が環境構築を試みました。
たくさん躓いたので後学の為に記録しておきます。
はじめに
目指す姿
- Pytorch + GPU実行環境を構築
- TransformersライブラリでLLMを実行
- 低スペックGPUでも動く環境(LLMモデル量子化)
マシンスペック
- Windows 10 Pro
- RAM 32GB
- GPU NVIDIA Quadro P3200 (VRAM 6GB)
環境構築つまづきポイント
- GPUスペック、CUDAとPytorchのバージョン問題
- CUDA環境変数の設定
- Pythonバージョン問題
- 社内のProxy環境・SSL認証の設定
- Windows非対応ライブラリのインストール
インストールしたもの
太字部分が今回特に悩まされた箇所😟
- Python 3.11.6
- Visual Studio Code 1.84.1
- Build Tools for Visual Studio
- NVIDIAドライバ
- CUDA Toolkit 11.8
- cuDNN v8.9.6 for CUDA 11.x
- Rust
- Pythonライブラリ(主なもの):PyTorch, Transformers, Tokenizers, bitsandbytes
構築手順(2023年11月28日時点)
1. Pythonインストール
Python 3.11.5 をインストール
2. Visual Studio Codeインストール
いつも使う開発環境なのでインストール
3. venv仮想環境作成
python -m venv envname
.\envname\Scripts\activate
4. Build Tools for Visual Studio インストール
後述するCUDA ToolkitとRustのインストールに必要なC++コンパイラを入れる為、以下サイトからVisual Studio Installerをダウンロードして実行。
「C++によるデスクトップ開発」をインストール↓
5. NVIDIAドライバ最新化
対象GPUを選択して最新ドライバをダウンロード
インストール後、コマンドプロンプトでnvidia-smi
と実行し、CUDAバージョンを確認。
バージョンは12.2でした。
> nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 537.70 Driver Version: 537.70 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Quadro P3200 WDDM | 00000000:01:00.0 Off | N/A |
| N/A 0C P0 28W / 88W | 0MiB / 6144MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
6. CUDA Toolkit 11.8 インストール+環境変数の設定
以下から対象のCUDAバージョンを選択してインストーラを入手。
色々迷って今回はバージョン11.8をインストール。
理由はPytorch + CUDA 12だと動かないとの記事を見かけた事、最新版よりは実績版の方が安心に思えた事、CUDA 11~12は下位互換性があると知った事などによります。
インストール後、システム環境変数とユーザ環境変数を設定します
システム環境変数に追加
CUDA_PATH
, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
CUDA_PATH_V11_8
, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
ユーザ環境変数のPathに追加
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\libnvvp
最終的にコマンドプロンプトでnvcc -V
コマンドが通る事を確認します
7. cuDNN v8.9.6 for CUDA 11.x ダウンロード+環境変数設定
これも公式からCUDAバージョン(v11.x)を選択しつつダウンロードします
この際、NVIDIAアカウントが必要との事で、少し面倒ですが登録します
ダウンロードしたZIPを解凍後、そのフォルダにもシステム環境変数CUDNN_PATH
を通すのですが、CUDA_PATH
と同じ階層の
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
に解凍したフォルダを丸コピし、そこに対してパスを通すのがシンプルです
システム環境変数に追加
CUDNN_PATH
, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8
8. PyTorchインストール(w/プロキシ・SSL認証設定)
PyTorch公式よりpip文を生成。
Python仮想環境上でインストールします
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
この際、冒頭で触れたように、今回は会社で使っておりプロキシ環境下にある事とSSL認証を通す必要があります。
pip install時に毎回必要になるため、以下のようにpip.iniファイルを作成し、
C:¥Users¥{UserName}¥AppData¥Roaming¥pip¥pip.ini
に置いておきます。
[global]
trusted-host =
pypi.python.org
pypi.org
files.pythonhosted.org
download.pytorch.org
proxy = http://<IPアドレス>:<Port番号>
trusted_hostでSSLErrorを、proxyでプロキシエラーを解消できるはずです。
trusted_hostは通常のpip install {ライブラリ名}
であればpypi.python.orgとpypi.orgで大丈夫ですが、ライブラリによって別のリポジトリからインストールする必要があった際には追加しています(今回もPytorchがそうでした)
9. Rustのインストール
PythonでライブラリTransformersをインストールする際に、依存ライブラリであるTokenizersのインストールでエラーが発生しました。
Collecting tokenizers<0.19,>=0.14 (from transformers)
Using cached tokenizers-0.15.0.tar.gz (318 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... error
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
?─> [8 lines of output]
error: rustup could not choose a version of cargo to run, because one wasn't specified explicitly, and no default is configured.
help: run 'rustup default stable' to download the latest stable release of Rust and set it as your default toolchain.
Cargo, the Rust package manager, is not installed or is not on PATH.
This package requires Rust and Cargo to compile extensions. Install it through
the system's package manager or via https://rustup.rs/
Checking for Rust toolchain....
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
?─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
「This package requires Rust and Cargo to compile extensions.」と言うことで、Rustを入れる必要があるようでした。
以下から64bit版を選択し、rustup-init.exeをダウンロード&実行するとCLI上でインストールが始まります
最初、defaultでインストールを試みると「toolchainのstable版が無い」だなんだとエラーが発生しました。
2)Customize Installationでtoolchain noneなど(うろ覚え)を選択してインストール。
その後改めて
set HTTPS_PROXY=http://<IPアドレス>:<Port番号>
rustup default stable
と実行することで何とかちゃんとインストールできたっぽい(この辺全然理解してないです)
(上記コマンドの1行目はコマンドプロンプト上でプロキシを通す為に実行してます)
ここまで何とか辿り着いたものの、pip install tokenizers
は相変わらずエラー・・・
そこでようやくしくじりポイント① のPythonバージョン問題に気付き、Pythonを再インストールする羽目に。
10. Transformers関係ライブラリのインストール
あと一息!
と言うことで、LLM実行環境に必要な各種ライブラリをインストール
tokenizerも含めてエラー無く完了!!😂
pip install transformers datasets accelerate bitsandbytes sentencepiece
11. bitsandbytesのインストール
bitsandbytesがWindows非対応の為、pip installは出来ますが、import時にうまく行きません。
Windows対応方法を調べると幾つか手段がありそうで大変迷ったのですが、最終的には以下サイトのやり方で無事にインストール&実行出来ました
pip install https://github.com/jllllll/bitsandbytes-windows-webui/raw/main/bitsandbytes-0.39.0-py3-none-any.whl
import bitsandbytes
この際もpip.iniにてSSLError対策を行いました。
また、しくじりポイント② に書いた環境変数設定も行わないとCUDAが見つからない的なエラーが出てしまいました。
ユーザ環境変数のPathに追加
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\libnvvp
ご注意を!
これでやっと所望の環境が作れました!!
最後に
以上、書き順がごちゃごちゃしてますが、今回の構築手順を多少整理しつつ記載しました。
普段はGoogle Colabなどでお気軽にDLを活用していますが、自分で作るとこんなにも大変なんですね・・・
とりわけ、
- tokenizersのインストール時にRustが必要なこととPython<=3.11が必要なこと
- bitsandbytesのインストール時にWindows対応版が必要なこととCUDA環境変数が必要なこと
などと複合的なエラーに幾度も悩まされて数日間を溶かしてしまいました。
ここまでして準備した環境が少しでも業務に活きますように。アーメン🙏
Discussion