概要
前回作成した機械学習用サーバーに、
をインストールし、Dockerコンテナ上でnvidia-smi
が動くまでを目指します。
世間にたくさんこういう情報は転がっているものの、やはり自分の環境で実行してみると様々なエラーに遭遇するものですので、自分もとりあえず遭遇したものは書き留めておこうという次第です。
Docker19.03よりネイティブでNvidia GPUへの対応が行われたようですが、今回はDeepLabCutというnvidia-docker2で動くソフトを使いたいので敢えて少し古めの構成にします。
※追記
もし新しい環境でGPU on DockerできればOK!という場合は、次の記事が参考になるかと思います。
CentOSのインストール
CentOSのホームページより、Older Versions→7のMirrors→好きなミラーからisoをダウンロード。 今回はMinimalイメージを選択しました。
Windows の方はRufusのようなライブUSB作成ツールを使って ダウンロードしたISOから起動ディスクを作成します。
インストール画面はGUIがあるので普通にインストールいただければ大丈夫かと思います。
下拵え
CentOS7のインストールが完了したら、いよいよNvidia Driverのインストール……の前に、ネットに繋ぐ準備。
久しぶりに実機のLinuxを作ったので、LANケーブルつないだだけでネットに繋がらないのに戸惑いましたが、こちらのページが非常に参考になりました。
# 次のコマンドでネットワークアダプタの名前を確認 [centos@]$ ip addr show # 以下のコマンドではenp2s0のところを適宜自分のネットワークアダプタ名に書き換えてください [centos@]$ sudo nmcli con add type ethernet con-name enp2s0 ifname enp2s0 [centos@]$ sudo nmcli con mod enp2s0 connection.autoconnect yes [centos@]$ sudo nmcli con mod enp2s0 ipv4.method auto [centos@]$ sudo nmcli con down enp2s0 [centos@]$ sudo nmcli con up enp2s0
これでDHCPで自動的にIPが振られ、ネットが繋がるようになります。
自分はここから先TeratermでSSHつないでメインPCから操作します。同じようにやる方はもう一回ip addr show
してプライベートIP を確認しておきましょう。
そしてネットに繋がってyumが使えるようになるので、ここから必要になるパッケージ類のインストールをします。
# とりあえずアップデート [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo yum update # curlよりwgetが好きなので入れときます [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo yum install wget # nvidia-driver関連が手に入るレポジトリ [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo yum install epel-release # これら3点は依存関係で勝手にインストールされることもあるが、入れとくのが安パイ [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo yum install kernel-devel kernel-headers gcc
ちなみに最後のKernel系が入らない場合、/etc/yum.conf
にexclude=kernel*
とか入ってるかもしれないです。自分はそれでハマったことがあります。
一時的にコメントアウトしてアップデート終わったらまた戻しておきましょう。勝手にkernel関連のアップデートが行われるのを防げるので、ポリシーに合わせて記述しときましょう。
とりあえずここまでで準備完了です!
CUDA10.0→nvidia-driverのインストール
※この辺の依存関係がはっきりしてないのですが、最近3回位1からCUDAのセットアップをしてきて最終的にこの順番で入れるとうまくいく感じです。
CUDA10.0いれた状態でCUDA-driverとnvidia-driverは入っているのですが、どうしてもこの手順を踏まないと依存関係の解決がうまく行かないのか、nvidia-smiが起動しないというトラブルに見舞われているので、同じものを何度も入れ直したりアップデートしたりするのは正直気持ちが悪いのですが暫定的に書いておきます。
いつかすんなり行く方法が見つかればまた書き直したいと思います※
参考文献は以下の通り。
CentOS7にDocker CE / nvidia-dockerのインストール | OpenCV画像解析入門
Linux インスタンスへの NVIDIA ドライバーのインストール - Amazon Elastic Compute Cloud
# Linuxで標準に入ってしまっているnouveauというドライバーを無効化するための設定 [centos@ip-xxx-xxx-xxx-xxx ~]$ echo 'blacklist nouveau' >> /etc/modprobe.d/modprobe.conf [centos@ip-xxx-xxx-xxx-xxx ~]$ echo 'blacklist nouveau' >> /etc/modprobe.d/nouveau_blacklist.conf # 一回ここで再起動 [centos@ip-xxx-xxx-xxx-xxx ~]$ reboot now # まずCUDAのインストール。 # インストールするrpmは[https://developer.nvidia.com/cuda-toolkit-archive]から探す。 [centos@ip-xxx-xxx-xxx-xxx ~]$ wget https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda-repo-rhel7-10-0-local-10.0.130-410.48-1.0-1.x86_64 [centos@ip-xxx-xxx-xxx-xxx ~]$ ls cuda-repo-rhel7-10-0-local-10.0.130-410.48-1.0-1.x86_64 [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo rpm -ivh cuda-repo-rhel7-10-0-local-10.0.130-410..48-1.0-1.x86_64.rpm --nosignature [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo yum clean all [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo yum install cuda-10-0 # 次にNvidia Driverのインストール。 # [https://www.nvidia.com/Download/index.aspx?lang=en-us]ここから探します。下のURLはTesla用。 [centos@ip-xxx-xxx-xxx-xxx ~]$ wget http://us.download.nvidia.com/tesla/410.129/NVIDIA-Linux-x86_64-410.129-diagnostic.run [centos@ip-xxx-xxx-xxx-xxx ~]$ ls cuda-repo-rhel7-10-0-local-10.0.130-410.48-1.0-1.x86_64.rpm nvidia-diag-driver-local-repo-rhel7-410.129-1.0-1.x86_64.rpm NVIDIA-Linux-x86_64-410.129-diagnostic.run # ”すでにインストールしてるけど続ける?”とか出てくるけどYESで。DKMSがうんたらはYES、32bit用のインストールはNOで。 [centos@ip-xxx-xxx-xxx-xxx ~]$ sudo sh NVIDIA-Linux-x86_64-410.129-diagnostic.run ---no-drm
ここまで終わって再起動すれば、nvidia-smiが効くようになっているはず!おつかれさまでした!
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.129 Driver Version: 410.129 CUDA Version: 10.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K40m Off | 00000000:01:00.0 Off | 0 | | N/A 32C P0 32W / 235W | 0MiB / 11441MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
SELinuxの無効化