2016-09-21 5 views
1

Я тестировал модели тензорного потока на Exynos 7420 с помощью benchmark_model. Я хотел бы ускорить проверку квантования за Pete Warden's blog, но пока не удалось скомпилировать benchmark_model с квантованием, поскольку они ломают ряд вещей.Квантование бенчмаркинга на Android

Я следовал принципам, перечисленным в этом stack overflow thread:

// tensorflow/инструменты/ориентир/BUILD cc_binary

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

// tensorflow/вно/квантования/ядра/BUILD:

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", 
], 

Затем запустите:

Базэл построить -c неавтоматического --cxxopt = '- х td = gnu ++ 11 '- crosstool_top = // external: android/crosstool --cpu = armeabi-v7a --host_crosstool_top = @ bazel_tools // tools/cpp: toolchain tensorflow/tools/benchmark_model --verbose_failures

Какая (со всеми остальными инструкциями в связанном сообщении) преуспевает, за исключением того, что она не связана с pthread.

Я попытался удалить -lpthread в tensorflow/tensorflow.bzl tfcopts(), а также в тензорном потоке/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 14,04
  • tensorflow фиксации # 4462
  • android_ndk_r11c
  • андроид-СДК-Линукс r24.4.1
  • Python 2.7.12 :: Continuum Analytics, Inc.
  • ./configure без поддержки GCP, HDFS или графического процессора

ответ

2

Сложная подписка GitHub answer from Andrew Harp на TF команды. Благодаря!!!

Вышеуказанные изменения были не нужны. Вы можете получить квантование работает benchmark_model (или любая цель зависит от android_tensorflow_lib) следующим:

  1. мерзавец тянуть --recurse-подмодули (чтобы получить @gemmlowp LIBS, также может мерзавец клон --recursive)
  2. следующие редактирования для // tensorflow/ядра/BUILD

`

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-5x столь же медленно, как и нечеткие графики - похоже, что квантованные операторы все еще оптимизируются.

+0

Отлично, теперь он работает, и да, мы по-прежнему оптимизируем квантованные операционные системы, поэтому не принимайте текущие скорости как максимум, который вы можете получить. –