2. 重要概念
2.1. 名词解释
名词 |
说明 |
BM1688/CV186AH |
算能面向深度学习领域推出的两款第五代张量处理器 |
BM1684X |
算能面向深度学习领域推出的第四代张量处理器 |
BM1684 |
算能面向深度学习领域推出的第三代张量处理器 |
智能视觉深度学习处理器 |
BM1688/CV186AH,BM1684/BM1684X中的神经网络运算单元 |
VPU |
BM1688/CV186AH,BM1684/BM1684X中的编解码单元 |
VPP |
BM1684/BM1684X中的图形运算加速单元 |
VPSS |
BM1688/CV186AH中的的视频处理子系统,包括图形运算加速单元以及解码单元,也称为VPP |
JPU |
BM1688/CV186AH,BM1684/BM1684X中的图像JPEG编解码单元 |
SOPHONSDK |
算能基于BM1688/CV186AH,BM1684/BM1684X的原创深度学习开发工具包 |
PCIe Mode |
BM1688/CV186AH,BM1684/BM1684X的一种工作形态,作为加速设备来进行使用 |
SoC Mode |
BM1688/CV186AH,BM1684/BM1684X的一种工作形态,本身作为主机独立运行,客户算法可以直接运行其上 |
arm_pcie Mode |
BM1684/BM1684X的一种工作形态,搭载BM1684/BM1684X的板卡作为PCIe从设备插到ARM处理器的服务器上,客户算法运行于ARM处理器的主机上 |
BMCompiler |
面向智能视觉深度学习处理器研发的深度神经网络的优化编译器,可以将深度学习框架的各种深度神经网络转化为处理器上运行的指令流 |
BMRuntime |
智能视觉深度学习处理器推理接口库 |
BMCV |
图形运算硬件加速接口库 |
BMLib |
在内核驱动之上封装的一层底层软件库,设备管理、内存管理、数据搬运、API发送、A53使能、功耗控制 |
mlir |
由TPU-MLIR生成的中间模型格式,用于迁移或者量化模型 |
BModel |
面向智能视觉深度学习处理器的深度神经网络模型文件格式,其中包含目标网络的权重(weight)、指令流等 |
BMLang |
面向智能视觉深度学习处理器的高级编程模型,用户开发时无需了解底层硬件信息 |
TPUKernel |
基于智能视觉深度学习处理器原子操作(根据BM1688/CV186AH,BM1684/BM1684X指令集封装的一套接口)的开发库。 |
SAIL |
支持Python/C++接口的SOPHON Inference推理库,是对BMCV、sophon-media、 BMLib、BMRuntime等的进一步封装 |
TPU-MLIR |
智能视觉深度学习处理器编译器工程,可以将不同框架下预训练的神经网络,转化为可以在算能智能视觉深度学习处理器上高效运算的bmodel |
2.2. 工作模式
SOPHON BM168X系列产品涵盖了从末端到边缘到中枢的多种产品形态,可以支持两种不同的工作模式,分别对应不同的产品形态,具体信息如下:
BM168X |
SoC模式 |
PCIe模式 |
独立运行 |
是,BM168X即为独立主机,算法运行在BM168X上 |
否,算法部署在X86或ARM主机,推理运行在PCIe卡 |
对外IO方式 |
千兆以太网 |
PCIe接口 |
对应产品 |
微服务器/模组 |
PCIe加速卡 |
2.3. 开发环境与运行环境
开发环境是指用于模型转换或验证以及程序编译等开发过程的环境;运行环境是指在具备SOPHON设备的平台上实际使用设备进行算法应用部署的运行环境。
开发环境与运行环境可能是统一的(如插有PCIE加速卡的x86主机,既是开发环境又是运行环境),也可能是分离的(如使用x86主机作为开发环境转换模型和编译程序,使用SoC模式的加速盒子部署运行最终的算法应用)。
但是,无论您使用的产品是SoC模式还是PCIe模式,您均需要一台x86主机作为开发环境,您的运行环境可以是任何我们已经测试支持的系统平台。
2.4. 硬件内存
内存是BM168X应用调试中经常会涉及的重要概念,特别地,有以下3个概念需要特别区分清楚:Global Memory、Host Memory、Device Memory。
全局内存(Global Memory): 指BM168X的片外存储DDR,对BM1684来说,通常为12GB,最大支持定制为16GB。 BM1688/CV186AH设备请参考SE9产品手册。
设备内存(Device Memory)和系统内存(Host Memory): 根据BM168X产品类型或工作模式的不同,设备内存和系统内存具有不同的含义:
模式 |
SoC模式 |
PCIe模式 |
产品 |
SM5/SE5/SM7/SE7 |
SC5/SC5H/SC5+/SC7FP75/SC7HP75 |
Global Memory |
最大4GB Tensor Computing Processor 专用 最大3GB VPU 专用 最大4GB VPP 专用 (剩余内存供主控Cortex A53使用) |
最大4GB Tensor Computing Processor专用 4GB VPU专用 4GB VPP/A53专用 4GB VPP/A53专用 |
Host Memory |
主控Cortex A53的内存 |
主机内存 |
Device Memory |
划分给Tensor Computing Processor/VPP/VPU的设备内存 |
PCIe板卡上的物理内存(Global Memory) |
内存同步问题是后续应用调试中经常会遇到的比较隐蔽的重要问题。我们在sophon-opencv和sophon-ffmpeg两个框架内都提供了内存同步操作的函数; 而BMCV API只面向设备内存操作,因此不存在内存同步的问题,在调用BMCV API前,需要将输入数据在设备内存上准备好; 我们在BMLib中提供了接口,可以实现Host Memory和Global Memory之间、Global Memory内部以及不同设备的Global Memory之间的数据搬运。 更多详细信息请参考《 BMLIB开发参考手册 》和《 多媒体开发参考手册 》。
2.5. BModel
BModel: 是一种面向算能智能视觉深度学习处理器的深度神经网络模型文件格式,其中包含目标网络的权重(weight)、指令流等等。
Stage: 支持将同一个网络的不同batch size的模型combine为一个BModel;同一个网络的不同batch size的输入对应着不同的stage,推理时BMRuntime会根据输入shape的大小自动选择相应stage的模型。也支持将不同的网络combine为一个BModel,通过网络名称来获取不同的网络。
动态编译和静态编译: 支持模型的动态编译和静态编译,可在转换模型时通过参数设定。动态编译的BModel,在Runtime时支持任意小于编译时设置的shape的输入shape;静态编译的BModel,在Runtime时只支持编译时所设置的shape。
备注
优先使用静态编译的模型: 动态编译模型运行时需要BM168X内微控制器ARM9的参与,实时地根据实际输入shape,动态生成智能视觉深度学习处理器运行指令。因此,动态编译的模型执行效率要比静态编译的模型低。若可以,应当优先使用静态编译的模型或支持多种输入shape的静态编译模型。
2.6. bm_image
BMCV: BMCV提供了一套基于 SOPHON Deep learning 处理器优化的机器视觉库,通过利用处理器的 Tensor Computing Processor 和 VPP 模块,可以完成色彩空间转换、尺度变换、仿射变换、透射变换、线性变换、画框、JPEG编解码、BASE64编解码、NMS、排序、特征匹配等操作。
bm_image: BMCV api 均是围绕 bm_image 来进行的,一个 bm_image 对象对应于一张图片。用户通过 bm_image_create 来构建 bm_image 对象,然后供各个 bmcv 的功能函数使用,使用完需要调用 bm_image_destroy 销毁。
BMImage: SAIL库中将bm_image封装为BMImage,相关信息请参考《 SOPHON-SAIL用户手册 》。
如下是bm_image结构体及相关数据格式定义:
1typedef enum bm_image_format_ext_{
2 FORMAT_YUV420P,
3 FORMAT_YUV422P,
4 FORMAT_YUV444P,
5 FORMAT_NV12,
6 FORMAT_NV21,
7 FORMAT_NV16,
8 FORMAT_NV61,
9 FORMAT_RGB_PLANAR,
10 FORMAT_BGR_PLANAR,
11 FORMAT_RGB_PACKED,
12 FORMAT_BGR_PACKED,
13 PORMAT_RGBP_SEPARATE,
14 PORMAT_BGRP_SEPARATE,
15 FORMAT_GRAY,
16 FORMAT_COMPRESSED
17} bm_image_format_ext;
18
19typedef enum bm_image_data_format_ext_{
20 DATA_TYPE_EXT_FLOAT32,
21 DATA_TYPE_EXT_1N_BYTE,
22 DATA_TYPE_EXT_4N_BYTE,
23 DATA_TYPE_EXT_1N_BYTE_SIGNED,
24 DATA_TYPE_EXT_4N_BYTE_SIGNED,
25}bm_image_data_format_ext;
26
27// bm_image结构体定义如下
28struct bm_image {
29 int width;
30 int height;
31 bm_image_format_ext image_format;
32 bm_data_format_ext data_type;
33 bm_image_private* image_private;
34};