Можно ли собрать TensorFlow lite с пользовательским процессором?

Я ищу приложение TF Lite для Android

Что можно найти в GIT: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo.

Как я могу скомпилировать структуру tensorflow lite для использования оптимизированного типа процессора "atom"?

Можно ли скомпилировать его на ОС MAC с оптимизацией ЦП для "атомного" процессора?

Я хочу запустить приложение на устройстве Android (SDK 22) с процессором Intel Atom. Когда я запускал приложение без каких-либо изменений через Android Studio, скорость составляла около 1200 мсек на кадр. Создание того же APK, установленного на моем Galaxy S9 (процессор arm - snapdragon), занимало около 30 мсек на кадр.

В "build.gradle" есть такой раздел:

dependencies {
...    
compile 'org.tensorflow:tensorflow-lite:0.0.0-nightly'

...
}

Так что вроде скачивает фреймворк,

Как я могу скомпилировать его локально с оптимизацией ЦП и настроить приложение на его использование вместо загрузки неоптимизированной ночной версии?

Я попытался запустить это руководство: Установка TensorFlow из исходников с флагами процессора, но не знаю, как именно это помогает мне со сценарием Android ..


person Aviram Fireberger    schedule 09.07.2018    source источник


Ответы (1)


Предполагая, что ваше устройство Atom x86, используйте флаг --fat_apk_cpu, чтобы указать x86 ABI:

$ bazel build -c opt --cxxopt='--std=c++11' \ 
    --fat_apk_cpu=x86 \
    //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo 

Переключите x86 на x86_64, если вы строите для 64-битного устройства.

Созданный APK, доступный по адресу bazel-bin/tensorflow/contrib/lite/java/demo/app/src/main/TfLiteCameraDemo.apk, будет содержать .so файл x86:

$ zipinfo bazel-bin/tensorflow/contrib/lite/java/demo/app/src/main/TfLiteCameraDemo.apk | grep lib
-rw----     2.0 fat  1434712 b- defN 80-Jan-01 00:00 lib/x86/libtensorflowlite_jni.so 

Если ваше устройство подключено, вы можете использовать bazel mobile-install вместо bazel build для прямой установки приложения:

$ bazel mobile-install -c opt --cxxopt='--std=c++11' \ 
  --fat_apk_cpu=x86 \ 
  --start_app \
  //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo
person Jin    schedule 09.07.2018
comment
при этом продолжают появляться странные ошибки компиляции: ОШИБКА: для процессора 'x86' не найдена цепочка инструментов default_toolchain. Допустимые процессоры: [darwin, darwin_x86_64, k8, ios_x86_64, ios_i386, ios_armv7, ios_arm64, watchos_i386, watchos_armv7k, tvos_x86_64, tvos_arm64, armeabi-I7a,] Как cpu может добавить эту коллекцию? - person Aviram Fireberger; 09.07.2018
comment
Какую команду вы выполняете? Вы строите cc_library напрямую? - person Jin; 09.07.2018
comment
Что ж, теперь я получаю эту ошибку при выполнении первой команды, которую вы мне даете: ОШИБКА: / Users / myuser / Workspaces / tensorflow / tensorflow / contrib / lite / java / demo / app / src / main / BUILD: 7: 1: нет такого пакета '@ androidsdk // com.android.support': репозиторий не может быть разрешен и ссылаться на него с помощью '// tensorflow / contrib / lite / java / demo / app / src / main: TfLiteCameraDemo' ОШИБКА: / Пользователи / myuser / Workspaces / tensorflow / tensorflow / contrib / lite / java / demo / app / src / main / BUILD: 7: 1: нет такого пакета '@ androidsdk // com.android.support': репозиторий не может быть разрешен и на который ссылается - person Aviram Fireberger; 09.07.2018
comment
Следуйте шаг 3 руководства "Сборка из исходного кода с помощью Bazel", чтобы настроить Android SDK и NDK в файле WORKSPACE. - person Jin; 09.07.2018
comment
Поправьте меня, если я выкручиваюсь, но настройки android больше нет в файле WORKSPACE .. он находится в /third_party/android/android_configuration.bzl. это новое расположение файла конфигурации? меняю там все настройки. в руководствах и руководстве на сайте говорится о настройке WORKSPACE, но она была изменена в прошлом месяце в репозитории GIT. - person Aviram Fireberger; 09.07.2018
comment
Похоже, что он изменился, но документы не обновляются. Вы получаете сообщение об отсутствии SDK. Вы можете исправить это вручную, добавив строки android_sdk_repository( name = "androidsdk", path = "/path/to/Android/sdk" ) и android_ndk_repository( name = "androidndk", path = "/path/to/ndk" ) в файл WORKSPACE. - person Jin; 09.07.2018
comment
Спасибо, сработало! Я просто пытаюсь понять типы ЦП по документации, я нашел эту ссылку на сайте тензорного потока gcc.gnu.org/onlinedocs/gcc-4.5.3/gcc/ Где мне нужно использовать -march или -mtune, чтобы получить Оптимизация процессора Atom работает на моем устройстве Android? Я что-то упускаю? - person Aviram Fireberger; 09.07.2018
comment
Найдено по этой ссылке: tensorflow.org/install/install_sources в разделе: Этот вопрос относится к более позднему фаза, на которой вы будете использовать bazel для сборки пакета pip. Мы рекомендуем принять значение по умолчанию (-march = native), которое оптимизирует сгенерированный код для типа процессора вашего локального компьютера. Однако, если вы создаете TensorFlow на одном типе ЦП, но будете запускать TensorFlow на другом типе ЦП, рассмотрите возможность указания более конкретного флага оптимизации, как описано в документации gcc (ссылка выше). - person Aviram Fireberger; 09.07.2018
comment
Я считаю, что вы можете передавать флаги компилятора, используя --cxxopt, например. --cxxopt=-march=native - person Jin; 09.07.2018
comment
Влияют ли эти флаги на время компиляции \ поведение на моем компьютере (Mac) или влияют на двоичные файлы APK (время выполнения) во время работы на моем устройстве Android? - person Aviram Fireberger; 09.07.2018
comment
Я не знаком с этой областью компиляции, извините. - person Jin; 09.07.2018