Я тестировал модели с тензорным потоком на Exynos 7420 с помощью benchmark_model. Я хотел бы ускорить тестирование квантования за Блог Пита Уордена но пока не удалось скомпилировать benchmark_model с глубинами квантования, поскольку они ломают множество вещей.
Я следовал рекомендациям, перечисленным в этом поток переполнения стека:
// tenorflow / tools / benchmark / 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",
],
Затем запустите:
bazel build -c opt —cxxopt = ‘- std = gnu ++ 11’ — crosstool_top = // внешний: android / crosstool —cpu = armeabi-v7a —host_crosstool_top = @ bazel_tools // tools / cpp: toolchain тензор потока / tools / benchmark: benchmark_model —verbose_failures
Который (следуя всем другим инструкциям в связанном посте) успешен, за исключением того, что он не может связать с pthread.
Я попытался удалить -lpthread в тензорном потоке / tenorflow.bzl tfcopts (), а также аналогично в тензорном потоке / tools / proto_text / BUILD и тензор потока / 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:
Конвертирующий GitHub ответ от Эндрю Арфы в команде TF. Спасибо!!!
Все вышеперечисленные изменения были ненужными. Вы можете заставить квантование работать для benchmark_model (или любой цели, зависящей от android_tensorflow_lib) с помощью следующего:
`
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 раз медленнее, чем неквантованных графов — кажется, что квантованные операции все еще оптимизируются.
Других решений пока нет …