【環境構築】Ubuntu 20.04にDocker + GPU環境(nvidia-container-toolkit)を構築してみた
はじめに
こんにちは、がんがんです。
昨年の冬に、オプティムさんのイベントにてLTを行いました。
gangannikki.hatenadiary.jp
その際に、GPUインフラを構築するインフラおじさんに就任してしまったお話をさせていただきました。
就活やウイルスの影響で延期されていたインフラおじさん化計画が先日実行フェーズへと移行されました(せざるをえなかった)。
今回はUbuntu 20.04 + Docker + nvidia-container-toolkitを用いてGPUインフラを構築するまでのことについて備忘録としてまとめておこうと思います。
追記:2020/09/29
docker-compose + GPUに関する記事を末尾に追加しました。
目次
参考
情報が乱立しているみたいで、最終的に頼りにしたのは公式のドキュメントでした。
参考記事を見る感じだと、nvidia-container-toolkit = nvidia-docker2
って認識で良さそうでした。
しかし、2020 年 9 月の更新により、とてもシンプルになりました。
今は単に nvidia-docker2 パッケージをインストールすれば OK です。
公式ドキュメント
参考記事
Nvidiaの方がnvidia-dockerに関するまとめをされていて非常に参考になりました。
medium.com
環境
- Ubuntu:20.04
- dokcer:19.03.12
nvidia-driverのバージョンについては対応するものを調べてください。
https://www.nvidia.com/Download/index.aspx?lang=en-us
Dockerのセットアップ
まずは公式の手順に沿ってDockerのセットアップを行います。
$ curl https://get.docker.com | sh $ sudo systemctl start docker && sudo systemctl enable docker $ 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
nvidia-container-toolkitのセットアップ
次に、nvidia-docker2をインストールしていきます。Qiitaなどの記事ではnvidia-docker2は非推奨というような記事も見かけましたが、この数ヶ月でいろいろとアプデがあったみたいですね。
$ sudo apt-get update && sudo apt-get install -y nvidia-docker2 $ sudo systemctl restart docker
nvidia/cuda:10.2-baseイメージでの確認
試しに、nvidia-smiコマンドを使って実験を行ってみます。通常版との変化は--gpusオプションが追加されたことです。
下記コマンドを実行してGPUの状況がきちんと表示されればOKです(自身の所有マシンではないため一部省略しています)。
$ sudo docker run --rm --gpus all nvidia/cuda:10.2-base nvidia-smi Sat Sep 26 10:10:03 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.100 Driver Version: 440.100 CUDA Version: 10.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| ...(略)
ubuntu:20.04イメージでの確認
nvidia/cudaのイメージでしか使えないのかな?と思い、ubunt:20.04のイメージでも同様の実験を行いました。
$ sudo docker run --rm --gpus all ubuntu:20.04 nvidia-smi Sat Sep 26 10:13:00 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.100 Driver Version: 440.100 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| ...(略)
さっきとは違って、CUDA VersionがN/Aになっていますが、Ubuntuコンテナからもきちんと認識できているようです。
おわりに
今回はUbuntu:20.04上にDocekr + GPU環境を構築してきました。
Qiitaなどの記事では、情報が混在していたので公式ドキュメント一発で出来るようになって非常にありがたいです。
次回は、上記に環境にdocker-composeをインストールして、docker-compose + GPU環境を構築した話をまとめておこうと思います。
また、Ubuntuでの構築を行う前に、実はWindows上での構築をトライしていました。Windows上では非常に苦戦して断念しましたので、失敗供養としてそちらも後ほどまとめようと思います。
gangannikki.hatenadiary.jp