CPU vs. GPU

コンピュータの頭脳と例えられる部品がCPUです。過去においてはCPUの能力を上げることがコンピュータの計算処理能力の要とされてきました。これに対しGPUはCPUから指示を受けて画面に映像を描画するために使われる「脇役」として扱われてきました。しかし、機械学習がポピュラーになり、その計算(実際にはニューラルネットワークの学習過程)の速度を向上させる方法としてGPUを用いるようになりました。これは、映像を処理するプロセスが数学的には行列の計算の多用であり、ニューラルネットワークの学習プロセスにも行列の計算が多用されるため、行列の計算が得意なアーキテクチャになっていたGPUに白羽の矢が当たったわけです。CPUとGPUのデータ処理の違いをわかりやすく示したnVIDIAによるデモンストレーションを下記に示します。

 

 
このように、CPUは逐次に処理をおこなって行くのに対して、GPUは同時並行で処理を行うことができるのが特徴です。

 
TensorFlowはCPU処理用とGPU処理用のコードが別々に配布されています。なお、現時点でTensorFlowでのGPU処理をさせることができるのはnVIDIA製のGPU(Pascal以降)のみです。また、GPUを本来はCPUで行う計算に使用する場合にはnVIDIAが配布しているCUDAというソフトウェアパッケージをインストールする必要があります。

 

 
TensorFlow release 1.4以前ではMacOSでもGPU計算が行えるようになっていましたが、現時点のrelease 1.8ではMacOSではCPUでの計算処理しかサポートされていません。

 
なお、GPUはCPUよりも行列計算処理が格段に速いですが、本来は画面に映像を描画することを目的に作られたため、GPUよりも機械学習に特化した処理を行おうとGoogleが開発したものがTPU(Tensor Processing Unit)です。機械学習ライブラリにはTensorFlow以外のものもありますが、TensorFlowでの処理に限りTPUはGPUの15倍から30倍ほどの速度で処理を行います。現時点でTPUを使うにはGoogleが運営しているCloud PlatformであるGoogle Cloud ML Engineで使用できます。