拓冰建站拓冰建站
首页 / 资讯中心 / 正文

TensorFlow Lite 如何用 CMake 为 ARM 设备构建 tflite-runtime Python 包?

TensorFlow Lite 如何用 CMake 为 ARM 设备构建 tflite-runtime Python 包【免费下载链接】tensorflowAn Open Source Machine Learning Framework for Everyone项目地址: https://gitcode.com/GitHub_Trending/te/tensorflow如果你只想在树莓派等 ARM 设备上跑 TFLite 解释器又不想装完整的 TensorFlow就需要把tflite_runtimePython 包针对目标 ARM 架构交叉编译成 wheel再安装到设备上。TensorFlow 提供了一条基于 CMake 的构建路径在 x86 主机上用 Docker 容器自动完成交叉编译产出可安装到 ARM 设备的.whl文件。以下操作在 build_cmake_pip.md 中说明文档中记录的测试环境为 Ubuntu 16.04.3 64-bit PC、macOS Catalina (x86_64) 和 TensorFlow 官方 devel Docker 镜像。该功能自 TensorFlow 2.4 起可用。构建前需要准备什么一份 TensorFlow 源码副本在源码根目录下执行构建命令。CMake 3.16 或更高版本。按 build_cmake.md 的说明Ubuntu 上可执行sudo apt-get install cmake交叉编译路径需要主机安装 Docker构建通过 Makefile 调用预定义 Docker 容器完成避免在主机上手动配置交叉编译环境。目标设备的 Python 版本需为 3.7 或更高PYTHON_VERSION参数只支持 3.7。先确认目标设备属于哪种 ARM 环境build_pip_package_with_cmake.sh根据TENSORFLOW_TARGET参数确定目标架构文档给出的可用 target 如下Target目标架构说明armhfARMv7 VFP with Neon兼容 Raspberry Pi 3 和 4rpi0ARMv6兼容 Raspberry Pi Zeroaarch64aarch64 (ARM 64-bit)兼容 Coral Mendel Linux 4.0、安装了 Ubuntu Server 20.04.01 LTS 64-bit 的树莓派native你的工作站以-mnative优化构建default你的工作站默认 target选 target 之前build_cmake_arm.md 建议在目标设备上检查环境glibc 版本在目标设备上执行ldd --version。注意默认工具链是 GCC 8.3用它构建的二进制要求目标 glibc 2.28 或更高glibc 更低时需要更换更老的 GCC 工具链。ABIARM 32-bit 目标存在 armhf 和 armel 两种 ABI文档示例只覆盖 armhfarmel 目标需要使用不同的工具链。CPU 能力ARMv7 目标需确认 VFP 版本和 NEON 支持情况在目标设备上执行cat /proc/cpuinfo查看。用 docker-build 执行交叉构建在 TensorFlow 源码根目录执行make命令指定 target 和 Python 版本。文档给出的两个示例命令armhf 目标对应 Python 3.7make -C tensorflow/lite/tools/pip_package docker-build \ TENSORFLOW_TARGETarmhf PYTHON_VERSION3.7aarch64 目标对应 Python 3.8make -C tensorflow/lite/tools/pip_package docker-build \ TENSORFLOW_TARGETaarch64 PYTHON_VERSION3.8docker-build目标会先构建构建用的 Docker 镜像docker-image再运行容器执行 build_pip_package_with_cmake.sh。执行过程中脚本会自动下载 GCC 8.3 交叉工具链到tensorflow/lite/tools/cmake/toolchains/由 download_toolchains.sh 完成已存在则跳过因此构建过程需要网络访问。Makefile 中的默认值为PYTHON_VERSION3.11、TENSORFLOW_TARGETnative不传参数时就是为本机构建ARM 交叉构建务必显式指定TENSORFLOW_TARGET。Makefile 注释中列出的 target 取值还包括rpi脚本内部会把rpi映射为armhf。如果只想清理已生成的 wheel 和 deb 文件删除产物不影响源码可以运行make -C tensorflow/lite/tools/pip_package clean。构建结果如何验证构建脚本结尾会打印Output can be found here:随后find列出产物位置即tensorflow/lite/tools/pip_package/gen/tflite_pip/python解释器/dist目录下的.whl文件。wheel 的平台名由 target 决定脚本中的对应关系armhf对应linux-armv7lrpi0对应linux-armv6laarch64对应linux-aarch64。检查产物文件名后缀是否符合目标设备是快速确认没有选错 target 的方式。把 wheel 拷贝到目标设备后安装pip install --upgrade wheel其中wheel替换为上一步dist目录中生成的.whl文件名。安装后按 README 中的用法验证解释器可用from tflite_runtime.interpreter import Interpreter interpreter Interpreter(model_pathfoo.tflite)生成的二进制与目标不兼容时的处理如果文档默认的工具链产出的二进制不兼容你的目标设备可以改用自有工具链或自定义编译参数。做法是修改 download_toolchains.sh让它为build_pip_package_with_cmake.sh定义以下两个变量变量作用文档示例ARMCC_PREFIX定义工具链前缀arm-linux-gnueabihf-ARMCC_FLAGS编译参数-marcharmv7-a -mfpuneon-vfpv4文档提示ARMCC_FLAGS可能需要包含 Python 库的 include 路径可参考download_toolchains.sh中现有 target 的写法。修改后重新执行上面的make docker-build命令即可。使用限制该 wheel 只包含 TensorFlow Lite 内置算子不能运行 TensorFlow Select ops目前也不支持注册自定义 ops 和 delegates见 pip_package README 的 Caveats。包安装后使用的是tflite_runtime命名空间而不是tensorflow导入路径与完整 TensorFlow 不同。armel ABI 的 ARM 32-bit 目标不在文档示例范围内需要自行准备工具链参考上文自定义工具链一节。【免费下载链接】tensorflowAn Open Source Machine Learning Framework for Everyone项目地址: https://gitcode.com/GitHub_Trending/te/tensorflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门