Квантованный график Tensorflow для Android

Я пытаюсь загрузить квантованный график в приложение для Android.
Мой файл BUILD содержит

deps = ["//tensorflow/core:android_tensorflow_lib",
"//tensorflow/contrib/quantization:cc_array_ops",
"//tensorflow/contrib/quantization:cc_math_ops",
"//tensorflow/contrib/quantization:cc_nn_ops",
"//tensorflow/contrib/quantization/kernels:quantized_ops"]

Дополнительные модули квантования работают для автономных сборок C ++.

Я не могу скомпилировать с Bazel из-за большого количества ошибок в GEMMLOWP. Как правильно включить gemmlowp и операции квантования в Android?

Вот пример ошибки:

external/gemmlowp/eight_bit_int_gemm/eight_bit_int_gemm.cc:125:13: error: 'int32_t' is not a member of 'std'
MatrixMap<std::int32_t, ResultOrder> result(c, m, n, ldc);

Это на Ubuntu 16.04 с Bazel 0.3.0.

Вот суть, которая дает результаты двух последовательных попыток собрать пакет — он завершается неудачно при хешировании в первый раз и gemmlowp во второй.
https://gist.github.com/ericdanz/81b799f2e0bbb3cc462aa3c90468c71b

В конечном итоге он был скомпилирован и запущен с либеральным добавлением «-std = c ++ 11» в файлах BUILD для gemmlowp и highwayhash и заменой платформы Android на зависимости платформы в квантованных операциях. Тем не менее, он дает довольно разные результаты и работает примерно в 4 раза медленнее (26–3200 мс против 6–800 мс). Я постараюсь сделать немного более глубокое расследование.

4

Решение

Вот что сработало для меня — это в основном комбинация всех комментариев Эрика Д. выше, но я хотел поместить все это в одном месте для кого-то нового, кто сталкивается с этой проблемой:

добавлять quantized_ops в deps в libtensorflow_demo.so в файле BUILD для приложения Android:

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

Изменить deps за quantized_ops в тензорном потоке / contrib / квантовании / ядрах / BUILD:

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

Удалить / закомментировать .Doc() части в тензорном потоке / contrib / quanization / ops / array_ops.cc, math_ops.cc и nn_ops.cc

Изменить deps за cc_array_ops, cc_math_ops а также cc_nn_ops в тензорном потоке / вклад / квантование / СТРОИТЬ:

deps = [
#"//tensorflow/core:framework",
"//tensorflow/core:android_tensorflow_lib",
],

Запустите команду bazel build для приложения Android с --cxxopt="-std=c++11" флаг.

0

Другие решения

Других решений пока нет …