【昇腾】AscendCL模型推理流程
昇腾ACL
过程
-
模型加载
LoadModel
-
aclmdlQuerySize(modelPath, &modelWorkSize_, &modelWeightSize_)
:获取运行时权值内存大小、工作内存大小 -
申请内存:
aclrtMalloc(&modelWorkPtr_, modelWorkSize_, ACL_MEM_MALLOC_HUGE_FIRST)
权值内存。aclrtMalloc(&modelWeightPtr_, modelWeightSize_, ACL_MEM_MALLOC_HUGE_FIRST)
工作空间内存。
-
加载模型
aclmdlLoadFromFileWithMem(modelPath, &modelId_, modelWorkPtr_,modelWorkSize_, modelWeightPtr_, modelWeightSize_)
-
-
创建模型描述
CreateModelDesc
- 创建变量
aclmdlCreateDesc
- 获取描述信息
aclmdlGetDesc(modelDesc_, modelId_)
- 创建变量
-
获取模型输入大小
GetInputSizeByIndex
- 获取输入大小:
aclmdlGetInputSizeByIndex(modelDesc_, index)
。根据模型描述信息获取指定输入的大小,单位为Byte。 - 申请输入内存
aclrtMalloc(&picDevBuffer, devBufferSize, ACL_MEM_MALLOC_NORMAL_ONLY)
- 获取输入大小:
-
创建输入
CreateInput
-
aclmdlGetInputSizeByIndex
再次获取,和上次的做比对是否一样 -
创建Dataset
aclmdlCreateDataset
-
创建DataBuffer
aclCreateDataBuffer(inputDataBuffer, bufferSize)
- 之前申请的内存,获取的输入大小
-
Buf添加到Dataset
aclmdlAddDatasetBuffer(input_, inputData)
-
-
创建输入
CreateOutput
aclmdlCreateDataset
- 获取输出数据个数,根据模型描述
aclmdlGetNumOutputs(modelDesc_)
- 循环获取每个输出的大小,并申请内存、创建Buf、添加到Dataset:
aclmdlGetOutputSizeByIndex
、aclrtMalloc
、aclCreateDataBuffer
、aclmdlAddDatasetBuffer
-
遍历输入数据地址的数组
-
MemcpyFileToDeviceBuffer
函数:读取文件到npu内存-
读取bin文件
-
检查
-
内存拷贝
aclrtMemcpy(picDevBuffer, inputBuffSize, inputBuff, inputBuffSize, ACL_MEMCPY_HOST_TO_DEVICE)
- 主机到设备
- 设备到设备
-
-
-
模型推理
aclmdlExecute(modelId_, input_, output_)
1. 资源初始化流程
申请资源:Device、Context、Stream
- Device上运行:起始就在Device上创建的应用。就没有host、device之间的数据传输的过程
- Device:硬件上的设备
- Context:逻辑上的资源集合
- Stream:处理多个异步任务的执行顺序
2. 模型加载流程
3. 模型推理流程
4. 准备数据流程

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)