算能竞赛硬件答疑与常见问题

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 官网 查阅相关资料并参考相应博客,实现对于自己模型的移植。

2. 模型的选择

在确认自己小组的选题后,该选择 / 制作相应的模型了,但在这之前,请参阅MLIR工具链中支持的算子(TPU-MLIR快速入门手册/15.附录06:已支持的算子),确保自己的模型中的算子均被支持,以免出现模型无法正常部署的情况。

2.1 用户自定义算子

若您认为所开发的模型性能卓越、功能强大,且对其应用有明确需求,但遇到模型中包含不受支持的算子,建议首先尝试替换这些算子为受支持的等效算子。如果替换算子后模型的精度或功能受到显著影响,您可以考虑查阅相关文档,并在TPU-MLIR框架中实现自定义算子,以便完成模型的有效部署。请参见以下链接:

  • TPU-MLIR开发参考手册 / 用户自定义算子

3. 项目优化加速

我们推荐先按照正常开发流程,确保项目能够运行的前提下,再使用相应的对于TPU进行适配的相应工具进行优化加速。可以参考的加速项目介绍如下。

3.1 模型加速

模型从ptonnx 等格式通过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中的注意事项

在优化时,可以留意以下接口的使用,这些接口的使用方法详见各文档:

  1. sail.Engine Engine

    可以实现 bmodel 的加载与管理,是实现模型推理的主要模块。

  2. sail.BMImage

    BMImage 封装了一张图片的全部信息,可利用Bmcv接口将BMImage 转换为Tensor 进行模型推理。 BMImage 也是通过 Bmcv 接口进行其他图像处理操作的基本数据类型。

  3. sail.Decoder

    解码器,可实现图像或视频的解码。

  4. sail.Encoder

    编码器,可实现图像或视频的编码,以及保存视频文件、推rtsp/rtmp流。

  5. 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。

其他问题

  1. 运行df -h命令来检查根目录的磁盘空间使用情况。若满,请考虑将文件转移到其他有可用空间的分区。如果需要根本性的解决办法,可以考虑增加硬盘容量。

  2. 系统崩了,重装系统。

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

在提问题时候,文字需包含:

  1. 使用了什么工具(版本号)

  2. 执行了什么命令

  3. 遇到了什么问题

  4. 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

(该链接已失效,仅作为提问参考)

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值