#raspberry-pi #cross-compiling #tensorflow-lite
#raspberry-pi #кросс-компиляция #tensorflow-lite
Вопрос:
Я пытаюсь скомпилировать Tensorflow-Lite для Raspberry Pi B . Для этого я следую этим инструкциям с официального сайта, которые :
git clone https://github.com/raspberrypi/tools.git rpi_tools
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
cd tensorflow_src amp;amp; ./tensorflow/lite/tools/make/download_dependencies.sh
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-разрядной сборки:
- Проверьте архитектуру для Raspberry Pi B .
$ lscpu
ИЛИ
$ uname -a - ПУТЬ =../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