試行錯誤ができる便利なColab。しかも、サブスクリプションで私ごときでは買えない環境を気軽に使える。でも、いつもいつもだらだらと使っていると使い切ってしまう。そこで、自分のPC環境でColabを接続をして使うこともできるという言い訳でミドルエンドPC*1を組んだので、こいつを利用します。トータルコストがどうだという心の声はミュート*2して、段取りをメモしていきます。
環境: Windows11、wsl2 + docker
wslとdockerのインストールから実施します。
手順:
- Windowsのupdate、NVIDIAのドライバーのupdate
- wsl2をインストール
- dockerをインストール
- ndivia-toolkitをインストール
- colab用のdockerコンテナを作成
- Colabのローカル接続の設定
- memo
Windowsのupdate、NVIDIAのドライバーのupdate
updatesして後悔することもありますが、バージョンアップは大事。
メモ:
wsl2だとNVIDIAのドライバーのファイルの一部がrealだよと警告される。微妙に障害になる場合がある。回避策はあるようだか、副作用でるかもしれないので悩ましい。今回は実施していません。
wsl2をインストール
wsl2でubuntu 22.04をインストールし、アカウントを作成。
wsl --install
wsl --install -d <Distribution Name>
この状態ですでにwsl2(ubuntu)でGPUが有効の(はず)です。
sudo apt-update
sudo apt-upgrade
は、手癖のようにやりました・・・。
参考:
WSL 2 で NVIDIA CUDA を有効にする | Microsoft Learn
dockerをインストール
検索してあれこれやると古い情報にひっかかるので公式の手順も確認するのが吉。
- Set up Docker's apt repository.
- Install the Docker packages.
- Verify that the Docker Engine installation is successful by running the hello-world image.
の手順でhello-worldの確認まで済ませる。
rootでなくても実行できるようになるために・・・
sudo usermod -aG docker $USER
(ここでログインしなおす)
docker run hello-world
無事にhello-worldが出ました。
ndivia-toolkitをインストール
さて、トラブルになりそうな、ndivia-toolkitです。
公式にやらかすなと忠告がありますね。
Once a Windows NVIDIA GPU driver is installed on the system, CUDA becomes available within WSL 2. The CUDA driver installed on Windows host will be stubbed inside the WSL 2 as libcuda.so, therefore users must not install any NVIDIA GPU Linux driver within WSL 2.
- First, remove the old GPG key:
- Option 1: Installation of Linux x86 CUDA Toolkit using WSL-Ubuntu Package - Recommended
の順で進めます。
古いGPG Keyを削除した後、インストールを続けます。
CUDA Toolkit 12.6 Update 1 Downloads | NVIDIA Developer
ちゃんと正しく選択されているか、確認です。install Typeは自分の環境と趣味で。私はdeb(network)を選択しました。
後は表示された手順に沿って実施します。deb(network)を選択した場合です。
淡々と入れます。途中で不安になったら負けです。失敗したらubuntuを入れなおすところからやってもいいのです。(まだ、まっさらだし)
PATHが通ってなかったので、.bashrcに追加。
export PATH=/usr/local/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
bashに設定を読み込ませるか、ログインしなおしたらパスが通ります。
nvidia-smi;nvcc -V
で、ちゃんと表示がでたので成功です。
引き続き、dockerでgpuが有効になるのか確認。cudaのバージョンはホスト側(=ubuntu)のバージョンに差し替えます。
docker run -it --rm --gpus all nvidia/cuda:12.6.1-cudnn-runtime-ubuntu22.04 /bin/bash
ダウンロードに時間かかりますが、ちゃんと確認しておくと条件の切り分けができるので、やっておきましょう。
nvidia-smi
で再び表示がでたら成功です。
colab用のdockerコンテナを作成
GoogleさんのCobaoratory公式情報を確認します。
やはり注意が書いてあります。
任意のコマンドの呼び出し(例: 「rm -rf /」)
素直にDockerでやったほうがリスクは少なそうです。また、いろんな実験をするときに、素の状態に戻すのもDcokerだと簡単です。
というわけで、rmオプション+GPU有効可オプションをつけてdocker runします。
docker run --gpus=all --rm -p 127.0.0.1:9000:8080 us-docker.pkg.dev/colab-images/public/runtime
初回、起動には結構な時間がかかりました。コーヒーや動画を見ながら待ちます。dockerのオプションの--rmや-dはお好みで。
Colabのローカル接続の設定
colab用imageが起動すると・・・起動時のもろもろの出力の中に埋まって、jupyterのtoken付きのリンクが出るので、こいつをコピーしてcolabに投入します。
これで完了です。
memo
*1 CPU Ryzen7/ GPU RTX 3060(16GB)/RAM 64GB
*2 ColabでローカルLLMを実験してみた結果、これって自分のPCでも実用的に動かせるんじゃね?と思ったらサクッと確かめられる・・・という利点もあることに気が付きました。