【昇腾】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)
-
-
创建输入
CreateOutputaclmdlCreateDataset- 获取输出数据个数,根据模型描述
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. 准备数据流程


鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)