1. 资料获取来源
1.1 SDK获取渠道
1.1.1 SDK是什么
SDK全称为Software Development Kit,中文意思是“软件开发工具包”。它是由硬件平台、操作系统(OS)或编程语言的制造商提供的一套工具集,旨在帮助软件开发人员更高效地为特定的平台、系统或编程语言创建应用程序。
Sophon-SDK说明如下:2.2.2. SophonSDK — Sophon Inference 3.0.0 文档 (sophgo.com)
1.1.2 下载路径
可以从此处找到历史发行版本的SDK并下载:技术资料 (sophgo.com)](技术资料)
从左侧选择对应版本号的SDK,优先考虑选择LTS(长期支持)版本。然而,如果非LTS版本的SDK版本号更新于LTS版本,且包含新增特性,您可以根据需要灵活尝试。在每个SDK中,您会发现一个包含doc
文件夹的工具目录,其中提供了相关的使用说明。
1.2 硬件使用指南
1.2.1 少林派开发板(BM1684处理器)
开发板的使用教程参见 少林派开发板实践课程 (sophon.cn) ,如在使用过程中遇到任何问题,请首先查阅相关文档。如果文档中未提供解决方案,请联系“硬十”客服,他们会提供更优质的解答
1.2.2 Airbox微服务器(白色-BM1684X处理器)
开发板的使用教程参见 README.md · zilla0717/AirboxWiki - Gitee.com ,如在使用过程中遇到任何问题,请首先查阅相关文档。如果文档中未提供解决方案,请找相应客服,他们会提供更优质的解答
1.2.3 Fogwise Airbox(黑色-BM1684X处理器)
开发板的使用教程参见 Docs (docs.radxa.com) ,如在使用过程中遇到任何问题,请首先查阅相关文档。如果文档中未提供解决方案,请找相应客服,他们会提供更优质的解答
1.2.4 对于DUO系列开发板
板子的使用教程参见 🚀 入门指南 | Milk-V (milkv.io) ,如在使用过程中遇到任何问题,请首先查阅相关文档。如果文档中未提供解决方案,请找相应客服,他们会提供更优质的解答
1.3 TPU-MLIR 工具链相关资料
除了下载的SDK中的doc文档内的《快速使用指南》和《开发参考手册》外,还可以从 TPUMLIR 官网 查阅相关资料并参考相应博客,实现对于自己模型的移植。
-
TPU-MLIR视频教程:TPU-MLIR系列讲解(一):AI编译器是啥?-哔哩哔哩
2. 模型的选择
在确认自己小组的选题后,该选择 / 制作相应的模型了,但在这之前,请参阅MLIR工具链中支持的算子(TPU-MLIR快速入门手册/15.附录06:已支持的算子),确保自己的模型中的算子均被支持,以免出现模型无法正常部署的情况。
2.1 用户自定义算子
若您认为所开发的模型性能卓越、功能强大,且对其应用有明确需求,但遇到模型中包含不受支持的算子,建议首先尝试替换这些算子为受支持的等效算子。如果替换算子后模型的精度或功能受到显著影响,您可以考虑查阅相关文档,并在TPU-MLIR框架中实现自定义算子,以便完成模型的有效部署。请参见以下链接:
-
TPU-MLIR开发参考手册 / 用户自定义算子
3. 项目优化加速
我们推荐先按照正常开发流程,确保项目能够运行的前提下,再使用相应的对于TPU进行适配的相应工具进行优化加速。可以参考的加速项目介绍如下。
3.1 模型加速
模型从pt
、onnx
等格式通过TPU-MLIR工具转化为bmodel
3.2 sophon-sail
3.2.1 什么是sophon-sail
SAIL (Sophon Artificial Intelligent Library) 是 sophon-sail 中的核心模块。SAIL 对 SophonSDK 中的 BMLib、BMDecoder、BMCV、BMRuntime 进行了封装,将 SophonSDK 中原有的“加载bmodel 并驱动TPU推理”、“驱动TPU做图像处理”、“驱动VPU做图像 和视频解码”等功能抽象成更为简单的C++接口对外提供;并且使用pybind11再次封装, 提供简洁易用的python接口。
3.2.2 如何使用sophon-sail
sophon-sail不同版本的特性差异较大,请根据使用的版本参考相应的文档,避免出现文档与sail版本不匹配,从而出现无法使用的情况。sail在SDK中有集成,打开所下载的SDK就能看到。
sail在使用之前,请先查看开发板的 GLIBC
版本,然后选择不高于开发板的 GLIBC
版本的x86_64 linux电脑进行交叉编译,交叉编译详见sail文档。
查看GLIBC版本:
# x86_64电脑:
strings /lib/x86_64-linux-gnu/libc.so.6 | grep "GLIBC_"
# 开发板:
strings /lib/aarch64-linux-gnu/libc.so.6 | grep "GLIBC_"
如图,开发板的GLIBC最高到2.30,故在交叉编译时,x86_64电脑的GLIBC版本也不得高于此。
4.2.3 sophon-sail中的注意事项
在优化时,可以留意以下接口的使用,这些接口的使用方法详见各文档:
-
sail.Engine Engine
可以实现 bmodel 的加载与管理,是实现模型推理的主要模块。
-
sail.BMImage
BMImage 封装了一张图片的全部信息,可利用Bmcv接口将BMImage 转换为Tensor 进行模型推理。 BMImage 也是通过 Bmcv 接口进行其他图像处理操作的基本数据类型。
-
sail.Decoder
解码器,可实现图像或视频的解码。
-
sail.Encoder
编码器,可实现图像或视频的编码,以及保存视频文件、推rtsp/rtmp流。
-
sail.Bmcv Bmcv
封装了常用的图像处理接口,支持硬件加速。
4. 其他常见的问题
如何更换apt的源
此处以清华大学镜像源为例,使用其他镜像源时,请确保使用ubuntu-ports
链接:ubuntu-ports | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
在使用apt命令时,板子网络连接正常,但显示连接超时,如何处理
请确保板子的ipv6连接是正常的,如果不行,可以强制apt使用ipv4连接,参考如下:
Ubuntu apt-get 强制使用 ipv4-CSDN博客
如何从摄像头采集视频并推rtsp/rtmp流
开发板自带ffmpeg
工具,可以尝试用其推成jpeg格式并用sail.decoder进行解码
板子ffmpg
工具部分编译参数如下
configuration:
--enable-cross-compile
--cross-prefix=aarch64-linux-gnu-
--target-os=linux
--arch=aarch64
--cpu=cortex-a53
--pkg-config=pkg-config
--optflags=
--enable-static
--enable-shared
--enable-pic
--enable-swscale
--enable-libfreetype
--enable-libmp3lame
--enable-bmcodec
--enable-encoder=jpeg_bm
--enable-decoder=jpeg_bm
--disable-decoder=vc1_bm
--disable-decoder=wmv1_bm
--disable-decoder=wmv2_bm
--enable-zlib
--disable-autodetect
--disable-decoder=wmv3_bm
--disable-decoder=mpeg1_bm
--disable-decoder=mpeg2_bm
--disable-decoder=mpeg4_bm
--disable-decoder=mpeg4v3_bm
--disable-decoder=flv1_bm
--disable-decoder=h263_bm
--disable-decoder=cavs_bm
--disable-decoder=avs_bm
--disable-decoder=vp3_bm
--disable-decoder=vp8_bm
--enable-openssl
--disable-encoder=bmx264
--disable-sdl2
--disable-ffplay
--disable-decoder=h264_v4l2m2m
--disable-vaapi
--disable-hwaccel=h263_vaapi
--disable-hwaccel=h264_vaapi
--disable-hwaccel=hevc_vaapi
--disable-hwaccel=mjpeg_vaapi
--disable-hwaccel=mpeg2_vaapi
--disable-hwaccel=mpeg4_vaapi
--disable-hwaccel=vc1_vaapi
--disable-hwaccel=vp8_vaapi
--disable-hwaccel=vp8_vaapi
--disable-hwaccel=wmv3_vaapi
--extra-ldflags='-L/workspace/middleware-soc/buildit/release/bmvid/lib -L/workspace/middleware-soc/buildit/release/bmvid/lib -L/workspace/middleware-soc/buildit/release/bmvid/lib -L/workspace/middleware-soc/buildit/release/bmvid/lib -L/workspace/middleware-soc/buildit/release/bmvid/lib -L/workspace/middleware-soc/bm_opencv/3rdparty/libbmcv/lib/soc -Wl,-rpath=/workspace/middleware-soc/bm_opencv/3rdparty/libbmcv/lib/soc -L/workspace/middleware-soc/prebuilt/lib -Wl,-rpath=/workspace/middleware-soc/prebuilt/lib' --extra-libs='-Wl,--start-group -lbmvideo -lrt -lssl -lcrypto -ldl -lresolv -lstdc++ -lgb28181_sip -lvpp_cmodel -lm -lbmion -lbmvpulite -lbmvpuapi -lbmvppapi -lbmjpulite -lbmjpuapi -lbmcv -lbmlib -Wl,--end-group' --extra-cflags='-I/workspace/middleware-soc/buildit/release/bmvid/include -I/workspace/middleware-soc/buildit/release/bmvid/include -I/workspace/middleware-soc/buildit/release/bmvid
usb摄像头需要安装驱动,但提示没有headers,如何处理
可以先更新软件源
sudo apt-get update
然后运行这个文件即可
推荐使用免驱摄像头
如何使用混精度开发
可以把一些损失较为严重的层使用fp32量化,在model_deploy
时,指定参数--test_input
和 --test_rusult
,可以通过加入--test_all
,--debug
参数,看看哪层精度掉了,对比全部的层,更精准定位问题
使用INT8精度量化,性能不降反增,这是什么原因
INT8性能不降反增可能是和layergroup有关,这是一个比较棘手的问题,因为并非所有模型都支持int8格式,所以这种情况在某些模型中是预期内的。
layergroup:TPUMLIR 开源工具链项目 | LayerGroup
在模型移植时候,我把芯片指定为1684X就可以,但是1684就不行,这是什么原因
某些算子已针对BM1684X进行了优化,但由于其他原因,尚未对BM1684进行同样的适配,因此这些算子不支持BM1684。
其他问题
-
运行
df -h
命令来检查根目录的磁盘空间使用情况。若满,请考虑将文件转移到其他有可用空间的分区。如果需要根本性的解决办法,可以考虑增加硬盘容量。 -
系统崩了,重装系统。
5. 如何正确提问
ZH:GitHub - tvvocold/How-To-Ask-Questions-The-Smart-Way: How To Ask Questions The Smart Way 《提问的智慧》中文版
EN:http://www.catb.org/~esr/faqs/smart-questions.html
在提问题时候,文字需包含:
-
使用了什么工具(版本号)
-
执行了什么命令
-
遇到了什么问题
-
log是什么(log须保证报错完整)
P.S. 对于一直模型出现的问题,请提供转 mlir 文件直至转 bmodel 文件的所有命令和相应输出
例:
在使用mlir工具对于使用了cubic差值的模型进行转换时,出现了如下错误: log如下:https://mappland.top/wordpress/index.php/archives/226 模型地址:https://mappland.top/files/milr/l1_1.onnx
(该链接已失效,仅作为提问参考)