【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧
本文分享至飞腾开发者平台《飞腾X100 NPU Benchmark使用手册》
1 benchmark测试样例概况
1.1 介绍
benchmark测试样例旨在向用户提供,经过ncsdk转换编译的深度学习模型,在飞腾x100套件nna模块上运行。测试样例包含了常用的深度学习模型,以及相应的运行测试源码,用户可以根据本文档的说明直接运行源码,得到相应模型的性能参数。同时,用户可以参考测试源码,撰写代码,调用测试自己的模型。
1.2 文件目录
- 测试源码文件夹:该文件夹以模型名称命名,如resnet50, yolov5, inceptionv2等,文件夹中包括:
1)测试样例源码,以.py结尾的python程序;
2)转换编译完成的模型,以.mbs.bin结尾的文件,名称中的i32o32分别表示输入input位宽和输出output位宽,d16表示data内存位宽,w16d16分别表示权重weights位宽和偏置bias位宽;
3)源码运行所需的相关文件,部分模型的调用推理有额外需求,如retinanet中包含后处理相关的文件夹retinanet_post;
4)custom_ops_cfg_runtime.json:该文件中包含了部分算子的库文件说明,在测试样例中,nna session的构建需要用到该文件。 - nna文件夹:该文件夹包含了模型推理运行所需要的库文件,在运行程序前需要先export该文件夹。
- utils文件夹:该文件夹包含了部分模型推理前后处理的函数实现;
- coco_eval文件夹:该文件夹包含了coco数据集相关的文件以及评估相关的源码,在测试检测模型时会用到该文件夹中的内容。
- imagenet_class_index.json:imagenet验证数据集的类别标签映射,进行分类模型测试时,decode_predictions解析模型预测结果会用到该文件,decode_predictions会自动下载该文件,由于外网访问限制,可能导致下载失败,所以我们进行了手动下载,并对decode_predictions做了如下修改:
其中,imagenet_class_index.json文件的位置被赋值给fpath,此外,decode_predictions由"from keras_applications.imagenet_utils import decode_predictions"导入。
- images:该文件夹包含了少量的测试图片,testImage_imagenet中是13张imagenet数据集中的图片,testImg_coco中是10张coco数据集中的图片。
1.3 测试数据
1.3.1 分类模型测试数据
分类模型采用imagenet数据集的验证集作为测试数据,我们采用的数据集版本是ILSVRC2012,该数据集可以通过imagenet官网下载,下载链接:https://image-net.org/challenges/LSVRC/2012/index.php。验证集包含50000张图片。
1.3.2 检测模型测试数据
检测模型采用coco2017数据集的验证集作为测试数据,coco2017数据集下载地址:https://cloud.tencent.com/developer/article/1765601。验证集包含5000张图片。
2 benchmark测试样例运行
在运行之前,需要安装驱动,进入到驱动所在的文件夹,运行以下三条指令:
sudo insmod img_mem/img_mem_vha.ko
sudo insmod vha/vha.ko
sudo chmod a+rw /dev/vha0
此外,可以通过lsmod指令查看驱动是否完成安装,完成安装如下图所示,可以看到vha和img_mem_vha两个module。
2.1 分类模型
1)如果是在终端首次运行,需要先export nna中的库文件,命令:
export LD_LIBRARY_PATH=/home/test/testProject/nna_model_zoo/nna
其中,"="后接的是nna所在的绝对路径。
2)进入到以模型名称命名的测试源码文件夹,以resnet50为例:
(base) test@test:~/testProject/nna_model_zoo$ cd resnet50
(base) test@test:~/testProject/nna_model_zoo/resnet50$ ls
custom_ops_cfg_runtime.json
resnet50_i32o32_d16_w16b16.mbs.bin
resnet50_i32o32_d8_w8b8.mbs.bin
nna_resnet50_classify_multi-image.py
resnet50_i32o32_d8_w8b16.mbs.bin
其中,"nna_resnet50_classify_multi-image.py"即为resnet50对应的测试源码,".mbs.bin"不同配置下ncsdk转换编译的resnet50模型。
3)测试源码运行参数说明:
- input-imagesDir:指示测试图片所在的文件夹,对于分类模型,默认参数为"'../images/testImage_imagenet/'",测试时该参数对应的是imagenet验证集50000张图片所在的文件夹。
- input-devkitDir:imagenet验证集标签文件所在的文件夹,我们采用的标签是"ILSVRC2012_devkit_t12",下载完成的ILSVRC2012数据集中,可以找到该文件夹。
- net:模型所在的路径,即步骤2中的".mbs.bin"文件。
- mode:session mode,默认为"fpga"模式。
4)测试源码运行,直接通过python运行".py"后缀的python程序即可,根据需要设置运行参数:
python nna_resnet50_classify_multi-image.py
--input-imagesDir /home/test/dataset/ILSVRC2012_data/ILSVRC2012_img_val/ILSVRC2012_img_val/ILSVRC2012_img_val/
--net resnet50_i32o32_d16_w16b16.mbs.bin
5)分类模型的测试结果会输出模型推理的时间信息以及top1和top5命中率:
2.2 检测模型
1)如果是在终端首次运行,需要先export nna中的库文件,命令:
export LD_LIBRARY_PATH=/home/test/testProject/nna_model_zoo/nna
其中,"="后接的是nna所在的绝对路径。
2)进入到以模型名称命名的测试源码文件夹,以yolov5为例:
(base) test@test:~/testProject/nna_model_zoo$ cd yolov5/
(base) test\@test:\~/testProject/nna_model_zoo/yolov5\$ ls
custom_ops_cfg_runtime.json model_part.mbs.bin
yolov5_i32o32_d16_w8b16.mbs.bin model_final.mbs.bin
nna_detection_yolov5.py yolov5_i32o32_d8_w8b16.mbs.bin
其中,"nna_detection_yolov5.py"即为yolov5对应的测试源码,".mbs.bin"不同配置下ncsdk转换编译的yolov5模型。
3)测试源码运行参数说明:
- input-imagesDir:指示测试图片所在的文件夹,对于检测模型,默认参数为"'../images/testImg_coco/'",测试时该参数对应的是coco2017验证集5000张图片所在的文件夹。
- output:检测结果文件夹,即带有检测框的图片或者检测结果txt文件保存的路径,启用该功能需要取消对应代码段的注释,图片结果对应了"#draw box"代码段,txt结果对应了"# saving file for detection results"代码段。
- net:模型所在的路径,即步骤2中的".mbs.bin"文件。
- mode:session mode,默认为"fpga"模式。
4)检测模型的测试采用coco数据集,所以直接利用了pycocotools工具包中的评估功能,可以通过pip install pycocotools进行安装,然后还需要根据实际情况修改coco_eval文件夹下的配置文件coco_eval_cfg.py,其中:
- coco_labelmap_path:指示coco数据集类别标签的对应关系文件路径,即coco_labelmap.txt文件,已在coco_eval文件夹下。
- score_threshold:检测框过滤阈值。
- gt_file:coco2017验证集对应的标签文件的路径,在下载完成的coco2017数据集中,"annotations/instances_val2017.json"。
- det_file:检测模型推理结果保存的文件,主要用于检测模型的评估,因为pycocotools工具包中的评估功能对检测结果的保存格式有相应的要求,所以coco_eval文件夹主要是为了将检测结果保存成符合要求的格式,然后调用pycocotools工具包中的COCOeval完成评估。
5)测试源码运行,直接通过python运行".py"后缀的python程序即可,根据需要设置运行参数:
python nna_detection_yolov5.py
--input-imagesDir /home/test/dataset/cocoDataset/val2017/
--net yolov5_i32o32_d8_w8b16.mbs.bin
检测模型的测试结果会输出模型推理的时间信息以及AP(average precision):
推荐阅读
- 飞腾X100NPU应用SDK使用手册
- 飞腾X100适配OpenEuler说明
欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料
如开发者在使用飞腾产品有任何问题可通过在线工单联系我们
版权所有。飞腾信息技术有限公司 2023。保留所有权利。
未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。
商标声明
Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。
本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。