2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WindowsでCUDAが有効なWSL2でdockerコンテナでGoogleColaboratoryのローカルランタイムを用意

Last updated at Posted at 2021-10-29

このドキュメントは、WindowsでWSL+dockerを使って、GoogleColaboratoryのローカルランタイム環境を用意する手順を列挙したものです。WSL+dockerについては、参考にさせていただいた、「待ってました CUDA on WSL2」とほぼおなじです。もともとはWindows11用に書きましたが、Windows10 21H2でもほぼ同様の手順でできそうです。(Windows10の場合、21H2まで上がっているか確認を忘れずに。)

Windowsでの作業

ドライバインストール

Windowsでcuda on WSL用ドライバをインストール。GeForce用とQuadro用とあるので、自分の環境に併せて選ぶ。

  • 再起動

WSL上にUbuntu-20.04をインストール

  • 管理権限PowerShell起動

Windowsアイコンを右クリックして「Windowsターミナル(管理者)」から起動

  • 以下のコマンドでWSLをインストールする。
wsl --install -d Ubuntu-20.04	

windows10ではコマンドプロンプトのメッセージで再起動をしろと言われるので、一度再起動。

  • Ubuntu-20.04が自動起動

Ubuntu上でのユーザ名、パスワードを設定

#WSLのUbuntu20.04での作業

dockerのインストール

  • 以下のコマンドでインストール
curl https://get.docker.com | sh	

NVIDIA Container Toolkitのインストール

以下のシェルスクリプトファイル(nvidia-container-toolkit-installer.sh)を作成(待ってましたCUDA on WSL2より)

nvidia-container-toolkit-installer.sh
#!/bin/sh

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list

sudo apt update
sudo apt install -y nvidia-docker2
sudo usermod -aG docker $USER

補足:Linuxで簡単なテキストファイルを作るには、viコマンドを使う。

以下のコマンドでファイルを生成しつつ開く。

  • 上記をコピーしておく。
  • [i]キーで入力モードにして、
  • マウスを右クリックしてコピーしておいたテキストがペーストされる。
  • ペースト後、[Esc]キーで入力モードから抜けてコマンドモードに戻る。
  • [:]キーに続いて、wqと入力してエンターキーを押すと、保存してviを抜ける。
vi nvidia-container-toolkit-installer.sh

保存後、スクリプトを実行

sh nvidia-container-toolkit-installer.sh

docker起動

以下のコマンドで起動。一度起動すれば、裏側でずっと動いている。Windowsを再起動したときは、起動しなおす必要がある。

sudo service docker start

dockerが裏で動いているかどうかは、以下のコマンドで確認。

docker ps

動いていないときは、エラーが出るはず。
エラーがunix:///var/run/docker.sockにアクセスできないてきなもののときは、sudo docker psを試してみる。これでちゃんとできる場合、以下のコマンドで、今のユーザからアクセスできるように設定する。その場合、一度、ubuntuプロンプトは閉じて上げなおす。

sudo usermod -a -G docker `whoami`

必要なライブラリが導入済みのdockerコンテナを持ってきて起動

  • コンテナpull & run

最新版がどれになるかは、nvidiaのこのサイトで確認。自身の環境に合わせて末尾の方の数字は変更するとよい。

docker run --gpus all --name tmpnvenv -it --rm nvcr.io/nvidia/tensorflow:21.10-tf2-py3

nvcr.ioコンテナでの作業

jupyter http ovber wsインストール

pip install jupyter_http_over_ws

torchインストール

tourchを使うなら。ファイルがでかいのでとっても時間がかかる。
ダウンロード先でバージョンがマッチする一番良いのを探すとよいかも。

pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html

/contentフォルダをリンク

colabでは、/contentが起動環境なので、それに合わせる。

mv /workspace /content
ln -s /content /workspace

jupyterを動かすユーザを追加

useradd -m jupyter -s /bin/bash

実行ユーザになる

su - jupyter

必要なディレクトリ作成

mkdir -p .local/bin

matplotlib,sklearnインストール

pip install matplotlib sklearn

他にも必要なものがあれば入れる。あとで、Colabからも入れられるので、あまり気にしなくてもよいかも。

jupyter http ovber ws有効化

Colaboからローカルランタイムでjupyterにつなぐために必要。

jupyter serverextension enable --py jupyter_http_over_ws

コンテナイメージをcommit

毎回、これらの作業をするのは面倒なので、ここまでの作業を終えたイメージを保存しておく。
別の、WSL端末を開き(Windowsのタスクバーにあるubuntuアイコンを右クリックして一番上のUbuntu...から開く)、そこから以下のコマンドを実行

docker commit tmpnvenv local/nvidia_tf_colab:1.0

一番右はイメージの名前なので、何でもよい。自分でバージョン管理してもよいよね。

コンテナの終了処理

コンテナに入っている端末で、exitコマンドを2回実行。一般ユーザから抜ける分と、コンテナから抜ける分

exit
exit

#WSLのUbuntu20.04での作業

コンテナを起動してjupyterを動かす

docker run --gpus all --rm -v /mnt/c/Users/ユーザ名/どっかのフォルダ:/content -p 8888:8888 -p 6006:6006 -p 4040:4040 -u jupyter -it local/nvidia_tf_colab:1.0 /bin/sh -c "jupyter notebook --NotebookApp.allow_origin='https://colab.research.google.com' --allow-root --port 8888 --NotebookApp.port_retries=0 --ip 0.0.0.0"

なぜか、生成されるURLはおかしいので、tokenをメモしてコピーしておく。

#GoogleColaboratoryからローカルランタイムとして使う

Colabで右上にある「接続」、「再接続」あるいは(すでに接続済みの場合は)「RAM...ディスク...」の右側にある▼をクリックして、「ローカルランタイムに接続」を選ぶ。「ローカル接続の設定」ダイアログのバックエンドURLに、起動したJupyter notebookのURLを入れる。

http://localhost:8888/?token=コピーしたtokenをペースト

「URL 全体をコピー」と出てきますが、この方法だと正しいURLが出力されないので、上記をコピーして、token=のみぎがわだけ、コピペする。

参考記事

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?