WindowsでC++からTensorFlow(GPU有効)を使う
前回ので Python からテンサーをフローできる様になった訳ですが、型もなくテストもないのに何百行と書いているとあまりにも不安で抑鬱状態になってしまいますね。
そこで C++ からフローしてみましょう。
手順
「Building a standalone C++ Tensorflow program on Windows – Joe Antognini」に従っていきますが、私の環境ではいろいろと不足があったので以下の様に補いました。
TensorFlow のバージョンは前回ビルドした master の 4e75ae1 です。{src_dir}
はgit clone
を行った場所を表します。
インクルードディレクトリ
C:\{src_dir}\tensorflow C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\external\eigen_archive C:\{src_dir}\tensorflow\third_party\eigen3 C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\protobuf\src\protobuf\src
ここはそのまま。
ライブラリディレクトリ
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\sqlite\src\sqlite-build\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\snappy\src\snappy\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\nsync\src\nsync\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\protobuf\src\protobuf\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_cc.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_cc_ops.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_cc_framework.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_cc_while_loop.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_core_cpu.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_core_direct_session.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_core_framework.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_core_kernels.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_core_lib.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_core_ops.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\tf_stream_executor.dir\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build\Release C:\{src_dir}\tensorflow\tensorflow\contrib\cmake\build
次項の .lib を補う過程でいろいろ増えました。
追加の依存ファイル
zlib\install\lib\zlibstatic.lib gif\install\lib\giflib.lib png\install\lib\libpng12_static.lib jpeg\install\lib\libjpeg.lib lmdb\install\lib\lmdb.lib jsoncpp\src\jsoncpp\src\lib_json\Debug\jsoncpp.lib farmhash\install\lib\farmhash.lib fft2d\\src\lib\fft2d.lib highwayhash\install\lib\highwayhash.lib libprotobuf.lib tf_protos_cc.lib tf_cc.lib tf_cc_ops.lib tf_cc_framework.lib tf_cc_while_loop.lib tf_core_framework.lib tf_core_cpu.lib tf_core_direct_session.lib tf_core_kernels.lib tf_core_lib.lib tf_core_ops.lib tf_core_gpu_kernels.lib tf_stream_executor.lib sqlite.lib cublas.lib cuda.lib cudart.lib cudnn.lib cufft.lib curand.lib cusolver.lib nsync.lib snappy.lib
前回 GPU を有効にしてビルドしたので tf_core_gpu_kernels.lib
も入っています。
コマンドラインの追加のオプション
/machine:x64 /ignore:4049 /ignore:4197 /ignore:4217 /ignore:4221 /WHOLEARCHIVE:tf_cc.lib /WHOLEARCHIVE:tf_cc_framework.lib /WHOLEARCHIVE:tf_cc_ops.lib /WHOLEARCHIVE:tf_core_cpu.lib /WHOLEARCHIVE:tf_core_direct_session.lib /WHOLEARCHIVE:tf_core_framework.lib /WHOLEARCHIVE:tf_core_kernels.lib /WHOLEARCHIVE:tf_core_lib.lib /WHOLEARCHIVE:tf_core_ops.lib /WHOLEARCHIVE:tf_stream_executor.lib /WHOLEARCHIVE:libjpeg.lib
ここもそのままですね。
結果
tensorflow って馬鹿でかいライブラリを静的リンクするので、当然ですが凄いサイズになりますね。
2017/11/06 00:02 216,238,080 Hoge.exe 2017/11/06 00:01 1,146 Hoge.exp 2017/11/06 00:01 1,580,591 Hoge.iobj 2017/11/06 00:01 1,177,056 Hoge.ipdb 2017/11/05 22:48 2,188 Hoge.lib 2017/11/06 00:02 93,949,952 Hoge.pdb
元記事の人は 35MB と言っているので、200MB ちょっとあるのはやや不可解ではあるのですが。ともあれこれで動きました、万歳! 私の連休を返して!