TensorFlowでRTX2080 SUPERを動かした時のまとめ【NVIDIAが嫌いになりました】

エンジニアのメモ帳
この記事は約15分で読めます。

先日、Ubuntu搭載PCのGPUをGeForce GTX1070からGeForce RTX2080 SUPERに換装しました

 

その時にGPU周りの環境をバージョンアップしたのですが、見事にハマりました

 

 

ドライバーのインストールを繰り返し、そのたびにエラーを吐かれアンインストールし、やっとの思いで成功したと思いCUDAをインストールしたと思ったらログインループに陥り、ドライバーもCUDAも消して再度インストールしてcuDNNを入れたと思ったらTensorFlowでGPUを認識できずに全部アンインストールして、また1からインストールしなおして、、、

 

ん゛あ゛あ゛あ゛あ゛あ゛ぁ゛ぁ゛あ゛あ゛!゛!゛!゛!゛

 

 

タイトルにもありますがマジでNVIDIAさんが嫌いになりました

 

何回インストールとアンインストールを繰り返したか… 思い出したくもないです(泣)

 

おしん
おしん

アホの逆恨みです、NVIDIAさんごめんなさい

 

 

リアルに解決まで3日くらいかかって、一時期は「もしかしてRTX 2080 SUPERってTensorFlowで使えない?10万で買ったGPUがインテリアになるの???」と思ってノリで購入した自分を呪ってました

 

そんなこんなでアホすぎてめちゃくちゃ苦労したので、被害者を少しでも減らすために今回学んだことを色々書き連ねてみます

 

できる限り細かいステップでまとめるので内容がかなり長くて見づらいですがご了承ください

 

一応、最初の方に簡潔にまとめを書いておくので結論だけ知りたい方はそちらをご覧ください

 

今回紹介するのはあくまでも2019年9月18日時点での話です。下記で紹介するインストール方法もバージョンアップによって変わる可能性がありますのでご留意ください。

 

簡潔にまとめ

以下のバージョンで上手く行きました

  • OS:Ubuntu 16.04.4 LTS
  • NVIDIAドライバー:430.50
  • CUDA:10.0
  • cuDNN:7.4.2
  • TensorFlow:1.14.0
  • Python:3.6

 

インストールの順番は「CUDA → NVIDIAドライバー → cuDNN → TensorFlow」がおすすめです

 

開発環境

今回使用したパソコンのスペックは以下の通りです

  • OS:Ubuntu 16.04.04 LTS(デスクトップはGnome)
  • CPU:Intel Core-i7 7700k
  • GPU:GeForce GTX 1070 → GeForce RTX 2080 SUPER

 

また、GPU換装前のGPU周りの環境は以下の通りです

  • NVIDIAドライバー:390.48
  • CUDA:8.0
  • cuDNN:6.0.21
  • TensorFlow:1.3.1
  • Python:3.6

 

TensorFlowのバージョンは流石に放置しすぎましたね(笑)

 

おしん
おしん

余談ですが、TensorFlowを1.3.1から1.14.1にアップデートしてDeepLearningのプログラムを動かしたらwarningが127行出ました(白目)

 

事前準備

メインPCのGPU環境を整える前に、個人的にやっておいた方が良いと思う事前準備が2つあります

 

1つ目は「サブのPCを用意しsshでリモートログインできる環境を整えておくこと」です

 

2つ目は「サブのPCからメインのPCへファイル転送手段を確保しておくこと」です

 

特に1つ目の重要度はかなり高めです◎

 

それぞれ理由を以下で説明するので、分かる人は飛ばしていただいて大丈夫です

 

サブのPCを用意しsshでリモートログインできる環境を整える

基本的にメインのUbuntuは電源が付いているだけで、サブのPCからsshでリモートログインしCUIで操作します

 

理由は2つです

  • ドライバー周りをインストールするときにGUIが動いているとエラーが起こる
  • ログインループやフリーズにあった際にメイン1台のみだと詰むことが多々ある

 

つまりVNCやリモートデスクトップでリモート操作するのもアウトです

 

 

sshでログインするためには、まずメインのUbuntuに以下のコマンドでopenssh-serverを入れましょう

sudo apt-get install opnessh-server

 

その後、サブのPCの端末(Windowsはpowershell,Macはターミナル)で以下のコマンドで打ち込むとsshログインできます

ssh ユーザー名@メインのIPアドレス
ex) ssh hogehoge@192.1.1.1

 

ちなみにWindowsユーザーならTeraTermというアプリを使ってsshログインするのがオススメです

 

サブのPCからメインのPCへファイル転送手段を確保する

インストール時にいくつか必要なファイルがあります

 

