Как скомпилировать Tensorflow-Lite для Raspberry Pi?

#raspberry-pi #cross-compiling #tensorflow-lite

#raspberry-pi #кросс-компиляция #tensorflow-lite

Вопрос:

Я пытаюсь скомпилировать Tensorflow-Lite для Raspberry Pi B . Для этого я следую этим инструкциям с официального сайта, которые :

  1. git clone https://github.com/raspberrypi/tools.git rpi_tools
  2. git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
  3. cd tensorflow_src amp;amp; ./tensorflow/lite/tools/make/download_dependencies.sh
  4. PATH=../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:$PATH ./tensorflow/lite/tools/make/build_rpi_lib.sh TARGET_ARCH=armv6 (шаг 4b для armv6, который должен быть архитектурой Raspberry Pi B )

Я попытался выполнить кросс-компиляцию на OSX 10.13, но первый шаг вызвал некоторые конфликты, потому что некоторые файлы отличаются только заглавными буквами (я предполагаю) из-за нечувствительности к регистру систем OSX:

   'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_connmark.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_DSCP.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_dscp.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_MARK.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_mark.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_RATEEST.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_rateest.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_TCPMSS.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter/xt_tcpmss.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter_ipv4/ipt_ECN.h'
  'arm-bcm2708/arm-bcm2708-linux-gnueabi/arm-bcm2708-linux-gnueabi/sysroot/usr/include/linux/netfilter_ipv4/ipt_ecn.h'
  

В свою очередь, при попытке выполнить шаг 4 я получаю эту ошибку:

 make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/core/api/flatbuffer_conversions.o] Error 126
/bin/bash: ../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g  : cannot execute binary file
make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/core/api/op_resolver.o] Error 126
/bin/bash: ../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g  : cannot execute binary file
make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/core/subgraph.o] Error 126
/bin/bash: ../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g  : cannot execute binary file
make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/core/api/tensor_utils.o] Error 126
/bin/bash: ../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g  : cannot execute binary file
make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/core/api/error_reporter.o] Error 126
/bin/bash: ../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g  : cannot execute binary file
make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/experimental/resource/resource_variable.o] Error 126
/bin/bash: ../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g  : cannot execute binary file
make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/c/c_api_experimental.o] Error 126
/bin/bash: ../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf-g  : cannot execute binary file
make: *** [/Users/fra/Documents/TFLiteComp4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/allocation.o] Error 126
  

Я попытался скомпилировать также на Ubuntu 18.04, однако 4-й шаг выдал мне ошибки. Вывод ошибки довольно длинный, но выглядит так

/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/downloads/ruy/ruy/create_trmul_params.h : В функции ‘void ruy::detail::FinalizeMulParams(const ruy::MulParams<AccumScalar, DstScalar>amp;, ruy::ChannelDimension, ruy::Ctx *, ruy::TrMulParams *)’: /home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/downloads/ruy/ruy/create_trmul_params.h:388:17 : ошибка: ‘is_trivially_copyable’ не является членом ‘std’
static_assert(std::is_trivially_copyable::значение, «»); ^ /home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/downloads/ruy/ruy/create_trmul_params.h:388:57 : ошибка: ожидаемое первичное выражение перед ‘>’ токен
static_assert(std::is_trivially_copyable::значение, «»); ^ /home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/downloads/ruy/ruy/create_trmul_params.h:388:58 : ошибка: ‘::значение’ не было объявлено
static_assert(std::is_trivially_copyable::значение, «»);

…………………… [/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/gather.o ] Ошибка 1 tensorflow/lite/tools /make /Makefile:333: рецепт для цели ‘/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/activations.o’ сбой make: *** [/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/activations.o ] Ошибка 1 tensorflow/lite/tools /make /Makefile:333: рецепт дляцель ‘/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/mfcc.o ‘ошибка создания: *** [/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/mfcc.o] Ошибка 1 tensorflow /lite /tools/make/Makefile:333: рецепт для цели ‘/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/cumsum.o’ не удалось создать: *** [/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/cumsum.o] Ошибка 1 tensorflow/lite /tools /make /Makefile:333: рецепт для цели ‘/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/conv.o ‘неудачный make: *** [/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src/tensorflow/lite/tools/make/gen/rpi_armv6/obj/tensorflow/lite/kernels/conv.o ] Ошибка 1: оставить каталог ‘/home/fra/Documents/TFLiteBuild4RPi/tensorflow_src’

Обновить

Я также docker pull tensorflow/tensorflow:latest запустил изображение docker и выполнил те же команды, но все равно есть ошибки, даже если на странице указано, что она была протестирована на этом изображении docker.

Комментарии:

1. У меня точно такая же проблема. Есть ли возможность, что вы решили эту проблему с момента вашего сообщения?

2. Нет, на данный момент я перестал ждать ответа здесь, но мне кажется, что вопросы TF не очень популярны.

3. Я смог преодолеть это, используя Ubuntu, используя apt для прямой установки arm-linux-gnueabihf-g . Затем я запустил /tensorflow/lite/tools/make/build_rpi_lib.sh TARGET_ARCH=рука. Это, похоже, компилировалось, но я не смог заставить колесо python соблюдать архитектуру, что бы я ни пробовал. Я до сих пор не смог связать tensorflow-lite. и все же, b / c я только что понял, что используемый мной компилятор g не может даже создать минимальный двоичный файл для нуля. Итак, я установил arm-linux-gnueabi-g , который создает двоичные файлы, которые фактически работают на ноль. Я сообщу, если получу какую-либо поддержку

4. Хорошо, я смог его скомпилировать. Извините за ссылку на github, но предполагаю, что это лучший способ распространения файла .a: github.com/aldenprudent/pizero-tflite . К сожалению, у меня возникли проблемы со связыванием минимального примера tflite на C . Будет продолжать взламывать его :-/

Ответ №1:

Для 32-разрядной сборки:

  1. Проверьте архитектуру для Raspberry Pi B .
    $ lscpu
    ИЛИ
    $ uname -a
  2. ПУТЬ =../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:$PATH
    ./tensorflow/lite/tools/make/build_rpi_lib.sh TARGET_ARCH=(Укажите архитектуру вашей ЦЕЛИ, например, Raspberry Pi B )

Для 64-разрядной сборки: https://www.tensorflow.org/lite/guide/build_arm64