合理主義的グルメブログ

学生起業家の日常をツラツラと書いています。主に食事情報です。

NVIDIA Driverをアップデートして,nvidia-docker 2.0に以降する

古いGPUドライバーを使っていると,
時々わけわからん警告が発生します.

僕は以下のリンクのWarningに当たりました.

https://devtalk.nvidia.com/default/topic/1027077/container-pytorch/-quot-unexpected-end-of-proc-mounts-line-overlay-quot-on-p3-8xlarge/

解決策として,「バージョン396以降にしろよ」っと言っています.

っということで,ドライバーをアップデートしたのでメモしておきます.

対応バージョンを確認

以下のサイトから,自分のGPUに対応したドライバーのバージョンを確認します.

Download Drivers | NVIDIA

既存ドライバー確認

すでにドライバーがインストールされているか確認します.

$ dpkg -l | grep nvidia

僕自身,詳しくないので,勉強しながら行きます.
dpkgとはDebianのパッケージである.debファイルを扱うコマンドです.
これが先日買収されたRedhat系だとrpmコマンドになります.

-lオプションは,パッケージを一覧表示します.
今回は後ろに何も指定していないので,インストールされているパッケージが一覧表示されます.

その後,パイプ(|)でつないで,grepコマンドで,「nvidia」を含むパッケージだけを取り出しています.

古いドライバーの削除

もし,既存ドライバーが存在していた場合は,そいつを削除します.

$ sudo apt-get purge nvidia-*

なぜか僕の環境だと,正規表現が使えなかったので,こんな感じで全部手打ちしました.

$ sudo apt-get purge  -y nvidia-384 nvidia-390 nvidia-410 nvidia-docker nvidia-opencl-icd-384 nvidia-opencl-icd-390 nvidia-opencl-icd-410 nvidia-prime nvidia-setting

リポジトリの登録

Ubuntuのドライバーを提供しているリポジトリを登録します.

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update

ドライバーのインストール

事前に調べたバージョンを指定してインストールします.

$ sudo apt-get install -y nvidia-<最新バージョン>

再起動

$ sudo reboot

確認

nvidia-smiを使って,GPUが見えているか確認します.

$ nvidia-smi

nvidia-dockerのインストール

僕は機械学習用にGPUを利用しているので, CUDAはホスト環境には入れないで, すべて仮想環境で管理しています.

そのために,nvidia-dockerをインストール)します.
(dockerのインストールは,ここ

nvidia-docker 1.0 を削除

前に,nvidia-docker 1.0を使っていたので,最初にそいつを削除します.

$ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
$ sudo apt-get purge nvidia-docker

リポジトリの登録

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ 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

nvidia-docker 2.0 をインストール

$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd

pkillコマンドは,プロセス名を指定して,シグナルを送信するコマンドです.
詳しくは以下のリンクを参照くだいさい.

www.atmarkit.co.jp