Windows上でGPUやGUIが使用できるUbuntu環境をセットアップ!
機械学習で大変なことの一つにその環境構築があります. GPUとcudaのバージョンを合わせたり, 必要なpythonパッケージをインストールしなければなりません. それらをスクリプト一つで自動に実行してくれるのがdockerですが, docker内でGPUを利用できるのは現状Linuxのみになっています.
今回はWindows上でもLinux環境を構築し, dockerでGPUを利用できるようにするWindows Subsystem for LinuxやCuda on WSLを紹介します.
セットアップ
Windows上でのセットアップ
Windows Insider ProgramのDevチャネルに参加します. Windowsのタスクバー内の検索ボックスからWindows Insider Programを検索し, Devチャネルを選択します.
Visual Studio Codeのインストール
公式ページからVisual Studio Codeをインストールします.
Windows Subsystem for Linuxにアクセスするために, Visual Studio Codeの拡張機能"Remote Development"をインストールします.
またVisual Studio CodeからDockerコンテナにアクセスするために, 拡張機能"Docker"をインストールします.
Nvidia Driverのインストール
CUDA on WSL->Get CUDA Driver->GeForce DriverかQuadro Driverを選択し, インストールします.
Ubuntuのインストール
# install ubuntu
wsl --install -d Ubuntu-20.04
Ubuntu上でのセットアップ
Ubuntuのコンソールを立ち上げ, dockerをインストールします.
Dockerのインストール
# install docker
curl https://get.docker.com | sh
NVIDIA Container Toolkitのインストール
Docker内でGPUが利用できるようにWindows Insider Programをインストールしていきます.
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/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
sudoを付与することなく, dockerコマンドが使えるようにしておきます.
sudo usermod -aG docker $USER
sudo service docker restart
検証
TensorflowのDockerfileをpullし, runさせる.
docker pull tensorflow/tensorflow:2.5.0-gpu
docker run --gpus all -it tensorflow/tensorflow:2.5.0-gpu
Visual Studio Codeを立ち上げます.
code .
Visual Studio CodeのDockerタブからコンテナにアタッチします.
Docker内でGPUが認識されているか確認します.
# verify existence of GPU
python
# in python
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
# the response
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 5894596360552558978,
name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 4128702464
locality {
bus_id: 1
links {
}
}
incarnation: 6180404691262226554
physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 2060, pci bus id: 0000:01:00.0, compute capability: 7.5"]
上記のような結果が返れば, うまくGPUを認識できています.
おわりに
WindowsからUbuntuを使用できるので, 多くのユーザーが機械学習を実施する際にDockerの恩恵を受けることができます. まだ試してない人はやってみてください.