2016-09-21 16 views
1

私はbenchmark_modelでExynos 7420のテンソルフローモデルをベンチマークしました。私はPete Warden's blogごとにテスト量子化をスピードアップしたいと思いますが、多くのことを壊すので、まだ量子化depsでbenchmark_modelをコンパイルできませんでした。Androidでベンチマーキング量子化

deps = [":benchmark_model_lib", 
      "//tensorflow/contrib/quantization/kernels:quantized_ops", 
      ], 

// tensorflowに/ contrib /量子化/カーネル/ BUILD cc_binary BUILD/

// tensorflow /ツール/ベンチマーク:

私はこのstack overflow threadに記載されているガイドラインに従ってきました

deps = [ 
    "//tensorflow/contrib/quantization:cc_array_ops", 
    "//tensorflow/contrib/quantization:cc_math_ops", 
    "//tensorflow/contrib/quantization:cc_nn_ops", 
    #"//tensorflow/core", 
    #"//tensorflow/core:framework", 
    #"//tensorflow/core:lib", 
    #"//tensorflow/core/kernels:concat_lib_hdrs", 
    #"//tensorflow/core/kernels:conv_ops", 
    #"//tensorflow/core/kernels:eigen_helpers", 
    #"//tensorflow/core/kernels:ops_util", 
    #"//tensorflow/core/kernels:pooling_ops", 
    "//third_party/eigen3", 
    "@gemmlowp//:eight_bit_int_gemm", 
], 

次に実行します。

bazelビルド-cオプト--cxxopt = ' - 秒td = gnu ++ 11 ' - crosstool_top = //外部:android/crosstool --cpu = armeabi-v7a --host_crosstool_top = @ bazel_tools // tools/cpp:toolchainテンソルフロー/ツール/ベンチマーク:benchmark_model --verbose_failures

リンクされた投稿の他のすべての指示に続くものは、pthreadとのリンクに失敗したことを除いて成功します。

tensorflow/tensorflow.bzl tfcopts()で-lpthreadを削除しようとしましたが、テンソルフロー/ tools/proto_text/BUILDとtensorflow/cc/BUILDでも同様でした。

def tf_copts(): 
    return (["-fno-exceptions", "-DEIGEN_AVOID_STL_ARRAY"] + 
      if_cuda(["-DGOOGLE_CUDA=1"]) + 
      if_android_arm(["-mfpu=neon"]) + 
      select({"//tensorflow:android": [ 
        "-std=c++11", 
        "-DMIN_LOG_LEVEL=0", 
        "-DTF_LEAN_BINARY", 
        "-O2", 
        ], 
        "//tensorflow:darwin": [], 
        "//tensorflow:ios": ["-std=c++11",], 
        #"//conditions:default": ["-lpthread"]})) 
        "//conditions:default": []})) 

まだリンクエラーが発生しています。

external/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lpthread 
collect2: error: ld returned 1 exit status 

ご迷惑をおかけして申し訳ありません。

ENV:

  • Ubuntuの#4462
  • android_ndk_r11c
  • アンドロイド-SDK-linuxのr24.4.1
  • のPython 2.7.12 ::連続解析を、株式会社をコミットtensorflow 14.04
  • ./GCP、HDFS、またはGPUをサポートしない設定

答えて

2

TFチームのGitHub answer from Andrew Harpを転記します。ありがとう!!!

上記の変更はすべて不要です。あなたは、次のとbenchmark_modelのために働いて量子化(またはandroid_tensorflow_libに依存して任意のターゲット)を得ることができます:

  1. gitが
  2. (もクローン--recursiveをgitのことができ、@gemmlowp LIBSを取得するために)--recurse-サブモジュールを引きます// tensorflow /コア/ジャストテスト

`

diff --git a/tensorflow/core/BUILD b/tensorflow/core/BUILD 
--- a/tensorflow/core/BUILD 
+++ b/tensorflow/core/BUILD 
@@ -713,8 +713,11 @@ cc_library(
# binary size (by packaging a reduced operator set) is a concern. 
cc_library(
    name = "android_tensorflow_lib", 
- srcs = if_android([":android_op_registrations_and_gradients"]), 
- copts = tf_copts(), 
+ srcs = if_android([":android_op_registrations_and_gradients", 
+      "//tensorflow/contrib/quantization:android_ops", 
+      "//tensorflow/contrib/quantization/kernels:android_ops", 
+      "@gemmlowp//:eight_bit_int_gemm_sources"]), 
+ copts = tf_copts() + ["-Iexternal/gemmlowp"], 
    linkopts = ["-lz"], 
    tags = [ 
     "manual", 

を構築するには、次の編集は、素晴らしい作品。興味深いことに、量子化はグラフのサイズを1/4にしますが、推論の実行は量子化されていないグラフのように4〜5倍遅く、量子化されたオペレーションはまだ最適化されているようです。

+0

これでうまくいきました。はい、量子化された演算を最適化しています。したがって、現在の速度を最大にすることはできません。 –

関連する問題