飞腾X100 NPU Benchmark使用说明

news2024/11/30 8:43:58
   【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧

image.png

 本文分享至飞腾开发者平台《飞腾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做了如下修改:

image.png

  其中,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。

image.png

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命中率:

image.png

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):

image.png

推荐阅读

  • 飞腾X100NPU应用SDK使用手册
  • 飞腾X100适配OpenEuler说明

欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料

如开发者在使用飞腾产品有任何问题可通过在线工单联系我们


版权所有。飞腾信息技术有限公司 2023。保留所有权利。

未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。

商标声明

Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2226934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka消费者故障,出现活锁问题如何解决?

大家好,我是锋哥。今天分享关于【Kafka消费者故障,出现活锁问题如何解决?】面试题?希望对大家有帮助; Kafka消费者故障,出现活锁问题如何解决? 1000道 互联网大厂Java工程师 精选面试题-Java资…

Objective-C 音频爬虫:实时接收数据的 didReceiveData_ 方法

在互联网技术领域,数据的获取和处理是至关重要的。尤其是对于音频内容的获取,实时性和效率是衡量一个爬虫性能的重要指标。本文将深入探讨在Objective-C中实现音频爬虫时,如何高效地使用didReceiveData:方法来实时接收数据,并通过…

Spring Boot 3项目创建与示例(Web+JPA)

以下是一个Spring Boot 3.3.4整合JPA的示例,它展示了如何在Spring Boot应用程序中使用JPA进行数据持久化。 版本与环境 Spring Boot 3.3.4数据库: MySQL 8.0.40, MySQL的安装使用可以参考: MySQL 8 下载与安装攻略JDK 17Maven 3.6项目创建 可以使用Spring Initializr 初始…

深度学习:SGD的缺点

首先看下述函数: 最小值为x0,y0处 先了解下它的梯度特征。了理解其梯度特征,我们需要计算其梯度向量。 梯度向量 ∇f 是函数 f 在每个变量方向上的偏导数组成的向量。具体来说: ∇f(∂f/∂x,∂f∂/y) 首先,我们计算 f …

时间序列预测(十五)——有关Python项目框架的实例分析

#1024程序员节|征文# 在之前的学习中,已经对时间序列预测的相关内容有了大致的了解。为了进一步加深理解,并能够将所学知识应用于实际中,我决定找一个完整的Python框架来进行深入学习。经过寻找,我终于找到了一篇非常具…

电脑技巧:如何进行磁盘测速?

磁盘测速是指通过专业工具或系统自带功能,测量硬盘的读写速度。这一过程能够帮助用户了解磁盘的性能瓶颈,并为硬件升级或系统优化提供数据依据。特别是在处理大量数据或运行高负载应用时,磁盘速度是决定系统性能的关键因素。 影响磁盘速度的因…

Web 核心指标优化之 INP 篇

这篇文章是我在公司做 INP 优化经验分享的演讲稿。 大家好,今天我要做的分享是关于 INP 的一些优化经验。 概念 首先,什么叫 INP 呢。 INP 的全称叫 Interaction to Next Pain ,翻译过来就是从交互到下一次绘制的延迟。这是 Google 提出来的…

C#与C++互操作时的数据类型对应

C#和C在互操作时,会涉及到数据类型对应的问题,如果数据类型用得不对,就会得不到想要的结果,严重的情况下,可能还会导致程序崩溃。这里做一下相关知识点的总结。 说明: 1. 表格第一列是Visual C中的数据类型…

【Docker大揭秘】

Docker 调试一天的血与泪的教训:设备条件:对应的build preparation相应的报错以及修改 作为记录 构建FASTLIO2启动docker获取镜像列出镜像运行containerdocker中实现宿主机与container中的文件互传 调试一天的血与泪的教训: 在DOCKER中跑通F…

numpy——数学运算

一、标量——矢量 import numpy as npa 3.14 b np.array([[9, 5], [2, 7]])print(a) print(b)# ---------- 四则运算 ---------- print(a b) # np.add print(a - b) # np.subtract print(a * b) # np.multiply print(a / b) # np.divide 二、矢量——矢量 import nump…

Claude Financial Data Analyst:基于Claude的金融数据分析工具!免费开源!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

MPC模型预测控制与RL强化学习的差异性

模型预测控制(Model Predict Control,MPC) 模型预测控制与强化学习的差异性调研 概述 MPC 是一种使用数学模型在有限时间内实时优化控制系统的技术,自二十世纪六七十年代问世以来,已广泛应用于化学工程、炼油、先进…

Java:String类(超详解!)

一.常用方法 🥏1.字符串构造 字符串构造有三种方法: 📌注意: 1. String是引用类型,内部并不存储字符串本身 如果String是一个引用那么s1和s3应该指向同一个内容,s1和s2是相等的,应该输出两…

《深度学习》模型的部署、web框架 服务端及客户端案例

目录 一、模型的部署 1、模型部署的定义与目的 1)定义 2)目的 2、模型部署的步骤 1)导出模型 2) 部署模型 3)测试模型 4)监控模型 3、模型部署的方式 1)云端部署 2)嵌入…

autMan奥特曼机器人-对接Docker版本NTQQ详细教程

准备 1、准备一台服务器,amd64/arm64都可以,配置最好还是2核保底吧。 2、准备一个VNC软件。1Remote:点此下载 3、准备手机登陆机器人QQ号,扫码 NTQQ相关 NTQQ一键脚本(适用于小白支持autMan/无界) 复制以…

linux标准 I/O

FILE 指针标准输入、标准输出和标准错误检查或复位状态I/O 缓冲控制文件 I/O 内核缓冲的标志直接 I/O:绕过内核缓冲stdio 缓冲 FILE 指针 FILE 是一个结构体数据类型,它包含了标准 I/O 库函数为管理文件所需要的所有信息,包括用于实际I/O 的…

基于Spring Boot的宿舍管理系统设计与实现(源码+定制+开发)宿舍信息管理平台、智能宿舍系统开发、学生宿舍管理平台设计、宿舍入住与信息管理

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

单节点kubernetes-1.20二进制部署

文章目录 一, 集群拓扑二,架构图三,前置准备1.环境准备1.1操作系统初始化配置(1)关闭防火墙(2)关闭selinux(3)关闭swap(4)根据规划设置主机名(5&a…

[简易版] 自动化脚本

前言 uniapp cli项目中没办法自动化打开微信开发者工具,需要手动打开比较繁琐,故此自动化脚本就诞生啦~ 实现 const spawn require("cross-spawn"); const chalk require("picocolors"); const dayjs require("dayjs&quo…

实战教程:利用Docker容器化技术部署Szurubooru图像分享平台

实战教程:利用Docker容器化技术部署Szurubooru图像分享平台 一、Szurubooru介绍1.1 Szurubooru简介1.2 主要特点1.3 主要使用场景 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker comp…