简介
后摩大道® M50 软件平台是为 后摩漫界® M50系列产品自主研发的AI软件开发平台,能够帮助用户高效开发、调试并部署应用到后摩智能存算一体架构硬件平台,从而降低客户开发及迁移成本,使能客户的差异化设计。软件平台主要由深度学习算子库、开发工具、系统软件等组件构成。
2.1. 重点功能
主要功能包括:
-
提供模型编译、调试、量化、优化等基础工具。
-
针对人工智能网络应用场景,提供高度优化的常用深度学习算子。
-
提供端到端的模型优化及推理业务部署能力。
2.2. 软件平台架构
后摩大道® M50 软件平台架构图如下所示:
图 2.1 软件平台架构图
后摩大道® M50 软件平台包括以下组件:
2.2.1. 系统软件
系统软件包括Firmware和Driver。Firmware(固件)是指SoC底层“驱动程序”,承担着系统最底层工作的软件。Driver(驱动)用于SoC和上层应用之间的通信。
2.2.2. TCIM
TCIM(Tensor Compiler In Memory,后摩神经网络模型编译器)是面向后摩硬件设备的推理加速引擎。基于开源MLIR(Multi-Level Intermediate Representation,多层次中间表示)框架,TCIM能够自动适配不同的后摩设备硬件平台,并通过多层次优化提升推理性能和资源利用率。
详细说明请参看 《TCIM用户指南》和 《TCIM开发者手册》。
2.2.3. HMQuantool
后摩大道® M50 HMQuantool量化工具用于将需要部署在后摩硬件设备上的模型进行解析、图优化和后训练量化(PTQ, Post‑ Training Quantization)。
详细说明请参看 《HMQuantool量化工具用户指南》。
2.2.4. HmUpdateTool
后摩大道® M50 HmUpdateTool 镜像升级工具用于烧写和升级后摩硬件的固件镜像。该工具根据SoC当前系统状态,动态选择镜像升级模式,将镜像写到固件特定分区上。
详细说明请参看 《HmUpdateTool工具使用指南》。
2.2.5. SMI
后摩大道® M50 SMI(System Management Interface,系统管理接口)工具用于管理和监控后摩硬件设备。用户可以通过命令行方式获取硬件的功耗、结温、系统软件版本等信息。
详细说明请参看 《SMI工具使用指南》。
2.2.6. HMDML
后摩大道® M50 HMDML(Houmo Device Management Library,后摩设备管理库)是专为后摩M50系列产品设计的C语言编程接口库,为开发者提供标准化的设备管理能力。
详细说明请参看 《HMDML用户手册》和 《HMDML开发者手册》。
2.2.7. Tool Suite
后摩大道® M50 工具套件为用户提供了一套全面、深入的性能分析和基准测试工具集,用于准确评估和优化目标 AI 芯片的运行效率。
包含的工具如下:
-
模型信息获取工具: 用于提取和展示编译后的模型信息,帮助用户全面了解模型结构、输入输出tensor属性、量化配置,以及模型在后摩设备加载后的内存和计算资源占用情况。
-
芯片算力基准测试工具: 用于评估 M50 芯片的 AI 加速器在计算密集型负载下的实际峰值推理算力。
-
PCIe性能评测工具: 用于评估主机与M50设备之间数据传输通道的读写通信带宽。
-
模型推理性能评测工具: 用于评测网络模型在 M50 后摩设备上的推理性能,帮助用户系统性地分析模型在实际运行环境中的延迟和吞吐量。
-
芯片DDR带宽基准测试工具: 用于评估 M50 芯片 DDR 内存的最大有效带宽。
-
Profiler性能调试工具: 在模型推理过程中收集后摩硬件 IPU 内核指令执行的性能数据,和后摩硬件设备的 DDR 平均带宽和峰值带宽,支持分析瓶颈并优化计算性能。
-
模型转换与评估工具: 为 ModelZoo 模型库中的网络模型提供量化、编译、推理及性能和精度评测功能,实现一键化全流程评测和分析。
-
LLM推理性能评测工具: 用于评测 LLM 模型在 M50 后摩设备上的实际推理性能,帮助用户系统性地分析模型在真实运行环境中的延迟、吞吐量与生成速度。
-
LLM精度评测工具: 用于对部署在M50后摩设备上的LLM模型和vLM模型进行高精度、自动化的精度评测。
-
部署环境检测工具: 用于在实际后摩硬件设备上,对后摩设备部署环境的关键软件版本、硬件参数及核心性能指标进行自动化检测与校验,帮助用户快速评估部署环境的可用性与性能状态。
-
模型权重共享工具: 用于对多个已编译模型执行权重共享与恢复处理,通过剥离模型间的重复权重以降低存储和内存占用,并在需要时可还原为完整可执行模型。
-
Windows 环境部署工具: 用于在后摩设备的 Windows 系统上,一键完成运行后摩大道软件平台提供的应用开发示例所需的环境配置,包括关键环境变量的设置与必要的环境初始化,帮助用户快速具备样例运行条件。
详情参看 《模型转换与评估工具用户指南》。
2.3. 算子列表
2.3.1. 整体约束
- 输入 tensor 的形状必须是固定形状,不支持动态维度。
2.3.2. 支持的ONNX算子列表
后摩大道® M50 软件平台当前支持的ONNX算子(v1.18.0)如下表所示:
| 表 2.1 ONNX算子支持列表 ONNX算子 | 后摩软件平台约束 | ONNX Opset版本 |
|---|---|---|
| Abs | 支持输入输出tensor为2至6维。 | 13 |
| Add |
- 支持输入输出tensor为2至6维;
- 当输入tensor的维度大于 3 时,其每个维度的size不得超过 4096;
| 14
ArgMax |
- 支持输入输出tensor为2至6维;
select_last_index不支持取值为1;
| 13
AveragePool |
- 仅支持4维输入tensor;
- 仅支持
kernel_shape值为:[2, 2]、[3, 3]、[5, 5]或[7, 7]; - 仅支持
strides值为:1或2; - 不支
dilations参数; - 输出tensor的每个维度大小,不得大于输入tensor在对应位置上的维度大小;
- 输入tensor按通道数256对齐后,其数据量须小于或等于1GB(即元素个数 * 数据类型字节数 < = 1024 * 1024 * 1024);
- 仅支持
count_include_pad值为:0; pads取值如下:- 四个方向上的值必须相同,并且仅支持取值为:0或
kernel_shape// 2; - 必须与逆向推导的
pads值相同;
- 四个方向上的值必须相同,并且仅支持取值为:0或
| 22
BatchNormalization |
- 仅支持4维输入tensor;
- 仅支持归一化的维度个数小于或等于3维;
- 仅支持
training_mode值为:0; - 输入tensor每个维度大小不能超过4096;
- 参与归一化规约计算的元素总数不得超过524288(即512K);
| 15
Clip | 支持输入输出tensor为2至6维。 | 13
Concat |
- 仅支持输入tensor个数小于或等于60个;
- 支持输入输出tensor为2至6维;
| 13
Conv |
- 仅支持4维输入tensor;
- 输入tensor按通道数256对齐后,其数据量须小于或等于1GB(即元素个数 * 数据类型字节数 < = 1024 * 1024 * 1024);
pads四个方向上的值必须相同,并且仅支持取值为:0或 ((kernel_shape- 1) / 2);kernel_shape每个维度的size须在[1, 7]范围内,超过需要拆分kernel;- 仅支持
strides值为:1或2; - 仅支持
dilations值为:[1, 1]; - 仅支持
auto_pad值为:NOTSET和VALID; - 当
group > 1时,要求每组输入的通道数(C_in / group)和每组输出 的通道数(M / group),须为64、128、256或256的倍数。其中C_in为 输入tensorX的通道数,M为输出tensorW的通道数;
| 22
ConvTranspose |
- 仅支持4维输入tensor;
- 仅支持
strides值为:1、2、4或8; kernel_shape中每个维度的size,须能被strides对应维度上的 值整除;strides[0] = strides[1];kernel_shape[0] = kernel_shape[1];- 仅支持
group值为:1; - 不支持
auto_pad设置;
| 22
Cosh | 支持输入输出tensor为2至6维。 | 22
Flatten |
- 输入和输出tensor去除size为1的维度后,分别按顺序对其剩余维度进行分组, 分组要求如下:
- 各组中,输入维度size的乘积,必须与对应输出组中维度size的乘积相等;
- 每组的数据量(元素个数 * 数据类型的字节数)须小于或等于65536;
- 支持输入输出tensor为2至6维;
| 21
GlobalAveragePool |
- 支持输入输出tensor为4或5维;
- 输入tensor的H和W维度size的乘积不得超过 86480;
| 22
HardSigmoid |
- 支持输入输出tensor为2至6维;
| 22
HardSwish | 支持输入输出tensor为2至6维。 | 22
LeakyRelu | 支持输入输出tensor为2至6维。 | 16
Log |
- 输入数据必须是正数;
- 支持输入输出tensor为2至6维;
| 13
MatMul | 输入tensor维度必须大于2维。 | 13
MaxPool |
- 仅支持4维输入tensor;
auto_pad取值不支持SAME_UPPER和SAME_LOWER;- 仅支持
kernel_shape值为:[2, 2]、[3, 3]、[5, 5]或[7, 7]; - 仅支持
strides值为:1或2; - 输出tensor的每个维度大小,不得大于输入tensor在对应位置上的维度大小;
pads取值如下:- 四个方向上的值必须相同,并且仅支持取值为:0或
kernel_shape// 2; - 必须与逆向推导的
pads值相同;
- 四个方向上的值必须相同,并且仅支持取值为:0或
| 22
Mul | 支持输入输出tensor为2至6维。 | 14
Neg |
- 支持输入输出tensor为2至6维;
- 输入tensor每个维度大小不能超过4096;
| 13
ReduceMean |
- 如果在所有维度上执行规约操作,
keepdims值只能为1; axes指定的维度size不能是1;- 不支持
axes值为空(empty); - 设
X为所有规约维度的size之积(其中size最的大维度已对齐至 64),Y为所有非规约维度的size之积(除去其中size最大的维度),须满足 X * Y < = 7500000。若只有一个非规约维度或没有非规约维度,则Y= 1; - 支持输入输出tensor为2至6维;
- 输入tensor每个维度大小不能超过4096;
- 参与规约计算的元素总数不得超过524288(即512K);
| 18
ReduceSum |
- 如果在所有维度上执行规约操作,
keepdims值只能为1; axes指定的维度size不能是1;- 不支持
axes值为空(empty)同时noop_with_empty_axes值为1; - 设
X为所有规约维度的size之积(其中size最的大维度已对齐至 64),Y为所有非规约维度的size之积(除去其中size最大的维度),须满足 X * Y < = 7500000。若只有一个非规约维度或没有非规约维度,则Y= 1; - 支持输入输出tensor为2至6维;
- 参与规约计算的元素总数不得超过524288(即512K);
| 13
Reshape |
allowzero取值不支持1;- 输入和输出tensor去除size为1的维度后,分别按顺序对其剩余维度进行分组, 分组要求如下:
- 各组中,输入维度size的乘积,必须与对应输出组中维度size的乘积相等;
- 每组的数据量(元素个数 * 数据类型的字节数)须小于或等于65536;
- 支持输入输出tensor为2至6维;
| 21
Sigmoid | 支持输入输出tensor为2至6维。 | 13
Slice | 支持输入输出tensor为2至6维。 | 13
Softmax |
- 设
X为所有归一化维度的size之积(其中size最大的维度已对齐至 64),Y为所有非归一化维度的size之积(除去其中size最大的维度),须满足 X * Y < = 7500000。若只有一个归一化维度或没有归一化维度,则Y= 1; axis指定的维度size不能是1;- 支持输入输出tensor为2至6维;
| 13
Split |
- 仅支持输出 tensor个数小于或等于60个;
- 支持输入输出tensor为2至6维;
| 18
Sqrt |
- 支持输入输出tensor为2至6维;
- 输入tensor中的所有元素值必须是非负数;
| 13
Squeeze |
- 输入和输出tensor去除size为1的维度后,分别按顺序对其剩余维度进行分组, 分组要求如下:
- 各组中,输入维度size的乘积,必须与对应输出组中维度size的乘积相等;
- 每组的数据量(元素个数 * 数据类型的字节数)须小于或等于65536;
- 支持输入输出tensor为2至6维;
| 21
Sub | 支持输入输出tensor为2至6维。 | 14
Tanh | 支持输入输出tensor为2至6维。 | 13
Tile | 支持输入输出tensor为2至6维。 | 13
Transpose | 支持输入输出tensor为2至6维。 | 21
Unsqueeze |
- 输入和输出tensor去除size为1的维度后,分别按顺序对其剩余维度进行分组, 分组要求如下:
- 各组中,输入维度size的乘积,必须与对应输出组中维度size的乘积相等;
- 每组的数据量(元素个数 * 数据类型的字节数)须小于或等于65536;
- 支持输入输出tensor为2至6维;
| 21