この記事は NTTテクノクロス Advent Calendar 2018 の3日目です。
こんにちは、遠藤と申します。
普段は NTTテクノクロスで、深層学習関連のプロジェクトをしております。
はじめに
何社か有名な半導体メーカはあれど、現状ディープラーニングをがっつりやろうとした場合には、NVIDIA社製のGPUを選択することになると思います。
本記事ではそんなNVIDIA GPUについて紹介します。
プロダクトの種類
NVIDIAのGPUには大きく分けて3つのブランド(シリーズ)があります。
値段はもちろんプロダクトにもよるので、あくまで目安。
- GeForce:コンシューマー向けで最も知名度が高く一般的。
5~10万円くらい。GeForce 1070とか。 - Quadro:ワークステーション向け。GeForceとTeslaの中間の気もするが、業務向け。
30万円~100万円くらい。Quadro P6000とか。 - Tesla:データセンタやスパコンなど、高い信頼性と性能を求める方向け。
100万円~。Tesla V100とか。
QuadroとTeslaは3年保証ですが、GeForceは1年保証です。
またNVIDIAはGeForceシリーズをデータセンタで使うことは禁止しているので、データセンタでGPUを使う方はご注意を。少しニュースにもなったので、ググって知っておきましょう。
GPUのアーキテクチャ
NVIDIAはアーキテクチャの世代ごとに、有名な科学者の名前を付けています。
おおよそ1年半から2年で新しいアーキテクチャが発表になります。
ここ数年で並べるとこんな感じ。Turingが最新です。
Maxwell < Pascal < Volta < Turing
例えば、Tesla P100というGPUのP
はPascal世代を、TITAN VのV
はVolta世代であることを示します。
プロダクト名に世代の頭文字を付けているGPUも多いです。
アーキテクチャが1世代進むと5~10倍性能が上がったりしますので、GPUを購入する際は、上のプロダクトの種類とこの世代をもとに、具体的にどのGPUを購入するかを検討します。
そしてNVIDIAはこのアーキテクチャの世代ごとに、CUDAやNVIDIAの関連ライブラリのバージョンを管理しています。
CUDA
CUDAとはNVIDIAが開発提供している統合開発環境です。何でも屋です。
CやC++でGPUを操作するAPIを提供したり、メモリからGPUメモリにデータをロードしたり、GPUの各コアに並列処理を依頼する仕組みも提供してくれます。
ほとんどの方はCUDAでプログラミングするのではなく、TensorFlowやChainerといったフレームワークを使っていると思います。
そのフレームワークがCUDAへのアクセスを担当してくれるので、インストールだけしてCUDAを意識する人は少ないと思いますが、NVIDIA GPUを使う上では必須になります。
バージョンの依存
NVIDIA GPUを使う上で、バージョンの依存関係は注意しましょう。
以下3つには依存関係があります。
NVIDIA Driver <-> CUDA <-> フレームワーク
NVIDIA DriverとCUDA
CUDAのdeveloperサイトを参照してもよいですが、個人的にはこちらがわかりやすいです。
CUDAのバージョンに応じて、要求されるNVIDIA Driverが変わってきます。
CUDAとフレームワーク
使っているフレームワークによりますが例えばTensorFlowであれば、Requirementsを見るに現在はCUDA9.0を指定しています。
この辺の依存関係やそれから関連ライブラリなどのバージョンは、しっかり公式がサポートしている環境で使いましょう。
nvidia-docker
バージョンアップも多く、その他NVIDIAの関連ライブラリにも依存関係があるので、ホストではなくdockerでの利用をお勧めします。
ただ通常のdockerだとホストのGPUを操作できませんので、NVIDIAが提供するnvidia-dockerを使います。
ざっくり手順をまとめるとこんな感じ。
- NVIDIA Driverをインストールする
- dockerをインストールする
- nvidia-dockerをインストールする (手順)
- NVIDIAがCUDA導入済みのdockerイメージを配布しているので、これを使う (配布先)
まとめ
- 依存関係に注意してNVIDIA GPUを使おう。
- nvidia-dockerおすすめです。