Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

WSL2,docker,Cudaで比較的ハマらないメモ

動機

Windows環境でDockerのCudaコンテナを操作の練習をしたかった。
だけどいろんな所の手順書が古すぎて対応できずにしかもGPUの認識すら出来なかった為メモしておく。
(・・・[[gpus]]ってエラー文もう見飽きた)

更新履歴

2020/09/12 : 一部のシェルコマンドでsudoの入れ忘れ対応
2020/10/17 : 「Windowsの機能を有効化」にするコマンドの修正・追加。

動作環境(Insider Preview前)

  • Windows 10 Pro 1903ぐらいだったかな
  • Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz 2.81 GHz
  • NVIDIA GeForce RTX2060
  • Dockerは入っているバージョンは忘れた。

Windows手順

以下の各項目を行う。

「Windows の機能の有効化または無効化」から以下の項目をチェックが入っている事を確認する。

image.png

  • 「Hyper-V」
  • 「Windows Subsystem for Linux」
  • 「仮想マシンプラットフォーム」

コマンドで「Windowsの機能を有効化」を行う場合

# 「Hyper-V」の有効化
>dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestart

# 「Windows Subsystem for Linux」の有効化
>dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 「仮想マシンプラットフォームのオプションコンポーネント」を有効化
>dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

wslのデフォルトバージョンを変更

なんかメッセージ来るが気にしなくていい。

>wsl --set-default-version 2

windows 10 Insider Previewへアップデート

  1. スタートメニューから「設定」を選択
  2. 「更新とセキュリティ」を選択
  3. 「Windows Insider Program」を選択
  4. 「Devチャネル」を選択 image.png

wslのアップデート

  1. 「Windows Update の設定」から「詳細オプション」を選択。
  2. 「Windowsの更新時にほかのMicrosoft製品の更新プログラムを受け取る」を有効化。
  3. 「Windows Update の設定」から「更新プログラムのチェック」を行いアップデート。
  4. 再起動後、以下のコマンドを実行。 image.png
>wsl --update

WSL用のNvidiaのドライバーをインストール

一応wslをシャットダウンする

>wsl --shutdown

Ubuntuをインストール

  1. マイクロソフト・ストアを開く
  2. 検索からUbuntuを検索
  3. お好みのバージョンをインストールする(今回は20.04にした) image.png

WindowsのDocker設定

WSL2の項目がチェックされていると色々とうまくUbuntu上でうまく動作してくれない為外す。
image.png

Ubuntu手順(WSL2上)

ubuntuの初期起動を済ませる。
(ユーザー名を決めるときにそのままウィンドウを閉じるとルートになるのかな?)

CUDAドライバーをインストール

以下のスクリプトを任意の場所に保存し実行する。

#!/bin/sh

# gccとかのインストール
sudo apt -y install build-essential

# 以下のコードはCUDAの公式インストールを行う
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-0-local/7fa2af80.pub
sudo apt-get update -y
sudo apt-get upgrade -y

# ここだけ cuda-toolkit を選択する。
sudo apt-get install -y cuda-toolkit-11-0

# 正直ここはいるのかよくわからない。コマンド成功していないみたいなのでいらないかも。(要検証)
echo "set -x PATH /usr/local/cuda-11.0/bin \$PATH" >> .config/fish/config.fish
echo "set -x LD_LIBRARY_PATH /usr/local/cuda-11.0/lib64 \$LD_LIBRARY_PATH" >> .config/fish/config.fish
source .config/fish/config.fish

CUDAの動作確認

以下のコマンドを入力し問題なく動作すればほぼ完了みたいなもの。(これすら出来なかった;;)

cd /usr/local/cuda/samples/4_Finance/BlackScholes
sudo make
./BlackScholes

dockerのインストール

以下のスクリプトを実行

#!/bin/sh
# ここでdockerをインストールする
curl https://get.docker.com | sh

# マウントのエラーが出た為以下のコードで対応した。
sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd

nvidia-container-toolkitのインストール

dockerの--gpusのオプション機能のやつかな?
以下のスクリプトを実行.

#!/bin/sh

sudo apt update
sudo apt upgrade

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

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo service docker restart

動作確認

以下のコマンドを実行しdockerにnvidiaのコンテナが実行できるかを検証する

>sudo docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

そうすると以下のような結果が得られる。

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
MapSMtoCores for SM 7.5 is undefined.  Default to use 64 Cores/SM
GPU Device 0: "GeForce RTX 2060" with compute capability 7.5

> Compute 7.5 CUDA device: [GeForce RTX 2060]
30720 bodies, total time for 10 iterations: 51.151 ms
= 184.497 billion interactions per second
= 3689.949 single-precision GFLOP/s at 20 flops per interaction

所感

WSLからGPUを利用したdockerを動かくすために古い記事のせいでかなり手こずってしまったし色々不安定な印象でした。
これかもっと環境構築しやすいようにしてほしいのとUbuntuにCudaドライバーいるなんて知らんかったけどそんな説明あったかな?とりあえずUbuntu上のDockerでGPUを動かくすことができたので良かったが、WindowsのDockerとリンクして動くみたいだけどそこも余裕があったら手を出したいと思っている今日この頃。

n-jun-k2
Docker・K8sを仕事上で使うようになり色々とインフラ系の事を学び始めた。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away