基本的には最初に全部ダウンロードすればおっけーなんですが、バージョンを間違えるとインストール失敗します

 

その場合は正しいバージョンをダウンロードする必要がありますが、インストール中は基本的にCUIで操作するからブラウザを開くことができません

 

そんな時にサブのPCからファイル転送できれば必要なファイルをメインに送ることができます

 

 

Macや他のUnixユーザーは(恐らく)scpコマンドを使うことでファイル転送ができるはずです

 

Windowsユーザーは上でも紹介したTeraTermだとドラッグ&ドロップでファイル転送することができます

 

インストールの流れ

インストール前と最中でやることは以下の合計8つです

 

インストール前にやること

  1. (必要な人だけ)古いGPU周りの環境を消す
  2. 必要なファイルをダウンロードしてくる
  3. 予めパスの設定をしておく
  4. デフォルトのディスプレイドライバーを無効化する

 

インストール方法

  1. CUDAのインストール
  2. NVIDIAドライバーのインストール
  3. cuDNNのインストール
  4. TensorFlowのインストール

 

このインストールの手順なんですがCUDAが絶対一番最初です!!

 

というのも、CUDAのインストール方法やバージョンによって、NVIDIAのドライバ―も一緒にインストールされてしまうことがあるんですよね

 

もし先にNVIDIAのドライバ―を入れてしまうと、CUDAのインストールにドライバーが上書きされGPUが正しく動作しない恐れがあります

 

おしん
おしん

私もそれで一回ログインループ状態になったことがあります

もしかしたら別の要因でそうなってしまったかもしれませんが、一応CUDAから先にインストールするようにしておきましょう

 

インストール前にやること

(必要な人だけ)古いGPU周りの環境を消す

今まで使っていた古いドライバ―、CUDA、cuDNNをアンインストールします

 

古いバージョンのものが入っているかどうかは以下のコマンドで確認できます

dpkg -l | grep nvidia
dpkg -l | grep cuda
dpkg -l | grep libcudnn

 

それぞれ以下のコマンドでアンインストールすることができます

sudo apt-get --purge remove nvidia*
sudo apt-get --purge remove cuda*
sudo apt-get remove libcudnn*
purgeの前はハイフン2つです。そのままコピペすると大きいハイフン1つになってしまうのでご注意ください。

 

必要なファイルをダウンロードしてくる

(後日更新します)

 

予めパスの設定をしておく

ホーム上にある.bash_aliaseにパスの設定を書き込みます

 

以下のコマンドで.bash_aliaseを編集します(無い場合は自動生成されます)

vim ~/.bash_aliase

 

おしん
おしん

vimが使えない場合はviでもおっけーです。他にも自分の好きなエディターがあればそちらをお使いください。

.bash_aliase内に以下のテキストを追加します

# .bash_aliase
export PATH=/usr/local/cuda/bin:$PATH
export CPATH=/usr/local/cuda/include:$CPATH
export LIBRARY_PATH=/usr/local/cuda/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH

これでインストール後は自動的にパスが反映されるようになります

 

すぐにパスを反映させたい場合は以下のコマンドで.bash_aliaseを更新しましょう

source ~/.bash_aliase

 

デフォルトのディスプレイドライバーを無効化する

Ubuntuにはデフォルトでnouveauというディスプレイドライバーが入っています

 

これがNVIDIAのディスプレイドライバーと競合することがあるので先に無効化しておきます

 

 

まずはnouveauが動いているかどうか確認するために以下のコマンドを使います

lsmod | grep nouveau

これで色々出力されたらnouveauが有効になっています

 

次にblacklistを作ります

cd /etc/modprove.d/
sudo vim blacklist-nouveau.conf

 

blacklistに以下を記述します

# blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

 

最後にblacklistの内容を反映させて再起動をすれば完了です

sudo update-initramfs -u
sudo reboot

 

最後にもう一度「lsmod | grep nouveau」で確認して何もでないようになってたら成功です

 

インストール方法

これから先の話はインストールに使うファイルがホーム上のDownloads内にあることが前提で説明します。また、インストールに使うファイル名は環境によって若干変わることがあるので、その際はご自身がダウンロードしたファイル名を正しく入力してください。

 

CUDAのインストール

まず初めに以下のコマンドでUbuntuのGUI(X serverという)を落として完全にCUIのみの状態にします

sudo service gdm stop

もしこれで落ちなかったら下のコマンドも試してみてください

sudo /etc/init.d/lightdm stop

 

おしん
おしん

この時、目の前にメインPCのデスクトップ画面を表示させながら、サブPCからSSHでログインしてコマンドを打つと結果が分かりやすいのでオススメです!パッと画面が消えます。

 

