QUADRO P5000のドライバーをFedora 25にインストールしてみた

by ysawa

接続したQUADRO p5000のドライバーを入れてみます。

GPUがちゃんと認識されているか

PCIソケットに挿さるデバイスの確認は、lspciというコマンドを使います。

# lspci -k | grep -A 2 -i "VGA"
01:00.0 VGA compatible controller: NVIDIA Corporation GP104GL [Quadro P5000] (rev a1)
    Subsystem: NVIDIA Corporation Device 11b2
    Kernel modules: nouveau
--
02:00.0 VGA compatible controller: NVIDIA Corporation GP104GL [Quadro P5000] (rev a1)
    Subsystem: NVIDIA Corporation Device 11b2
    Kernel modules: nouveau

このようにして簡単に確認できます。

ちゃんとQuadro P5000が2機挿さっていますね。

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

こいつらのドライバーをインストールしていきましょう。

http://www.nvidia.co.jp/Download/index.aspx?lang=jpからダウンロードします。

このとき、ダウンロードできたものを「NVIDIA-Linux-x86_64-375.26.run」として話を進めていきます。バージョン番号を置き換えながら、見ていってください。

chmod 777 NVIDIA-Linux-x86_64-375.26.run
./NVIDIA-Linux-x86_64-375.26.run

これだけ。と思ったのですが、違いました。もうちょっと問題は複雑なようです。

上記のコマンドNouveauが邪魔でインストールできないよとコケてしまいます。

しょうがないのでいったん、RPM Fusionから、xorg-x11-drv-nvidiaをインストールします。こいつをインストールして、パッケージインストーラから、芋づる式にNouveau関連を削除してもらいましょう。

RPMFusionがない人はリポジトリ設定しつつ、xorg-x11-drv-nvidiaをインストールです。

rpm -ivh https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-25.noarch.rpm
rpm -ivh https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-25.noarch.rpm
dnf install xorg-x11-drv-nvidia

続いて、カーネルをいじるためのライブラリを入れて、先程のコマンドです。やっと適切なドライバのインストールがこれでできますね。

dnf install kernel-devel kernel-headers gcc dkms acpid
./NVIDIA-Linux-x86_64-375.26.run

これで行けるはず。RPMFusionでいれられるドライバはバージョンが古いので、Nvidiaのサイトからきちーっとダウンロードして、インストールしないといかんみたいですね。

CUDA

CUDAのインストールは、これと一緒。

続いてTensor Flow

Tensor Flowは、いきなりpip install tensorflowしても、CPUオンリー版しか入りませんので注意してください。

やはり、Tensor Flowの本家の指示に従って、インストールしていくことになります。

このとき、Python、OSの種類やバージョンに合わせてインストールしてください。うちの場合は、以下のように実行しました。

export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0-cp35-cp35m-linux_x86_64.whl
pip install --upgrade $TF_BINARY_URL

テストは、

$ python
Python 3.5.2 (default, Dec 27 2016, 16:44:11)
[GCC 6.2.1 20160916 (Red Hat 6.2.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
>>> sess = tf.Session()
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: Quadro P5000
major: 6 minor: 1 memoryClockRate (GHz) 1.7335
pciBusID 0000:02:00.0
Total memory: 15.89GiB
Free memory: 15.78GiB
W tensorflow/stream_executor/cuda/cuda_driver.cc:590] creating context when one is currently active; existing: 0x28d1190
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 1 with properties:
name: Quadro P5000
major: 6 minor: 1 memoryClockRate (GHz) 1.7335
pciBusID 0000:01:00.0
Total memory: 15.89GiB
Free memory: 15.78GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 1
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 1:   Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Quadro P5000, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:1) -> (device: 1, name: Quadro P5000, pci bus id: 0000:01:00.0)

このようになります。

うまくドライバがインストールできていないと、

$ python
Python 3.5.2 (default, Dec 27 2016, 16:44:11)
[GCC 6.2.1 20160916 (Red Hat 6.2.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
>>> sess = tf.Session()
E tensorflow/stream_executor/cuda/cuda_driver.cc:509] failed call to cuInit: CUDA_ERROR_UNKNOWN
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:145] kernel driver does not appear to be running on this host (fedora02): /proc/driver/nvidia/version does not exist

こうなっちゃいます。

きちーっとGPUドライバ→CUDA→Tensor Flowの順番でインストールしないといけません。こういうのにハマると半日とか簡単に飛んでいくので厄介な案件ですね。やっとできてホッとしております。

この記事を読んだあとに

ysawa

エヌ次元株式会社代表取締役
東京工業大学工学部計算工学専攻卒業
符号理論の応用に関する研究
在学中よりフリーランスエンジニアとして活動
「持続可能な設計」を得意領域とする
会社設立後も設計からアプリ制作や
Webサイトのコーディングまでを幅広く担当
セキュリティスペシャリスト

 このブログについて

このブログは、プログラマやエンジニアのためになる情報を垂れ流しています。
ちょっと異端的なものも含まれているかもしれません。