地平線まで行ってくる。

記録あるいは忘備録。時には検討事項。

Colabをローカル環境と接続する。

試行錯誤ができる便利なColab。しかも、サブスクリプションで私ごときでは買えない環境を気軽に使える。でも、いつもいつもだらだらと使っていると使い切ってしまう。そこで、自分のPC環境でColabを接続をして使うこともできるという言い訳でミドルエンドPC*1を組んだので、こいつを利用します。トータルコストがどうだという心の声はミュート*2して、段取りをメモしていきます。

 

環境: Windows11、wsl2 + docker

wslとdockerのインストールから実施します。

 

手順:

 

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 のインストール | Microsoft Learn

WSL 2 で NVIDIA CUDA を有効にする | Microsoft Learn

 

 

dockerをインストール

検索してあれこれやると古い情報にひっかかるので公式の手順も確認するのが吉。

 

docs.docker.com

 

  1. Set up Docker's apt repository.
  2. Install the Docker packages.
  3. 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です。

 

docs.nvidia.com

 

公式にやらかすなと忠告がありますね。

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.

 

  1. First, remove the old GPG key:
  2. Option 1: Installation of Linux x86 CUDA Toolkit using WSL-Ubuntu Package - Recommended

の順で進めます。

 

古いGPG Keyを削除した後、インストールを続けます。

CUDA Toolkit 12.6 Update 1 Downloads | NVIDIA Developer

cuda toolkit for wsl ubuntu

ちゃんと正しく選択されているか、確認です。install Typeは自分の環境と趣味で。私はdeb(network)を選択しました。

 

後は表示された手順に沿って実施します。deb(network)を選択した場合です。

Download Installer for Linux WSL-Ubuntu 2.0 x86_64

淡々と入れます。途中で不安になったら負けです。失敗したら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公式情報を確認します。

Google Colab

 

やはり注意が書いてあります。

任意のコマンドの呼び出し(例: 「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でも実用的に動かせるんじゃね?と思ったらサクッと確かめられる・・・という利点もあることに気が付きました。