tensorflow Enabling XNNPACK with Raspberry Pi Zero/W

disho6za  于 6个月前  发布在  其他
关注(0)|答案(5)|浏览(59)

问题类型

构建/安装

你是否在TF nightly版本中复现了这个bug?

来源

源代码

Tensorflow版本

2.12.0

自定义代码

OS平台和发行版

Linux Raspberrypi OS 32位(Debian bullseye)

移动设备

树莓派Zero W

Python版本

3.9.2

Bazel版本

cmake 3.18.4

GCC/编译器版本

GNU c++ (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110

CUDA/cuDNN版本

NA

GPU型号和内存

NA

当前行为?

树莓派Zero/Zero W的tf-lite构建指令表示以下内容应作为CFLAGS/CXXFLAGS的一部分:
-march=armv6 -mfpu=vfp -mfloat-abi=hard -funsafe-math-optimizations
根据xxnpack的README,XNNPACK支持在armv6上运行,该设备为树莓派Zero W。然而,所有针对树莓派Zero的构建指令都明确禁用了xnnpack。鉴于xnnpack文档中对rpi0的支持,我尝试使用启用了xnnpack的tf-lite进行构建。
当启用xnnpack子构建时,会在xnnpack子构建过程中向编译器调用添加以下冲突的CFLAGS:
-marm -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8
请扩展cmake和构建指令,以允许tf-lite在使用启用了xnnpack的树莓派Zero/Zero W正确构建。

iibxawm4

iibxawm41#

你好,@samveen

根据TFLite文档,ARMv6不支持XNNPACK,因为没有NEON支持。

你是否观察到了与README中建议的-mfpu=vfpv2相同的行为?

谢谢。

pcww981p

pcww981p2#

从日志输出中可以看出,无论用户为 -march-mfpu 提供的值是什么,tflite 与 XNNPACK 的构建集成都会将 -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8 添加到 XNNPACK 的构建标志中。

从 XNNPACK 的 readme 中可以看出,XNNPACK 有一部分是适用于树莓派 Zero/Zero W 的。然而,不清楚的是 tflite 在为 Zero/Zero W 构建时是否可以使用那部分 XNNPACK。

我会尝试按照说明在树莓派 Zero 上构建 XNNPACK,并在构建状态方面回复您。

2mbi3lxu

2mbi3lxu3#

bash ./scripts/build-local.sh -DXNNPACK_ENABLE_ARM_DOTPROD:BOOL=OFF

  • 一个DOTPROD内核包含Neon汇编指令,导致构建失败,因此需要XNNPACK_ENABLE_ARM_DOTPROD:BOOL=OFF
  • 脚本针对构建运行测试,但即使在24小时运行后,仍未完成FP32 MobileNet v3 Large的第3个测试,这让我相信它可能陷入了困境,而不是花费时间(Zero/Zero W上的预期时间比FP32 MobileNet v2 1.0X少,后者不到3秒就完成了)
  • 鉴于上述卡顿问题,我希望得到XNNPACK团队的回复,甚至是“不再可能”的回复,这应该会提供一些清晰度。
roejwanj

roejwanj4#

感谢您提供的信息。

萨姆维恩,您能调查一下这个问题吗?

谢谢。

mepcadol

mepcadol5#

@pjpratik@sachinprasadhs 我针对XNNPACK创建了一个问题,其中包含了关于RPi0构建的更多详细信息 - google/XNNPACK#4701 ,给出了我遇到的问题、我遵循的构建过程以及我的本地构建环境的详细信息。希望这应该能提供更多关于底层问题的洞察力。

相关问题