【Ubuntu】TensorflowやKerasをGPUで動かす方法

 

こんにちは。のっくん(@yamagablog)です。

 

最近はAIブームですので、ディープラーニングをやってみたい!って人が増えています。

 

ディープラーニングは普通にパソコンでも動きますが、めちゃくちゃ時間がかかります

 

そこでNVIDIA社などが出しているGPUという部品を使うことで処理を高速化します。

 

GPUを使うことで処理時間が10倍ほど速くなりますので、例えばCPUで240分かかっていたディープラーニングを24分で終わらせることができます。

 

ディープラーニングを動かすにはPythonのKerasやTensorFlowなどのライブラリを使います。ライブラリは、ディープラーニングを動かすために必要な機能が全部入ったソフトウェアのことです。

 

ライブラリを使うことでディープラーニングの細かな仕組みを全く知らなくても誰でもディープラーニングを動かすことができます。

 

この記事では、GPUを使ってディープラーニングするための方法を説明していきたいと思います!

 

私の実行環境は以下の通りです。

  • Ubuntu18.04 Server
  • GeForce GTX1060

 

ちなみに私がGPUのPCを買ったお話は以下の記事にあります。

ドスパラでGPU搭載PCを買ってみた

 

スポンサーリンク

 

はじめに

 

初心者にとってはディープラーニングを動かすまでのUbuntuの設定(ドライバやcudaを入れる)が結構大変です。

 

というのも日本語でググっても適切な記事が出てこないからです。私は途中でもうGPU動かさずに諦めようかと思いました。

 

私が独学でGPU上でディープラーニングを動かすようになるまで2週間以上かかりました。

 

まぁ色々大変でしたが、ようやく動くようになったのでこの記事にまとめておきます。(要点さえ押さえておけば簡単です。)

 

とは言っても最初にトライする人にとっては何をして良いのかも分からないと思うので、これからやることを図にしてみました。

 

 

ディープラーニングをGPUで動かすためには以下の3つのソフトウェアが必要になります。

 

  • NVIDIAのドライバ
  • CUDA(CUDA Toolkit)
  • CuDNN

 

ネットではCUDAToolkitやCuDNNをUbuntuにインストールする方法がたくさん紹介されています。

しかしこの方法は初心者には結構難易度が高いので、この記事ではAnacondaを使ってインストールする方法をご紹介します。

Anacondaなら仮想環境なので失敗しても作り直せば良いので安心です。Ubuntuだと失敗した時にOSの再インストールが結構大変なので、あまりオススメしません。

 

以下の順番で作業を進めていきたいと思います。

NVIDIAのドライバ → Ubuntuにインストールする

CUDAとCuDNN → Anacondaの仮想環境上にインストールする

 

NVIDIAのドライバだけはUbuntuに直接インストールしないといけませんが、ぶっちゃけここが最難関です。

なぜかというとデフォルトのドライバが競合したり、セキュアブートと呼ばれるBIOSの機能が邪魔をするからです。

 

事前準備

 

GPUがPCに接続されていることが前提です。またOSはUbuntu 18.04 Serverがインストールされている状態で、話を進めていきます。

 

セキュアブートはOFFにしておく

 

最近のPCにはセキュアブートが設定されています。これはPCの起動時にソフトウェアの署名を検証して、起動させるかどうかチェックするものです。

この機能がオンになっていると、これからインストールしようとするドライバというソフトウェアが起動できません。

BIOSのセキュアブートはオフにしておいてください。これがオンになっているとOSからドライバが認識されないことがあります。PC起動時にF2かDelを押すと、BIOSメニューが起動しオフにできます。

 

 

ちなみに私はセキュアブートがオンになっていたせいでドライバが認識せず一週間以上悩みました。

 

デフォルトのドライバ(NOUVEAU)を無効化する

 

nouveauというデフォルトのドライバが入っていますのでこれをオフにします。

 

新しく以下のファイルを作成して以下の2行を追記します。

 

以下のコマンドで再読み込みします。

 

PCを再起動して以下のコマンド何も表示されなければOKです。

 

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

 

ubuntu-drivers-commonをインストールします。これはGPUの情報や適切なドライバのバージョンを表示してくれるツールです。

 

 

