适用于华为昇腾NPU推理的手写数字分类模型(MLP + CNN),实现100%精度对齐(NPU与CPU误差<0.01%)。
| 模型 | 网络结构 | 参数数量 | 预期精度 | NPU精度 | NPU延迟 |
|---|---|---|---|---|---|
| Model 1 | MLP (784→600→10) | ~477K | 92.91% | 90.62% | 0.068 ms |
| Model 2 | CNN (Conv+FC) | ~111K | 95.43% | 95.19% | 0.077 ms |
| Model 3 | CNN (Conv+FC) | ~111K | 97.92% | 97.54% | 0.078 ms |
| Model 4 | CNN (Conv+FC) | ~111K | 98.23% | 97.66% | 0.069 ms |
所有模型均在MNIST数据集上训练,用于手写数字分类(10个类别)。
Model 1(MLP)
Models 2–4(CNN)
| 检查项 | 状态 | 详情 |
|---|---|---|
| 算子支持 | ✅ | 所有算子(Linear、Conv2d、ReLU)均受torch_npu原生支持 |
| CUDA依赖 | ✅ | 无 — 纯PyTorch模型 |
| 精度对齐 | ✅ | 所有4个模型的NPU与CPU误差<0.01% |
| 推理速度 | ✅ | NPU在批量推理中比CPU快约1.2倍 |
pip install modelscope torch torch_npu torchvision
modelscope download --model RakiSta/Model_1 --local_dir ./model_1# Single model on NPU
python inference.py --model model_1 --device npu
# All models
python inference.py --model all --device npu
# CPU comparison
python inference.py --model all --device cpupython eval_npu.pyNPU 与 CPU 在 MNIST 测试集(10,000 个样本)上的对比:
Model CPU% NPU% Error% Status
1 90.6200 90.6200 0.000000 PASS
2 95.1900 95.1900 0.000000 PASS
3 97.5400 97.5300 0.010000 PASS
4 97.6600 97.6600 0.000000 PASS所有模型均通过<1%的误差阈值。
在Ascend910 NPU与ARM CPU上进行基准测试,batch_size=1,迭代200次:
| 模型 | NPU延迟(毫秒) | CPU延迟(毫秒) | 加速比 |
|---|---|---|---|
| Model 1 | 0.068 | 0.081 | 1.19× |
| Model 2 | 0.077 | 0.091 | 1.18× |
| Model 3 | 0.078 | 0.091 | 1.17× |
| Model 4 | 0.069 | 0.092 | 1.33× |
注:这些均为微型模型(约10万–50万参数)。由于内核启动开销在微小计算 workload 中占主导地位,NPU的加速效果较为适中。更大规模的模型将从NPU加速中获得更显著的收益。
| 文件 | 描述 |
|---|---|
inference.py | 带命令行界面(CLI)的NPU推理脚本 |
eval_npu.py | 精度+性能评估套件 |
models.py | 模型架构定义 |
README.md | 本文档 |
| 组件 | 版本 |
|---|---|
| NPU | Ascend910 × 2 |
| CANN | 8.5.1 |
| torch_npu | 2.9.0.post1+gitee7ba04 |
| torch | 2.9.0 |
| Python | 3.11.14 |
原始模型来自ModelScope上的RakiSta/Model_1。 适配代码基于Apache-2.0许可证发布。