OpenCLを使ってTensorFlowの計算を速くできるかな?と思っている方に向けた記事を作成しようと、いろいろ調べてみました。
たくさん調べた結論は、試してみないと分からない!でした。
そこで、この記事では、OpenCLとは?というところから始めて、どのように試してみるかを説明します。
TensorFlowとは
TensorFlowは、機械学習や深層学習のプログラムを実装する際に使用できるライブラリです。
TensorFlowとは何か?については、以下の記事で説明していますので、よく分からない方は確認してみてくださいね。
OpenCLとは
OpenCLは、CPUなどを利用して並列計算を行うためのフレームワークです。
Macを販売しているアップルが提案し、標準化団体クロノス・グループによって策定されています。
上でCPUなど、と書いたのは、他にも計算に使える機器(以降、演算デバイス)があるためです。
OpenCLで計算に使える主な演算デバイスを挙げてみます。
演算デバイス | 説明 |
---|---|
CPU | パソコンやスマートフォンに搭載されているプロセッサ |
GPU | ビデオカードに搭載されているプロセッサ |
APU | CPUとGPUを統合したプロセッサ |
FPGA | 製造後に購入者や設計者が構成を設定できる集積回路 |
DSP | デジタル信号処理に特化したプロセッサ |
いまあなたが使っている機器には、上記のいずれか1つまたは複数の演算デバイスが搭載されていると思います。
つまり、あなたが使っている機器でもOpenCLを利用できるかもしれないのです。
たとえば、IntelのCPUをOpenCLの演算デバイスとして利用するためには、Intel® SDK for OpenCL™ Applicationsをインストールする必要があります。
参考:https://software.intel.com/en-us/intel-opencl
IntelのCPUを搭載したパソコンに「Intel® SDK for OpenCL™ Applications」をインストールして、OpenCLを利用した並列計算を行うプログラムを動作させれば、OpenCLを利用した並列計算が行えるという仕組みです。
そして、GPUもOpenCLの演算デバイスとして利用できるようにすれば、CPUもGPUも全部使った並列計算ができるようになります。
SYCLとは
OpenCLを調べていると、SYCL(シクル、シックル)という規格も目に付くでしょう。
実は、OpenCLの演算デバイスを利用するためのプログラムは複雑になりがちなのですが、それを隠ぺいしてプログラムを書きやすくするための規格がSYCLです。
言いかえると、SYCLに準拠したプログラムを書けば、OpenCLの演算デバイスを利用できるということです。
上でさりげなく書きましたが、SYCLは規格、つまりただの決まりごとですから、SYCLを使ったプログラムをうまいこと扱ってくれる何かが必要です。
それが、codeplayが開発を進めているComputeCppです。
参考:https://www.codeplay.com/products/computesuite/computecpp
ここまでに説明した内容を、逆方向から短くまとめてみると、ComputeCpp(codeplay製のSYCL実装)を使うと、CPUやGPUなど(OpenCLの演算デバイス)を使って並列計算を行うプログラムを作成できる、となります。
TensorFlowでOpenCLの演算デバイスは使えるのか
ここまでで残念ながら、OpenCLを使ってTensorFlowの計算を速くできるかな?という疑問にはまだ答えられていません。
ですが、何となく、TensorFlowがOpenCLに対応していれば、CPUやGPUなどを使って並列計算ができて、計算が速くなるのでは…と思い始めたでしょう。
では、TensorFlowはOpenCLに対応しているのでしょうか。
残念ながら「pip install」でインストールできるTensorFlowはOpenCLに対応していません。
OpenCLの用意をしても、TensorFlowはOpenCLを使わないのです。
一方、TensorFlowをソースコードからビルドすると、途中で以下のような質問が表示されます。
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]:
ここで「y」を入力して進めば、SYCLに対応したTensorFlowができあがるはずです。
ですが、GitHubのTensorFlowのリポジトリでは、OpenCLの対応に関するissueもあり、対応済みとは言えないようです。
参考:https://github.com/tensorflow/tensorflow/issues/22
そのような状況でも、OpenCL対応のTensorFlowをビルドしようとしている方もいらっしゃいます。
以下のGitHubリポジトリでは、Linux CPU、Linux GPU、Mac OS CPU、Windows CPU、Androidで、OpenCL対応のTensorFlowをビルドしています。
私がみたときにはMac OS CPUだけがビルドに成功していました。
参考:https://github.com/benoitsteiner/tensorflow-opencl
以下のGitHubリポジトリでも、OpenCL対応のTensorFlowをビルドしようとしています。
こちらは、Mac(Mac OS Sierra)+Radeon Pro 450 GPUと、Linux(Ubuntu 16.04)+NVIDIA K520の2つの環境で実行できることを確認しているようです。
参考:https://github.com/hughperkins/tf-coriander
まとめ
TensorFlow、OpenCL(ついでにSYCL)とは何かを説明し、OpenCLを使ってTensorFlowの計算を速くできる可能性について説明しました。
OpenCLを使ってTensorFlowの計算を速くできるかどうかは、やってみないとわかりません。
公式のTensorFlowから挑戦するもよし、上で紹介した2つのリポジトリから挑戦するもよし、どんどん試してみてくださいね!