Microsoft CNTKを触ってみようとして躓いた話(追記有)

 先日Microsoft機械学習ツールCNTK(Computational Network Toolkit)がMITライセンスになったという記事を見かけて、興味本位で試してみようと思いました。下記公式サイトの左下"Basic set-up"をクリックすると、バイナリのインストール手順が表示されます。"Advanced set-up"の方をクリックすると、ソースコードからのビルド手順が表示されます。
CNTK - Computational Network Toolkit

 先に結果を書いておくと、GPU無しのCPUのみの環境で動作するバイナリが公開されていないようなので、自力でビルド環境を整えないと試せないようです(2016/2/3現在)。以下は、この結果に至るまでの過程になります。


(2016/2/12追記ここから)
 現在はCPUのみ環境向けのバイナリがWindows/Linux共にReleaseページで公開されています。
CNTK-2016-02-08-Windows-64bit-CPU-Only.zip
CNTK-2016-02-08-Linux-64bit-CPU-Only.tar.gz
展開後に各サンプルのREADME通りに実行すれば動作します。
(SET ACML_FMA=0とSET PATH=%PATH%;[cntk.exeの配置先パス]を行った後、各サンプルのconfigファイルを指定してcntkを起動)
故に、本投稿を末尾までお読みいただく必要はありません。
(2016/2/12追記ここまで)
 


 私はちょっと触ってみたかっただけなので、ビルド済みバイナリを突っ込んでみたいと考えました。今回はディスクリートGPUを積んでいないよくあるWindowsノートPCなので、下記手順に従います。CNTK Binary Download and Configuration · Microsoft/CNTK Wiki · GitHub

 この手順によればReleaseページからダウンロードしたZIPファイルを展開して、環境変数ACML_FMAを設定するだけのお手軽2ステップということですので、やってみます。なお、2016/2/3現在、Releases · Microsoft/CNTK · GitHubには4つのファイルが掲載されています。

  1. CNTK-20160126-Linux-64bit-ACML5.3.1-CUDA7.0.tar.gz
  2. MBCNTK-20160126-Windows-64bit-ACML5.3.1-CUDA7.0.zip
  3. Source code (zip)
  4. Source code (tar.gz)

 見た感じでは上からLinux用バイナリ、Windows用バイナリ、ソース(zip)、ソース(tar.gz)のようですので、上から二つ目をダウンロード・展開した後、とりあえずコマンドプロンプトから一時的に環境変数を設定し、cntk.exeを叩いてみます。

SET ACML_FMA=0
cntk

 結果、cublas64_70.dllが無いと怒られ起動できませんでした(スクリーンショット撮り忘れ)。

  • 展開したバイナリを配置したディレクトリにパス通してみた後、再実行しても同様。
  • 裏で全く別なプロセスが起動して、環境変数ACML_FMAが読めてないのかと妄想し、システム環境変数にACML_FMA=0を追加した後、再実行しても同様。
  • アプリケーションイベントログを抜粋すると以下の通り。

障害が発生しているアプリケーション名: CNTK.exe、バージョン: 0.0.0.0、タイム スタンプ: 0x56a76812
障害が発生しているモジュール名: cublas64_70.dll、バージョン: 6.3.9600.18185、タイム スタンプ: 0x5683f0c5
例外コード: 0xc0000135
障害オフセット: 0x00000000000ec580
障害が発生しているモジュール パス: cublas64_70.dll

  • cublas64_70.dllが何者か調べてみると、CUDA系のDLLらしい。確かにダウンロードしたzipのファイル名にもCUDA7.0と書いてある。CPUオンリーの手順でやってるんだけど。

 なお、WindowsのFor CPU-only machineとして書かれている手順には、

Download and unzip from the release page

と記されているのだが、Linuxの方のFor CPU-only machineの手順には、

Download and unzip CNTK-20151208-Linux-64bit-ACML5.3.1-cpu-only.tar.gz.

と書かれており、CUDAの代わりにcpu-onlyというPostFixが付与されたバイナリリリースが存在することが示唆されている(先述の通り、実際にはLinux版もWindows版もCUDA7.0がPostFixに含まれたバイナリしか無いのだけど)。

 なお、GitHubにはIssue #53として
cpu only binary + compiler errors · Issue #53 · Microsoft/CNTK · GitHub

I cannot find the CPU only binary in the binary downloads link

と、報告も上がっているようだが当件についてはスルーされている模様。


 ということで、現時点では自前でビルド環境整えないとCNTKは試せ無さそうなので、残念ながら一旦撤退。




以上。