無事にX serverが落ちたことを確認したらインストールに移ります

 

CUDAインストール用のパッケージが保存してあるディレクトリに移動します

cd ~/Downloads

 

ダウンロードしてきたパッケージを展開します

# メインPCのOSのバージョンによってファイル名を微妙に変わるので注意
sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
リポジトリを追加します
# メインPCののOSのバージョンによってファイル名が変わるので注意
sudo apt-key adv –fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
リポジトリの状態を更新し、CUDAをインストールします
sudo apt-get update
sudo apt-get install cuda-toolkit-10-0

 

最後の「sudo apt-get install cuda-toolkit-10-0」を「sudo apt-get install cuda」としてしまうと、最新バージョンのCUDAが入ってしまうので注意が必要です

 

 

無事にインストールが終わったら「sudo reboot」で再起動します

 

起動後、以下のコマンドがCUDA10.0の表示があればインストール成功です

nvcc -V

 

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

CUDAインストール時と同様に、以下のコマンドでX serverを落としてCUIのみの状態にします

sudo service gdm stop

 

その後、NVIDIAのドライバ―用のファイルが保存されているディレクトリに移動し、以下のコマンドを入力します

cd ~/Downloads
sudo sh ./NVIDIA-Linux-x86_64-430.50.run

 

そうするとターミナルが以下のように切り替わります

 

おしん
おしん

ガッツリ「~failed!」と出ていますが、私は無視して「Continue installation」しても上手くいきました。気になる方はこのエラー内容でググってみてください!

 

 

この時、X serverがしっかり落ちてなかったり、他にもNVIDIAドライバーが入っているとこのようなエラーが出ます

X serverを落としていない時に出るエラー

 

 

NVIDIAドライバーがすでに入っている時のエラー

X serverは「sudo service gdm stop」で落とし、NVIDIAドライバーは「sudo apt-get --purge remove nvidia*」で消しましょう。

 

インストールに進むと、カーネルをDKMSに登録するかどうか聞かれるのでYesにします

 

次に32bit版のライブラリもインストールするか聞かれますが、私は64bit版のUbuntuを使用しているのでNoにしました

 

その後ようやくインストールが始まります

 

最後にnvidia-xconfig utilityを自動的に使用するか(ちょっと日本語訳が怪しい…)を聞かれますが、これはYesに

しました

 

この画面が出てくればインストールは無事終了です

 

おしん
おしん

若干怪しいところが何か所かありましたが、今のところ変な問題は発生していないのでこの手順で大丈夫そうです

 

インストールが無事終了したら一度再起動します

sudo reboot

 

再起動後、以下のコマンドが使えるようになればインストール完了です

nvidia-smi
nvidia-smiではNVIDIAドライバーとCUDAのバージョンが同時に確認できますが、2019年9月現在はCUDA10.0を入れていてもnvidia-smi上では10.1と表示されています。動作には問題なさそうなので無視します。

 

cuDNNのインストール

用意したパッケージがあるディレクトリに移動します

cd ~/Downloads

 

3つあるパッケージを無印→dev→docの順番でインストールする

libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb

 

これでインストール完了です

 

 

cuDNNは以下のコマンドでバージョンを確認できます

dpkg -l | grep libcudnn

また、cuDNNが配置されている場所は以下のコマンドで確認できます

 dpkg -L libcudnn7

 

TensorFlowのインストール

私はpipでPythonのライブラリを管理しているのでpipでインストールします

 

gpu版は以下のコマンドでインストールができます

pip install tensorflow-gpu

 

もし低いバージョンを使用したい場合は以下のように使いたいバージョンを指定すればオッケーです

pip install tensorflow-gpu==1.3.1

 

 

TensorFlow上でGPUが認識できているかどうかは、Pythonのプロンプト上で以下の関数を使うことで確認できます

from tensorflow.python.client import device_lib

print(device_lib.list_local_devices())

 

終わりに

今回はUbuntu16.04.4 LTSでTensorFlowを使ってRTX2080 SUPERを動かす方法を紹介しました

 

RTX2080 SUPERを使っている人がほとんど見当たらなかったので、私がインストールするときはかなり苦労しました

 

特にRTX2080 SUPERがNVIDIAドライバ―430にしか対応していないというのがかなりハマりポイントでした

 

そのせいでCUDA、cuDNN、TensorFlowのバージョンを調節する羽目に…泣

 

今後RTX2080 SUPERを使う方がいたらお気を付けください!!

 

また、時間の都合上、一部省略してしまった部分もありますが、9月中に追記しますので今しばらくお待ちください

 

 

以上です

 

ご閲覧ありがとうございました

 

コメント

タイトルとURLをコピーしました