课程全程将在SOPHGO(算能)云平台上进行。
本次课程将介绍:
版本环境: 本次课程使用的版本环境适配 SOPHON SDK V2.7.0 和 SOPHON SDK V3.0.0 版本,其他版本可能会出现不兼容的情况。目前课程的云环境版本是SOPHON SDK V2.7.0
参考: https://cloud.sophgo.com/tpu.pdf
# 切换成root权限
sudo -i
cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/scripts
bash ./install_driver_pcie.sh
执行ls /dev/bm*, 如果可以看到以下设备节点,表示驱动安装成功:
apt install unzip
cd /home/sophgo/bmnnsdk2-bm1684-ubuntu-docker-py37/
docker load -i bmnnsdk2-bm1684-ubuntu.docker
cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/
bash ./docker_run_bmnnsdk.sh
# 自动进入Docker容器
cd /workspace/scripts && bash install_lib.sh nntc
# 每次进入镜像都要source
source /workspace/scripts/envsetup_pcie.sh
# 安装sophon包
pip3 install /workspace/lib/sail/python3/pcie/py37/sophon-2.7.0-py3-none-any.whl
可以通过python3 -c "import sophon.sail" 来检查是否出现问题
打开云空间文件系统:
拷贝文件到Docker容器中:
Docker容器的workspace目录被映射到 /home/sophgo/bmnnsdk2-bm1684_v2.7.0/
注意:本教程后续步骤均在Docker容器中进行
仓库链接: https://github.com/leoxiaobin/deep-high-resolution-net.pytorch
论文链接: https://arxiv.org/abs/1902.09212
HRNet pose,是中科大和微软亚洲研究院发布的人体姿态估计模型, 拥有与众不同的并联结构,可以随时保持高分辨率表征。
git clone xxx(待更新)
cd HRNet/v2.7.0/scripts/
bash download_from_nas.sh
BMNETO是针对ONNX的模型编译器,可以把ONNX格式的model经过图编译优化后,转换成BMRuntime所需的文件。在编译模型的同时,可选择将每一个操作的NPU模型计算结果和CPU的计算结果进行对比,保证正确性。 可参考文档 https://doc.sophgo.com/docs/3.0.0/docs_latest_release/nntc/html/usage/bmneto.html
执行以下命令转为bmodel
bash gen_fp32bmodel.sh
部分输出:
命令:bm_model.bin --info xxxx.bmodel
bm_model.bin --info compilation/compilation.bmodel
命令:bmrt_test --bmodel xxxxxxx.bmodel
bmrt_test --bmodel compilation/compilation.bmodel
int8模型是原始fp32模型量化后得到的。量化是指将信号的连续取值近似为有限多个离散值的过程。可理解成一种信息压缩的方法。在计算机系统上考虑这个概念,一般用“低比特”来表示。 BM168X支持INT8量化模型的部署。在通用流程中,需要先借助于算能提供的量化工具对fp32模型进行量化。 Qantization-Tools 如下图所示,是算能科技自主开发的网络模型量化工具,它解析各种已训练好的32bit浮点网络模型,生成8bit的定点网络模型。该8bit定点网络模型,可用于算能科技SOPHON系列AI运算平台。在SOPHON运算平台上,网络各层输入、输出、系数都用8bit来表示,从而在保证网络精度的基础上,大幅减少功耗,内存,传输延迟,大幅提高运算速度。
量化的流程是:
- 使用量化数据集生成lmdb格式数据
- 生成FP32 umodel
- 生成INT8 umodel
- 精度测试 (可选)
- 生成INT8 bmodel
在SophonSDK v3.0.0版本中,提供了使用一键假数据实现量化,对应脚本gen_int8bmodelv3.0.sh.
通过执行以下命令可以生成INT8 bmodel(这里不涉及精度测试,过程用时较长)。
bash gen_int8bmodel.sh
部分输出:
要在x86 PCIe平台使用bm_opencv可添加环境变量如下:
export PYTHONPATH=$PYTHONPATH:$REL_TOP/lib/opencv/pcie/opencv-python/
文件参数
bmodel.py [-h] [--bmodel-path BMODEL_PATH] [--img-root IMG_ROOT]
[--json-file JSON_FILE] [--out-img-root OUT_IMG_ROOT]
[--kpt-thr KPT_THR] [--radius RADIUS] [--thickness THICKNESS]
optional arguments:
-h, --help show this help message and exit
--bmodel-path BMODEL_PATH
bmodel path
--img-root IMG_ROOT Image root
--json-file JSON_FILE
Json file containing image info.
--out-img-root OUT_IMG_ROOT
Root of the output img file. Default not saving the
visualization images.
--kpt-thr KPT_THR Keypoint score threshold
--radius RADIUS Keypoint radius for visualization
--thickness THICKNESS
Link thickness for visualization
执行以下命令即可实现推理(路径已经处理好)
cd ../python
# FP32 BModel
python3 bmodel.py # 默认BModel为../dataset/mmpose_fp32.bmodel
# INT8 BModel
python3 bmodel.py --bmodel-path ../dataset/mmpose_int8b1.bmodel
输出(FP32与INT8大同小异):
预测的可视化结果保存在 ./vis_results文件夹下
注意: 由于是在Docker容器中,如果想要看到推理的可视化结果需要退出容器,并打开Docker容器映射的文件夹,在对应位置将图片拷贝到
/tmp 文件夹下后可在云平台文件系统中下载。
# 退出容器
exit
# 进入Docker容器映射的文件夹,即Docker容器中的 workspace/目录
cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/
# 打开hrnet项目, ${hrnet}即项目所在路径
cd ${hrnet}/python/vis_results
# 拷贝需要的推理结果图片
cp *.jpg /tmp/
如图所示
结果展示:
样例开源仓库:https://github.com/sophon-ai-algo/examples
BM1684 BMNNSDK文档:https://developer.sophgo.com/site/index/document/6/all.html
编译工具用户开发手册: https://doc.sophgo.com/docs/2.7.0/docs_latest_release/nntc/html/index.html
量化工具用户开发手册: https://doc.sophgo.com/docs/2.7.0/docs_latest_release/calibration-tools/html/index.html
算能量化工具介绍及使用说明:https://www.bilibili.com/video/BV1DA4y1S75p?spm_id_from=333.999.0.0
官网视频教程:https://developer.sophgo.com/site/index/course/all/all.html
官网文档中心:https://developer.sophgo.com/site/index/document/all/all.html
官网下载中心:https://developer.sophgo.com/site/index/material/all/all.html
官网论坛:https://developer.sophgo.com/forum/view/43.html