MTNN 开发者指南
什么是 MTNN ?
MTNN (Moore Threads Neural Network) 是一组专为 摩尔线程长江 SoC(M1000) 平台设计的端侧 AI 推理工具链与运行时库。它帮助开发者将训练好的深度学习模型高效部署到 M1000 设备上,充分发挥其 NPU(神经网络处理单元)的硬件加速能力,实现低延迟、高能效的设备端机器学习。
工作流程
MTNN 的开发工作流清晰简洁,主要分为 模型转换 和 运行推理 两个阶段:
阶段一:模型转换
ONNX(Open Neural Network Exchange,开放神经网络交换)是一个开放的模型格式标准,被 PyTorch、TensorFlow 等几乎所有主流 AI 框架支持。
将模型先导出为 ONNX 格式,然后使用 MTNN 提供的 mtc_tool 工具将其转换为 M1000 专有的 .mtnn 模型格式。在此过程中,可以应用量化等优化措施。
无论您最初使用哪种框架训练模型,MTNN 的模型转换极大地简化了部署流程,避免了为每个训练框架单独开发转换器。
关于如何将 PyTorch、TensorFlow 框架的模型转为ONNX模型, 请参考各模型的官网。此外,您还可以使用PyTorch转ONNX的通用方法。
阶段二:运行推理
在 M1000 设备上,应用程序通过 MTNN Runtime C API 加载 .mtnn 模型,并执行推理任务, 从而实现部署。
支持的算子
MTNN 通过 ONNX 标准实现广泛的算子兼容性,支持以下常用算子:
| 类别 | 支持的算子 |
|---|---|
| 基础数学 | Add, Sub, Mul, Div, Abs, Exp, Log, Pow, Sqrt, Sin, Neg, Reciprocal, Sign, Mod, Sum, Mean |
| 激活函数 | Relu, LeakyRelu, PRelu, Sigmoid, HardSigmoid, HardSwish, Tanh, Softplus, Elu, Softsign |
| 归一化 | BatchNormalization, InstanceNormalization, LRN, MeanVarianceNormalization |
| 池化与采样 | MaxPool, AveragePool, GlobalMaxPool, GlobalAveragePool, Resize, Upsample |
| 卷积与矩阵运算 | Conv2D, Conv2DTranspose, Gemm, MatMul |
| 张量操作 | Reshape, Flatten, Squeeze, Unsqueeze, Expand, Tile, Transpose, Concat, Split, Slice, Gather, GatherND, ScatterND, Where, NonZero, ReverseSequence, Size, Shape |
| 逻辑比较 | Equal, Greater, Less, GreaterOrEqual, LessOrEqual, logical_and, Xor |
| RNN | LSTM, GRU |
| 规约操作 | ReduceSum, ReduceMean, ReduceMax, ReduceMin, ReduceL1, ReduceL2, ReduceLogSum, ReduceLogSumExp, ReduceProd, ReduceSumSquare |
| 其他 | Clip, Cast, Celu, Erf, Pad, Dropout, DepthToSpace, SpaceToDepth, MaxRoiPool, ArgMin, ArgMax, Ceil, Floor |