先日、Ubuntu搭載PCのGPUをGeForce GTX1070からGeForce RTX2080 SUPERに換装しました
その時にGPU周りの環境をバージョンアップしたのですが、見事にハマりました
ドライバーのインストールを繰り返し、そのたびにエラーを吐かれアンインストールし、やっとの思いで成功したと思いCUDAをインストールしたと思ったらログインループに陥り、ドライバーもCUDAも消して再度インストールしてcuDNNを入れたと思ったらTensorFlowでGPUを認識できずに全部アンインストールして、また1からインストールしなおして、、、
ん゛あ゛あ゛あ゛あ゛あ゛ぁ゛ぁ゛あ゛あ゛!゛!゛!゛!゛
タイトルにもありますがマジでNVIDIAさんが嫌いになりました
何回インストールとアンインストールを繰り返したか… 思い出したくもないです(泣)
アホの逆恨みです、NVIDIAさんごめんなさい
リアルに解決まで3日くらいかかって、一時期は「もしかしてRTX 2080 SUPERってTensorFlowで使えない?10万で買ったGPUがインテリアになるの???」と思ってノリで購入した自分を呪ってました
そんなこんなでアホすぎてめちゃくちゃ苦労したので、被害者を少しでも減らすために今回学んだことを色々書き連ねてみます
できる限り細かいステップでまとめるので内容がかなり長くて見づらいですがご了承ください
一応、最初の方に簡潔にまとめを書いておくので結論だけ知りたい方はそちらをご覧ください
簡潔にまとめ
以下のバージョンで上手く行きました
- 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を入れましょう
その後、サブのPCの端末(Windowsはpowershell,Macはターミナル)で以下のコマンドで打ち込むとsshログインできます
ex) ssh hogehoge@192.1.1.1
ちなみにWindowsユーザーならTeraTermというアプリを使ってsshログインするのがオススメです
サブのPCからメインのPCへファイル転送手段を確保する
インストール時にいくつか必要なファイルがあります
基本的には最初に全部ダウンロードすればおっけーなんですが、バージョンを間違えるとインストール失敗します
その場合は正しいバージョンをダウンロードする必要がありますが、インストール中は基本的にCUIで操作するからブラウザを開くことができません
そんな時にサブのPCからファイル転送できれば必要なファイルをメインに送ることができます
Macや他のUnixユーザーは(恐らく)scpコマンドを使うことでファイル転送ができるはずです
Windowsユーザーは上でも紹介したTeraTermだとドラッグ&ドロップでファイル転送することができます
インストールの流れ
インストール前と最中でやることは以下の合計8つです
インストール前にやること
- (必要な人だけ)古いGPU周りの環境を消す
- 必要なファイルをダウンロードしてくる
- 予めパスの設定をしておく
- デフォルトのディスプレイドライバーを無効化する
インストール方法
- CUDAのインストール
- NVIDIAドライバーのインストール
- cuDNNのインストール
- TensorFlowのインストール
このインストールの手順なんですがCUDAが絶対一番最初です!!
というのも、CUDAのインストール方法やバージョンによって、NVIDIAのドライバ―も一緒にインストールされてしまうことがあるんですよね
もし先にNVIDIAのドライバ―を入れてしまうと、CUDAのインストールにドライバーが上書きされGPUが正しく動作しない恐れがあります
私もそれで一回ログインループ状態になったことがあります
もしかしたら別の要因でそうなってしまったかもしれませんが、一応CUDAから先にインストールするようにしておきましょう
インストール前にやること
(必要な人だけ)古いGPU周りの環境を消す
今まで使っていた古いドライバ―、CUDA、cuDNNをアンインストールします
古いバージョンのものが入っているかどうかは以下のコマンドで確認できます
dpkg -l | grep cuda
dpkg -l | grep libcudnn
それぞれ以下のコマンドでアンインストールすることができます
sudo apt-get --purge remove cuda*
sudo apt-get remove libcudnn*
必要なファイルをダウンロードしてくる
(後日更新します)
予めパスの設定をしておく
ホーム上にある.bash_aliaseにパスの設定を書き込みます
以下のコマンドで.bash_aliaseを編集します(無い場合は自動生成されます)
vimが使えない場合はviでもおっけーです。他にも自分の好きなエディターがあればそちらをお使いください。
.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を更新しましょう
デフォルトのディスプレイドライバーを無効化する
Ubuntuにはデフォルトでnouveauというディスプレイドライバーが入っています
これがNVIDIAのディスプレイドライバーと競合することがあるので先に無効化しておきます
まずはnouveauが動いているかどうか確認するために以下のコマンドを使います
これで色々出力されたらnouveauが有効になっています
次にblacklistを作ります
sudo vim blacklist-nouveau.conf
blacklistに以下を記述します
blacklist nouveau
options nouveau modeset=0
最後にblacklistの内容を反映させて再起動をすれば完了です
sudo reboot
最後にもう一度「lsmod | grep nouveau」で確認して何もでないようになってたら成功です
インストール方法
CUDAのインストール
まず初めに以下のコマンドでUbuntuのGUI(X serverという)を落として完全にCUIのみの状態にします
もしこれで落ちなかったら下のコマンドも試してみてください
この時、目の前にメインPCのデスクトップ画面を表示させながら、サブPCからSSHでログインしてコマンドを打つと結果が分かりやすいのでオススメです!パッと画面が消えます。
無事にX serverが落ちたことを確認したらインストールに移ります
CUDAインストール用のパッケージが保存してあるディレクトリに移動します
ダウンロードしてきたパッケージを展開します
sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
sudo apt-key adv –fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
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の表示があればインストール成功です
NVIDIAドライバーのインストール
CUDAインストール時と同様に、以下のコマンドでX serverを落としてCUIのみの状態にします
その後、NVIDIAのドライバ―用のファイルが保存されているディレクトリに移動し、以下のコマンドを入力します
sudo sh ./NVIDIA-Linux-x86_64-430.50.run
そうするとターミナルが以下のように切り替わります
ガッツリ「~failed!」と出ていますが、私は無視して「Continue installation」しても上手くいきました。気になる方はこのエラー内容でググってみてください!
この時、X serverがしっかり落ちてなかったり、他にもNVIDIAドライバーが入っているとこのようなエラーが出ます
インストールに進むと、カーネルをDKMSに登録するかどうか聞かれるのでYesにします
次に32bit版のライブラリもインストールするか聞かれますが、私は64bit版のUbuntuを使用しているのでNoにしました
その後ようやくインストールが始まります
最後にnvidia-xconfig utilityを自動的に使用するか(ちょっと日本語訳が怪しい…)を聞かれますが、これはYesに
しました
この画面が出てくればインストールは無事終了です
若干怪しいところが何か所かありましたが、今のところ変な問題は発生していないのでこの手順で大丈夫そうです
インストールが無事終了したら一度再起動します
再起動後、以下のコマンドが使えるようになればインストール完了です
cuDNNのインストール
用意したパッケージがあるディレクトリに移動します
3つあるパッケージを無印→dev→docの順番でインストールする
libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb
これでインストール完了です
cuDNNは以下のコマンドでバージョンを確認できます
また、cuDNNが配置されている場所は以下のコマンドで確認できます
TensorFlowのインストール
私はpipでPythonのライブラリを管理しているのでpipでインストールします
gpu版は以下のコマンドでインストールができます
もし低いバージョンを使用したい場合は以下のように使いたいバージョンを指定すればオッケーです
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月中に追記しますので今しばらくお待ちください
以上です
ご閲覧ありがとうございました
コメント