前回の記事ではGoogle Colaboratoryを紹介しました。
基本的に簡単な深層学習の体験や実装はこちらでやるのが良いと思いますが、それ以外の方法として、ローカルマシンでGPU(グラフィックボード)を使用して計算をする方法を紹介しておきたいと思います。
ローカルマシンでGPUを使用するメリット、デメリット
以前の記事にも書いたと思いますが、Google Colaboratoryの利点はGPUマシンが無料で利用できることです。
一方で欠点というか、ネックとなる部分もあります。
稼働時間が限られること、独自の大きいデータセットを扱うのがやや面倒であることなどです。
逆にローカルマシンでGPUを使用する利点はデータの取り扱いがやりやすいということです。
欠点は高性能のGPUがそこそこ値が張るということです。
もし自前のPCにそこそこのグラフィックボード(NVIDIA製)が搭載されていたり、用意されたデータセットではなく自前のデータセットで色々な深層学習を本格的にやってみたいという場合にはこちらの方法を使用すればよいと思います。
また、GPUを使う方法として有料のクラウドサービスを使用することもできます。データの取り扱いがやや面倒ではありますが、稼働時間の制限等はないはずですので、こちらを検討してみるのも良いかもしれません。
(一般的な性能のGPUマシンだと¥150/h 程度のようです。)
GPUのベンチマーク(というほど種類は集められませんが)についてはまた別の機会にでもやりたいと思います。
CUDAのインストール
GPUを使用して演算を行うには対応したドライバが必要です。
このような演算が可能な有名なドライバとしてCUDAがあります。
CUDAはNVIDIA製ですので、現在のところ自前でGPUを使用した演算を行おうとするとほとんどNVIDIA製のグラフィックボードしか選択肢がないということになります。
(Radeon製のGPUも深層学習演算に使用できるようになってきているようですが、やはり後追い感が強く、GPU演算と言えばCUDAという印象です。)
CUDAを使用するためには下記の2つをインストールする必要があります。
- CUDA Toolkit
- cuDNN
ただし、今回ダウンロードするべきなのは使用する深層学習ライブラリが対応しているバージョンのCUDAなので、まずはそちらを確認しましょう。
対応するCUDAバージョンの確認
TensorFlowを使用する場合、下記のサイトから確認できます。
https://www.tensorflow.org/install/gpu
現在対応しているCUDAのバージョンは10.1のようです。
(最新のCUDAバージョンは11.0。’20/7/12現在)
また、以前の記事で紹介したPyTorchを使用する場合はインストール時にCUDAのバージョンを選択する項目がありますので、そちらに見合ったバージョンをインストールしてください。
PyTorchのインストール用サイト
https://pytorch.org/
こちらは9.2と10.1、10.2に対応しているようですが、最新の11.0には対応していないようですので、見合ったものをインストールしましょう。
私はここで深く考えず最新のバージョンをインストールしたせいで入れ直しの工程に丸1日かかってしまいました。
(間違ってしまった場合、多分Anacondaをいったん消して再インストールすれば大丈夫だと思います。)
現状ではどちらも対応しているのは10.1までのようですので、どちらのライブラリを使用するか決めかねている場合には10.1をインストールしておけば良いと思います。(’20/7/12現在)
(私の環境では10.2でもTensorFlowは問題なく動作しましたが、動作保証外となるはずなので、ちゃんとしたバージョンをインストールしましょう。)
CUDA Toolkit のインストール
CUDAの過去のバージョンをインストールするので、CUDAのトップページではなくアーカイブからダウンロードします。
下記のサイトからダウンロード可能です。
https://developer.nvidia.com/cuda-toolkit-archive
Updateはあくまでアップデートなので、そのバージョンの最新のものを選択すれば大丈夫です。
ダウンロードしたら実行してCUDA Toolkitをインストールしてください。
インストールが完了すると環境変数「PATH」内にcudaインストールフォルダの”bin”フォルダと”libnvvp”が自動で追加されます。
また、環境変数「CUDA_PATH」「CUDA_PATH_V10_1」(”V10_1”部分はインストールしたバージョンによって変わります。)が自動で追加されます。
気になる方はシステムの詳細設定から確認してみてください。
cuDNN のダウンロード
cuDNNはCUDAにさらに追加して、深層学習を行うためのライブラリです。
下記サイトからダウンロードできます。
https://developer.nvidia.com/rdp/cudnn-download
ダウンロードにはアカウント登録が必要になります。
Googleアカウントでも登録できるようなので、特に問題がなければそちらを使用すればよいと思います。
登録すると確認のメールが来ますので、メール内のアドレス確認ボタンを押してアカウント登録完了です。
対応したバージョンのものをダウンロードしてください。
ダウンロードしたら解凍します。
こちらにはインストーラ等はないので、解凍したファイルを丸ごとCUDAのフォルダにコピーしてください。
CUDAのフォルダはデフォルトでは
“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1”
にインストールされており(バージョンはインストールしたもの)、そのフォルダ内にある”bin”フォルダや”include”フォルダに統合する形になるはずです。
私は追加しなくても特に問題なく動作しましたが、
環境変数「CUDNN_PATH」を作成し、その中身に
“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1”
を追加すると書いてあるサイトもありましたので、動作しないなどの問題が発生したら試してみてください。
TensorFlowでの動作確認
TensorFlowでGPUが上手く使用できるかの確認は下記のコードを実行すれば分かるようです。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
使用可能なデバイス一覧が表示され、
device_type: “GPU”
となっているデバイスが表示されていれば無事TensorFlowに認識されています。認識されていない場合CPUのみが表示されるはずです。
TensorFlowでGPUを使用する場合、以前のバージョン(1.15以前)ではTensorFlowのGPU版であるtensorflow-gpuをインポートする必要がありましたが、以降のバージョンであれば特に意識しなくても使用可能であればGPUを使用してくれるようです。
逆にGPUを使用可能なマシンでCPUを使用したい場合には下記のコードをプログラムの前の方に書いておきましょう。
(確認してませんが、モデルのコンパイルより前が良いと思います。)
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
PyTorchでの動作確認
PyTorchでは下記のコードで動作確認できます。
import torch
print(torch.cuda.is_available())
CUDAが使用可能であればTrueが表示されます。
PyTorchではGPUを使用する場合、モデルやそこに入力する入力データを明示的にGPUに移す必要があります。
#抜粋なので動作しません
model.to("cuda:0")
input.to("cuda:0")
GPUに移すと各変数の変数型がGPU用の変数型になるようなので、モデルと入力両方を移してください。
(移さないと演算できませんというエラーが出ます。)
また、私は使用しませんがサンプルコードで下記のような例もありました。
調べたところ以前のバージョンの書き方のようですが、こちらでも実行できるはずです。
#抜粋なので動作しません(Pytorch ver0.4より前)
model.cuda()
input.cuda(0)
以上、CUDAのインストール方法になります。
深層学習をそれなりにやろうとすると、GPUマシンが利用できる環境はほぼ必須だと思います。
制限の少ない有料クラウドを使用するという方法もありますが、データをクラウド上にアップロードする手間や、時間当たりでの課金となるためデバック作業や試しの動作確認などを長時間やることに抵抗感もあります。
また、自前のデータセット、モデルなどを取り扱う場合には上手く結果が出ずに、無駄な学習演算を数日繰り返すなどということもあります。
トータルでどちらが得になるかは微妙なところですが、この辺りの心理的抵抗感はローカルマシンの方が少ないと思います。
(中古で安くグラフィックボードが手に入れば多分そちらのほうがトータル安いと思います。)
どのような環境で深層学習を行うのがいいか、判断するための材料の一つとして、次回は簡単ですがベンチマークの結果をまとめたいと考えています。