概要
kaggleコンペのstarter notebookで使われているkeras-cvがwindows10で動かなかったので、必要にせまられてWSL2のUbuntu環境を構築することにした。また、せっかくなのでDocker Engineをインストールしてkaggle公式イメージを使えるようにした。その時の作業メモを残しておく。
PC環境
このPCに、WSL2(Ubuntu) + Docker環境を構築する。
項目 | 値 |
---|---|
OS | Windows10 Pro 22H2 |
CPU | Core i5-13500 |
OSメモリ | 96 GB |
GPU | GeForce RTX 2080 Ti |
準備
Windowsターミナルのインストール
公式サイトにしたがって、Windowsターミナルをインストールする。
必須ツールではないが、タブ操作でPowershellやWSLのubuntuを起動できるので便利。
次のWSLインストール作業以降、このWindowsターミナルを利用する。
環境構築
WSL2のインストール
公式サイトにしたがってWSL2をインストールする。
PowerShell上で以下のコマンドを実行する。必要な一式が自動でインストールされる
wsl --install
再起動するとUbuntuのインストールが自動で開始される。途中、作成するユーザーアカウントの入力を求められる。
これでUbuntuのインストールは完了。
インストールしたUbuntuは、Windowsターミナルのタブから起動することができる
Ubuntuのリソース設定変更
Ubuntuに割り当てられるメモリサイズはデフォルトでホスト(Windows)の半分らしい。必要に応じて、設定ファイルを作成してリソース設定を変更する。私はこちらを参考にした。
.wslconfigファイルの作成場所(Windows側)
C:\Users\[ユーザ名]\.wslconfig
設定例:メモリを80GB割り当て
[wsl2]
memory=80GB
設定ファイルの内容を反映させるため、PowerShell上でwslをシャットダウンする
wsl --shutdown
メモリが80GBに増えたことを確認
なお、メモリ以外のリソース設定も変更できる。こちらが参考になる。
Docker Engineインストール
公式DocにそってDocker Engineをインストールする。
私は、公式DocのInstall using the Apt repository の内容をそのまま実行した。
DockerのAptリポジトリをセット
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Dockerパッケージのインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
インストール完了後、hello-worldコンテナを起動して動作確認を行う。
sudo docker run hello-world
あと、sudoをつけずにdockerコマンドを実行できるよう、dockerグループにユーザ追加を行う。
# sudo usermod -aG docker $USER
sudo usermod -aG docker <ユーザ名>
NVIDIA Container Toolkitのインストール
コンテナの中でNvidia GPUを利用するため、NVIDIA Container Toolkitをインストールする。
公式ガイドにしたがって、Installing with Aptの内容をそのまま実行する。
リポジトリの設定
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
&& \
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
NVIDIA Container Toolkitパッケージのインストール
sudo apt-get install -y nvidia-container-toolkit
Dockerイメージの取得
githubを参考に、kaggle公式イメージを取得する。
# gpuのイメージ取得コマンド
docker pull gcr.io/kaggle-gpu-images/python
# cpu onlyのイメージ取得コマンド
docker pull kaggle/python
リポジトリにイメージが登録されたことを確認する
docker images
動作確認
コンテナを作成し、動作確認を行う。
# コマンド例
docker run -it --gpus all -h "kgl_gpu1" --rm -p 80:8888 -v /mnt/c/work:/mnt/work --name kgl_gpu1 gcr.io/kaggle-gpu-images/python /bin/bash
# -i:対話形式で操作できるようにする
# -t:疑似tty端末を割り当てる
# --gpus:コンテナ内で利用するgpuデバイスを指定
# -h:コンテナのホスト名の指定
# --rm:終了時にコンテナを削除
# -p:ポートフォワードの設定(不要かも)。 <ホスト側ポート>:<コンテナ側ポート>
# -v:ディスクのマウント設定 <ホスト側ディレクトリ>:<コンテナ内マウントポイント>。複数指定も可能
# --name:起動するコンテナーに名前を付ける(省略すると、適当な名前がつくっぽい)
コンテナ内でnvidia-smiコマンドを実行し、gpuが認識されていることを確認する
おしまい。
参考
Windowsターミナル
- Windows ターミナルをインストールしてセットアップを開始する
https://learn.microsoft.com/ja-jp/windows/terminal/install
WSL2
- WSL を使用して Windows に Linux をインストールする方法
https://learn.microsoft.com/ja-jp/windows/wsl/install
WSLのUbuntuリソース設定
- WSL2/Ubuntu/Raspberry Piでのメモリ不足を解消する
https://zenn.dev/karaage0703/articles/d38e17bd6efbaa - WSL2の2つの設定ファイル「.wslconfig」と「wsl.conf」
https://ascii.jp/elem/000/004/044/4044122/2/
Docker
- Install Docker Engine on Ubuntu
https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository - よく使うDockerコマンド
https://qiita.com/noralife/items/18301143c20cc5172c56 - 【Docker】Dockerでホストのディレクトリをマウントする
https://qiita.com/Yarimizu14/items/52f4859027165a805630
NVIDIA Container Toolkit
-
Installing the NVIDIA Container Toolkit
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html -
NVIDIA Container Toolkit (NVIDIA Docker) は何をしてくれるか
https://qiita.com/tkusumi/items/f275f0737fb5b261a868
ほかにも参考にしたサイトがいくつかあったが、忘れてしまった。思い出したら追記するつもり。