[techonology]Ubuntu 16.04 LTSにnVIDIAドライバーを入れなおす
前回の記事でnVIDIAのドライバーが入ったUbuntu 16.04 LTSに突然ログイン出来なくなった件、nVIDIAのドライバーを削除してとりあえずログイン出来る様にした後、再度nVIDIAのドライバーを入れなおしました。
rc30-popo.hatenablog.com
最初は初めてnVIDIAドライバーを導入した時と同様にaptでppa:graphics-drivers/ppaにあるドライバーを入れなおそうしたのですが、何度やってもログインループに陥る。
カーネルのバージョンを最新にしたり、戻したり。nVIDIAのドライバーも最初に入れたnvidia-390や最近リポジトリに追加されたnvidia-415とか試すも、すべてダメ。
その度にCUIコンソールからnVIDIAドライバーをアンインストール。
結局、以下の記事に従い、nVIDIAの公式サイトからDLしたrunファイルを使いました。
nVIDIAのドライバーは一昨日くらいの時点で最新のNVIDIA-Linux-x86_64-418.56.runを使いました。
CUDAも入れなおしでcuda_9.2.148_396.37_linux.runと、パッチであるcuda_9.2.148.1_linux.runをダウンロード。
CUDAを9.2にしたのは前回と同じバージョンにしたかったからです。
- cudaのアンインストール
リポジトリから入れたcudaをアンインストール。$ sudo apt remove cuda-*
- /etc/apt/preferences.d/linux-kernel.prefの中身をコメントアウトし、kernelをapt upgradeで最新版にバージョンアップ
下記の通り、4.4.0.143.151になりました。$ aptitude show linux-generic パッケージ: linux-generic 状態: インストール済み 自動的にインストールされた: いいえ バージョン: 4.4.0.143.151 優先度: 任意 セクション: kernel メンテナ: Ubuntu Kernel Team <kernel-team@lists.ubuntu.com> アーキテクチャ: amd64 展開サイズ: 14.3 k 依存: linux-image-generic (= 4.4.0.143.151), linux-headers-generic (= 4.4.0.143.151) 競合: linux-generic:i386 説明: Complete Generic Linux kernel and headers This package will always depend on the latest complete generic Linux kernel and headers.
- /etc/apt/preferences.d/linux-kernel.prefを再編集してkernelバージョンを固定。
編集後はこんな感じです。dkmsを使ってnVIDIAドライバーをインストールするとkernel更新時も自動的にドライバーを再組込するらしいのですが、怖いのでkernelは固定しちゃいます。
kernel更新したい時は、一度nVIDIAドライバーとCUDAをアンインストールして、kernel更新後に再インストールするつもり。$ cat /etc/apt/preferences.d/linux-kernel.pref Package: linux-generic Pin: version 4.4.0.143.151 Pin-Priority: 1001 Package: linux-headers-generic Pin: version 4.4.0.143.151 Pin-Priority: 1001 Package: linux-image-generic Pin: version 4.4.0.143.151 Pin-Priority: 1001
- X Windowが動いている場合は停止
CTRL+ALT+F1で仮想コンソールに入り、下記を実行。$ sudo service lightdm stop $ sudo pkill Xorg
- CUDAをインストール
以下の2コマンドを順番に実行。$ sudo sh cuda_9.2.148_396.37_linux.run --silent --toolkit --no-opengl-libs $ sudo sh cuda_9.2.148.1_linux.run --silent --accept-eula
- nVIDIAドライバーをインストール
$ sudo sh NVIDIA-Linux-x86_64-418.56.run --silent --no-opengl-files --no-libglx-indirect --dkms
(良く理解できていない)
これで
$ sudo service lightdm start
でX Windows起動してもログインループに入りません。
nvidia-smiコマンドを実行すると下記の様な感じになります。CUDA Versionが10.1となっているのが謎ですが、以前に作ったchainer+cupyでディープラーニングやるスクリプトがちゃんと動作しました。
$ nvidia-smi Wed Mar 27 23:27:03 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.56 Driver Version: 418.56 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 1050 Off | 00000000:01:00.0 Off | N/A | | N/A 44C P0 N/A / N/A | 0MiB / 2000MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
python + chainer + cupyでMNIST回している最中にnvidia-smiコマンドを叩くと下記の様にGPU内でpythonという名前のプロセスが走っているのが判ります。
$ nvidia-smi Wed Mar 27 23:30:12 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.56 Driver Version: 418.56 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 1050 Off | 00000000:01:00.0 Off | N/A | | N/A 50C P0 N/A / N/A | 437MiB / 2000MiB | 46% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 4914 C python 427MiB | +-----------------------------------------------------------------------------+