クロの制作日記

Ubuntu16.04でのGPU関連の設定(Nvidiaドライバ・CUDA・cuDNN)

はじめに

前回の記事でつよつよPCにUbuntu16.04をインストールして、インターネット周りの設定などをしました。
www.kuroshum.com

今回の記事では、Ubuntu16.04をインストールしたPCにNvidiaドライバ・CUDA・cuDNNをインストールする方法を紹介します。

準備

update

取り敢えず何か新しく環境構築するときは環境を新しくしときましょう。

sudo apt-get update

GItのインストール

今後何かと必要になってくるのでgitはインストールしときましょう。

sudo apt-get install git

VImのインストール

ちょこちょこPATHの設定とかでファイルをいじるのでエディタをインストールしておきましょう。私はVim派なのでVimをインストールします。まあプリインストールされているgeditでも問題ないとは思います。

sudo apt-get install vim

Anacondaのインストール

最終的にtensorflow-gpuを用いてGPUの設定が完了したかを確認しますし、このサイト見ている人は恐らくpythonを使って色々すると思うのでAnacondaをインストールしておきましょう。

ダウンロード

GUI環境がある人は以下のサイトからダウンロード(最新版のみ)
www.anaconda.com

少し古いバージョンをダウンロードしたい場合は、Anacondaの過去のバージョンアーカイブがありますので、そこからURLを見つけてください。

注意

windowslinuxMac、32bit、64bitが混在していますのでダウンロードする際は気をつけてください。
repo.anaconda.com

GUI環境がない人は以下のようにwgetコマンドを使ってこんな感じでダウンロードしましょう。
取り敢えず、以下のコマンドを実行すれば最新(2020/6/18)のバージョンをダウンロードできます。

wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
インストール

ダウンロードが完了したら、「Anaconda3-2020.02-Linux-x86_64.sh」みたいなファイルがあると思うので、そのファイルがあるディレクトリで、以下のコマンドを入力

sh ./Anaconda3-2020.02-Linux-x86_64.sh

すると、まず利用規約を読まされます。Enterをひたすら押すと、利用規約に同意しますか?と聞かれますので、「Yes」と入力しましょう。

そのあとに、インストールしますか?的な事を聞かれるのでEnterを押してください。

最後に、Anaconda初期化してもよい?みたいなことを聞かれるので「Yes」と入力しましょう。

こんな感じで、所々でなんか聞かれたりしますが、基本的には「yes」かEnterキーを押せば大丈夫です。

インストールが終わったら、今のTerminalはそのままで、新しくTerminalを起動して、「python」と入力しましょう。2行目あたりにAnacondaという文字があればインストール成功です。

もし、Anacondaの文字が無ければインストールを行ったTerminalを確認してエラーがないか確認してください。何かしらのエラーがある場合は、ググって対処法を見つけましょう(放任)。

エラーが出ていない場合は、恐らくPATHの設定を飛ばしてしまっている可能性が高いので、以下のサイトを参考にPATHを設定しましょう。
qiita.com

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

やっとこさGPU関連の設定を始められます。

Nvidiaドライバは自分のGPUに対応したものをインストールします。もし、適当に入れてしまうと、画面が表示されなくなったり、ログインループという恐ろしい現象に見舞われますので気を付けて作業してください。

Nvidiaドライバのバージョン確認

後でインストールするCUDAのバージョンはNvidiaドライバのバージョンに依存します。さらに、最終的に使用したいTensorflow-gpuはCUDAとcuDNNのバージョンに依存します。

なので、まずはインストールしたいTensorflow-gpuのバージョンを確認し、適切なCUDAとcuDNNのバージョンをメモしておきましょう。私はTensorflow1.14.0が使いたいので、CUDA10.0、cuDNN7.4が必要となります。
www.tensorflow.org


そして、CUDAのバージョンに対応したNvidiaドライバのバージョンを以下のサイトの「Table 2. CUDA Toolkit and Compatible Driver Versions」を確認します。CUDA10.0は「410.48」以上のバージョンであれば大丈夫なようです。
docs.nvidia.com

次に、自分のGPUに対応したNvidiaドライバのバージョンを確認しましょう。以下のサイトでGPUの種類を入力すれば、最適なバージョンを掲示してくれます。
www.nvidia.co.jp

また、以下のコマンドで推奨するドライバを掲示してくれます。

ubuntu-drivers devices

実際には4つほどnvidiaドライバのバージョンが表示されますが、recommendと書いてあるものをインストールするのが無難かと思います。私の環境ではnvidia-430が推奨されていました。

driver : nvidia-430 - third-party recommend

Nvidiaドライバ「430」は「418」以上のバージョンですので、このバージョンをインストールして問題なさそうです。

今回の場合、私の環境では以下のバージョンをインストールしていきます。

  • Nvidiaドライバ:430
  • CUDA:10.0
  • cuDNN :7.4
  • tensorflow-gpu :14.0

nouveauグラフィックスドライバの無効化

Nvidiaドライバをインストールする前にnouveauグラフィックスドライバを無効化する必要があります。詳しいことはわかりませんが、nvidiaドライバのインストールをこいつが邪魔をしてしまうようです。

まずはnouveauの存在を確認します。

lsmod | grep -i nouveau

何かしら表示されたらnouveauグラフィックスドライバが入っているので、無効化の作業を行います。

以下のコマンドを入力してみましょう。

sudo sh -c "cat << ETX > /etc/modprobe.d/blacklist-nouveau.conf

するとTerminal上に「>」が表示されると思いますので、以下の文字列を1行づつ入力していってください。一番最後の行を入力すると終了します。

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
ETX" && cat /etc/modprobe.d/blacklist-nouveau.conf

