树莓派4b(armv8) 64位系统源码编译onnx实战指南
1. 环境准备从零搭建树莓派4B开发环境在树莓派4B上编译ONNX源码之前我们需要先确保系统环境配置正确。我用的是一台4GB内存版本的树莓派4B系统是最新的Raspberry Pi OS 64位版本。这里有个小细节要注意很多教程还在用32位系统但64位系统能更好地发挥ARMv8架构的性能优势。首先确认系统架构这是最容易踩坑的地方。打开终端输入uname -a如果输出中包含aarch64字样说明是64位系统。我的输出是这样的Linux raspberrypi 6.1.21-v8 #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux接下来更新系统软件包这一步很重要可以避免很多依赖问题sudo apt update sudo apt upgrade -y sudo apt install build-essential cmake git -y我建议给树莓派加个散热风扇编译过程CPU负载会很高。实测编译时温度能到70℃以上过热会导致降频严重影响编译速度。另外最好准备5V 3A的电源供电不足会导致编译中途失败。2. 依赖安装那些官方文档没告诉你的细节ONNX的依赖项比想象中复杂特别是对Python环境的要求。我强烈建议使用Python 3.9的虚拟环境避免污染系统Python环境sudo apt install python3-venv python3 -m venv onnx_env source onnx_env/bin/activate接下来安装基础依赖pip install --upgrade pip pip install numpy scipy pytestpybind11的编译是个关键环节。我试过直接用apt安装但版本太旧会导致后续ONNX编译失败。必须从源码编译最新版git clone https://github.com/pybind/pybind11.git cd pybind11 mkdir build cd build cmake -DPYBIND11_TESTOFF .. make -j$(nproc) sudo make install这里有个小技巧-j$(nproc)会自动使用所有CPU核心加速编译。我的树莓派4B是四核的编译时间从15分钟缩短到5分钟。编译完成后记得检查安装是否成功python -c import pybind11; print(pybind11.__version__)3. ONNX源码编译踩坑实录与解决方案终于到重头戏了先获取ONNX源码git clone --recursive https://github.com/onnx/onnx.git cd onnx现在ONNX官方已经弃用直接运行setup.py的方式改用build工具。这是我踩过最大的坑pip install build python -m build -w编译过程大概需要30-60分钟取决于你的树莓派配置。我遇到了几个典型问题内存不足编译时内存占用可能超过1GB。如果出现编译失败可以尝试sudo nano /etc/dphys-swapfile把CONF_SWAPSIZE改成2048然后重启服务sudo /etc/init.d/dphys-swapfile restart依赖版本冲突如果遇到protobuf相关错误可以尝试pip install protobuf3.20.3编译完成后在dist目录下会生成.whl文件直接安装即可pip install dist/onnx-1.15.0-cp39-cp39-linux_aarch64.whl验证安装是否成功python -c import onnx; print(onnx.__version__)4. 性能优化与实用技巧编译完成后我们可以做些优化让ONNX运行更高效。首先启用ARMv8的特性支持export ONNX_ML1 export CFLAGS-marcharmv8-a对于需要频繁使用ONNX的场景建议安装onnxruntime以获得更好的性能pip install onnxruntime我测试过一个简单的MNIST模型在树莓派4B上的推理速度纯ONNX: 约120ms/次ONNX Runtime: 约45ms/次如果经常需要重新编译可以写个自动化脚本。这是我的compile_onnx.sh#!/bin/bash set -e # 设置编译环境 export MAKEFLAGS-j$(nproc) export CFLAGS-marcharmv8-a -O3 # 清理旧编译 rm -rf build dist # 开始编译 python -m build -w pip install --force-reinstall dist/*.whl echo ONNX编译安装完成最后提醒大家树莓派的IO性能是瓶颈建议使用高速TF卡或者外接SSD。我实测编译时间普通TF卡: 约55分钟高速SSD: 约35分钟
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2451534.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!