NVIDIAのドライバーはUbuntuの公式レポジトリからはダウンロードできませんので、PPAという非公式なマーケットからダウンロードします。以下のコマンドで、aptのレポジトリに”graphics-drivers”のPPAを追加します。

 

 

PPAとは?

PPAはUbuntuユーザーのチームや個人がそれぞれ管理している非公式のApp Storeのようなもので、Ubuntuの公式レポジトリからはダンロードできないソフトウェアや最新のバージョンのソフトウェアを手に入れることができます。より多くのソフトウェアを試すことができる反面、動作保証や安全性の保証はないので一定のリスクがあることを確認して下さい。

PPAの便利なところは、一度、信頼するソフトウェアの提供元として追加すると、公式のレポジトリからダウンロードしたソフトウェアと同様にアップデートがあるかどうか自動でチェックし、一括アップデートできることです。ソフトウェアのインストールや削除も公式のソフトと同じように、Ubuntuのソフトウェアセンターから一元管理できます。

https://allabout.co.jp/gm/gc/438675/

 

以下のコマンドでドライバのバージョンを確認してください。

 

 

415がレコメンドされていますが、一応、NVIDIAのサイトでも確認します。自分が使っているGPUのバージョンを入力します。

https://www.nvidia.co.jp/Download/index.aspx?lang=jp

 

ドライバのバージョンが410と記載されていますので、410をインストールしましょう。

 

 

以下のように表示されればオッケーです。

 

 

以下のエラーが出る場合は、BIOSのセキュアブートをオフにすると解決すると思います。

 

Anacondaのインストール

 

CUDAやCuDNNはAnacondaを使って入れます。

 

Anacondaは仮想環境なので、失敗すれば消せば良いだけですしやり直しがききます。Ubuntuに直接入れるよりも断然楽です。

 

以下のサイトからダウンロードします。

 

Anaconda Python/R Distribution

 

私は、wgetでダウンロードしてきました。

 

 

ダウンロードしたらインストールスクリプトを実行します。

 

途中でanacondaのパスを通すかどうか聞かれるので「yes」を押してください。VSコードは必要ないので「no」を選択しました。

 

インストールが終わったら再起動します。

 

 

インストールされていることが確認できました。

 

cudatoolkit,cudnnのインストール

 

仮想環境を作成して必要なものをインストールしていきます。

 

 

ここで、conda listを使って、インストールされたtensorflow-gpuのバージョンを確認してください。

 

私が確認した時点では1.10.0でした。このバージョンに対応するcuda,cudnnをインストールする必要があります。対応表は以下のサイトで確認してください。

 

https://www.tensorflow.org/install/source

 

cudatoolkitは9.0を指定します。指定しないと最新のcuda10が入ってしまいうまく動きませんでした。cudnnは最新で7だったので問題ありません。

 

 

動作確認

 

pythonを実行し、以下のコードを順番に実行していきます。

 

 

上記のように表示されればGPUが動いています。やりましたね!

 

Jupyter notebookの設定

 

このままだとJupyterNotebookでGPUが動かせませんので、Jupyterのカーネルの設定をします。

 

 

TensorFlow-GPUを選択して、新しいノートブックを開きます。

 

kerasでディープラーニング

 

事前にgpu用のkerasをインストールしておきます。

 

 

これで準備は整いました。

ここまで長かったですが、ようやくディープラーニングが動かせます!

 

Lenet-5というニューラルネットワークを使います。以下のコードをJupyterで実行しましょう。

 

 

トレーニングで0.9935、バリデーションで0.9922の精度が出ました。

GPUを使っているのでとても早いです。

実行中にnvidia-smiコマンドを使うとどの程度GPUを使っているかみれます。

 

おまけ:tensorboardでの可視化

 

学習結果を可視化できます。

 

 

参考

 

Pugets Systems:

https://www.pugetsystems.com/labs/hpc/The-Best-Way-to-Install-TensorFlow-with-GPU-Support-on-Windows-10-Without-Installing-CUDA-1187/#the-results

 

おわり。

ABOUTこの記事をかいた人

のっくん

理系院卒で大企業の研究所に就職。 趣味はプログラミング、レアジョブ英会話、筋トレ、旅行。 Twitter:@yamagablog