そして、次に以下のコマンドを入力し

sudo sh -c "echo 'options nouveau modeset=0' > /etc/modprobe.d/nouveau-kms.conf" && cat /etc/modprobe.d/nouveau-kms.conf

設定を反映させて再起動します

sudo update-initramfs -u
sudo reboot
ネットワーク接続が切れる

なぜか、私の場合、再起動したあとにネットワークの接続が切れました...。その場合は、前回の記事の、「make」~「sudo update-initramfs -u」までを実行してから再起動してみてください。私はそれで治りました。

ビルドツールのインストール

sudo apt-get install build-essential

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

Nvidiaドライバのインストールは以下のコマンドを実行すればおkです。

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt-get install nvidia-430

ちなみに、ここで、Nvidiaドライバの「440」バージョンをインストールしようとするとエラーを吐かれました。「ubuntu-drivers devices」で表示されているバージョンしかインストールできないっぽい??

E: パッケージ nvidia-440が見つかりません

インストールが終わったら、再起動して以下のコマンドを入力してみましょう。GPUのメモリの使用量が表示された勝ちです。

nvidia-smi

Cudaのインストール

以下のサイトからインストールしたいCUDAのバージョンをクリックしましょう。私の場合はCUDA10.0なので、「CUDA Toolkit 10.0」をクリック。
developer.nvidia.com

すると「Select Target Platform」が表示されるので、以下のように選択していってください。

  • Operating System:Linux
  • Architecture:x86_64
  • Distribution:Ubuntu
  • Version:16.04
  • installer Type:deb (network)

選択し終わると、少し下にDownloadできるボタンが出てきますので、それをクリックしどっかしらのディレクトリに保存しておきましょう。

そのファイルを保存したディレクトリに移動しておきます。

後は、そのサイトに書いてある手順でコマンドを入力していきます。

sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb

もしかすると、このコマンドを入力すると以下のように表示されるかもしれません

The public CUDA GPG key does not appear to be installed.
To install the key, run this command:
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub

その場合は、表示されている内容のように以下のコマンドを入力してから、「sudo dpkg~」のコマンドを入力してください

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub

ここで、httpsがどうとかというエラーが出ますが、無視しても問題ないようです。

sudo apt-get update

ここで、サイトの方では、「sudo apt-get install cuda」なのですが、このコマンドを入力すると最新のNvidiaドライバがインストールされて、ログインループに陥る場合がありますので、必ず以下のようにバージョンを指定してあげてください。

sudo apt-get install cuda-toolkit-10-0

これで、CUDAのインストールは完了しましたが、PATHの設定を最後にしておきましょう。

vim ~/.bashrc

「.bashrc」の一番最後の行に以下のPATHを入力

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

「.bashrc」を以下のコマンドで読み込み、

source ~/.bashrc

以下のコマンドを入力して、CUDAのバージョンが表示されれば勝利です。

nvcc -V

cuDNN

cuDNNのダウンロードは以下のサイトから行ってください。なぜか会員登録みたいなのをさせられるので登録し、ログインしましょう。
developer.nvidia.com

利用規約みたいなのを同意すると、最新のバージョンのダウンロードページが表示されます。私は少し古いバージョンをダウンロードしたいので、下にちっちゃく書いてある「Archived cuDNN Releases」をクリックします。

すると、アーカイブがいっぱい出てきますので、「Download cuDNN v7.4.1 [Nov 8, 2018]」for CUDA 10.0」を探し出しクリック。

またもやいっぱい表示されますが、今回ダウンロードするのは、以下の3つです。

  • cuDNN Runtime Library for Ubuntu 16.04 [Deb]
  • cuDNN Developer Library for Ubuntu 16.04 [Deb]
  • cuDNN Code Samples and User Guide for Ubuntu 16.04 [Deb]

全てダウンロードし終わったら、そのダウンロードしたファイルがあるディレクトリに移動し、以下のコマンドをこの順番で実行してください。なぜか、この順番を破るとうまくいかないらしい。

sudo dpkg -i libcudnn7_7.4.1.5-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.4.1.5-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.4.1.5-1+cuda10.0_amd64.deb

これでcuDNNのインストールも完了したはず。確認のために以下のコマンドたちを実行してみましょう。

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2

cuDNNのバージョンが表示されるはずです。表示されないですか?じゃあこのコマンドを実行してみましょう。

ls -l /usr/local/cuda/lib64/libcudnn*

これでも表示されないですか?じゃあこのコマンドを実行(ry

dpkg -l | grep "cudnn"

多分、どれかのコマンドを実行すればcuDNNのバージョンっぽいものが表示されるはずです。

tensorflow-gpuのインストール

tensorflow-gpuのインストールは今までの作業と比べるとめちゃんこ楽です。以下のコマンドを実行すればインストールされます。pipは神。

pip install tensorflow-gpu==2.0.0

あとは、「python」コマンドを実行してPythonを起動して以下のコマンドを実行すればGPUが認識できているかを確認できます。

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

GPUの名前(Geforece RTX2080 tiとか)が表示されれば我々の勝利です。

さいごに

今回の記事では、Ubuntu16.04をインストールしたPCにNvidiaドライバ・CUDA・cuDNNをインストールする方法を紹介しました。

前回の記事では、色々なエラーがでて怒の感情に支配されてしまいましたが、今回はそこまでエラーがでなくて良かったです。ただ、GPU関連の設定は、一つ間違えるとPCが起動しなくなったり、ログインループに陥るという恐怖と常に隣り合わせなので、精神が削られますね。

多分この記事の通りにやれば問題なかったはずです。もし何か私が遭遇していないエラーとか不具合が出たらコメントしていただけたら嬉しいです。