华为 NPU 概念
达芬奇架构
cat /usr/local/Ascend/ascend-toolkit/latest/x86_64-linux/ascend_toolkit_install.info
npu-smi 对标 nvidia-smi
$ watch -n 1 npu-smi info
msprof 对标 nsprof
AscendCL
cann 对标 cuda
MindIE-RT 对标 TensorRT
MindIE-ATB 面向Transformer模型的加速库(Ascend Transformer Boost)
onnx ep支持
- https://onnxruntime.ai/docs/execution-providers/community-maintained/CANN-ExecutionProvider.html
- https://github.com/microsoft/onnxruntime/tree/main/onnxruntime/core/providers/cann
- https://github.com/microsoft/onnxruntime/issues/11477
- https://github.com/microsoft/onnxruntime/pull/12416
onnx 算子支持
ATC 模型文件转换工具 ATC落地的是一个工具,把各种模型格式的表达,转换为om格式,由NPU推理执行。 这里就涉及如何让ATC认识自定义算子。
atc --model=hello.onnx --framework=5 --output=hello.om --input_shape="input_ids:1,5;att_mask:1,5;token_type_ids:1,5" --soc_version=Ascend910B2C
msame 推理小工具 om模型文件推理小程序,源码里可以看出典型的asendCL推理用法。 https://gitee.com/ascend/tools/tree/master/msame
开发接口
MindIE
AscendCL
- aclrt* 运行时
- 管理device、context、stream、event
- 管理内存
- aclnn* 单算子执行, 深度学习算子 (对标cudnn?)
- 两段式接口, 先 aclnnXxxGetWorkspaceSize, 再 aclnnXxx
- 算子列表: https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC2alpha003/apiref/appdevgapi/context/common/aclnn_domains.md
- aclop* 单算子模型执行
- aclopCompileAndExecute
- aclmdl* 模型推理
- aclmdlLoadFromFile (om文件)
- aclmdlLoadFromMem
- aclmdlExecuteAsync
- aclmdlCreateDataset + aclmdlDestroyDataset
- aclmdlGetInputSizeByIndex + aclmdlGetOutputSizeByIndex
- aclgrah* 构图接口
- ge::aclgrphParseONNXFromMem
- ge::aclgrphBuildModel
- ge::aclgrphBuildInitialize
- ge::aclgrphSaveModel
Ascend C
Ascend C API的操作数都是Tensor类型
TBE&AI CPU
REF
https://gitee.com/ascend/samples/tree/master