やはりCNTKは、GPGPU付きで使いたい。そのためには、今までのようにVagrantの上で動作するLinuxで動かすより、Windows上で動作させる方が良いだろう。 Windows上にCNTKの環境をセットアップする方法について探っていこう。
1. Windows上にCNTKをインストールする手順
Windows上にCNTKをインストールするためには、まずは以下のWikiを参照するのが良い。
で、いろいろやってみた結果、結論としてはWikiに書いてあることを忠実に守る必要がありそうだ。 CUDAのバージョンも合わせないと面倒だし、Visual Studioのバージョンも合わせないと面倒だ。
2. Visual Studio 2013のインストール
ちなみに、プロジェクトファイルの関係上、Visual Studio 2013である必要がある。僕は以下からVisual Studio 2013をインストールした。 Visual Studio 2015との混在環境でも、CNTKは動作させることができるようだ。
3. CUDA 7.0のインストール
僕は今までCUDA7.5をインストールしていたのだが、プロジェクトと合わせるためにはCUDA7.0をインストールする必要があった。これも同様にCUDA7.5との混在環境でも問題ない。
CUDA 7.0 Downloads | NVIDIA Developer
何故こんなに厳密にバージョンを合わせないといけないかというと、CNTKのリポジトリ内に含まれるプロジェクトに、CUDAのバージョンとVisual Studioのバージョンが決め打ちで書いてあるからだ。 もちろんこれを変更しても良いのだろうけど、下手に変更してインストール出来なくなっても困るので、ちゃんと合わせるようにした。
CNTK/MathCUDA.vcxproj at master · Microsoft/CNTK · GitHub
GPU付きでビルドするためには、このMathCUDAというライブラリを構築できるかどうかがカギになる。ちなみに、後述するがエンコードの影響で、いくつかCUDAのインクルードファイルのエンコードを変更する必要がある。
4. Boost, ACML, MS-MPI, OpenCVのインストール
これらはWikiの指示通りにインストールすればOK。環境変数を設定しなければならないものはちゃんと設定すること。
Download Microsoft MPI v7 from Official Microsoft Download Center
ACML Downloads & Resources - AMD
ちなみに、OpenCVは3.0.0だとLinux上でインストールに失敗したので、WindowsでもOpenCV3.1.0でインストールしている。
5. Visual Studio 2013 でCNTKのビルド
という訳で、CNTKをビルドするために、CNTKのリポジトリ内にあるCNTK.sln をVS2013で開く。
5.1 CPU-OnlyでReleaseビルドする
このときに、
C:\Program Files (x86)\Microsoft SDKs\MPI\Include\mpi.h
のエンコードを変更して、VS2013で正しく認識できるようにしてやる必要があった。ここら辺は、エラーメッセージがある度にファイルのエンコードを変えていく作業が生じた。正直面倒くさい。
5.2 ビルド完了
ビルドが終了すると、x64/Release_CpuOnlyにCNTK.exeが生成されている。
5.3 GPU付きでReleaseビルドする
ここでも、いくつかファイルのエンコードを変更する必要がある。基本的に、CUDAのインクルードファイルのいくつかだ。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include
あたりのインクルードファイルの幾つかのエンコードを変更してVisualStudioでビルドできるようにする。この処理についても、エラーが出る度に変更していく地道な作業になる。
5.4 GPU付きでビルド終了
ビルドが終了すると、x64/ReleaseにCNTK.exeが生成される。
これでビルド処理は完了だ。WindowsでCNTKが使えるようになった。