【2023 · CANN训练营第一季】应用开发(初级)第四章——模型推理

举报
STRUGGLE_xlf 发表于 2023/05/25 21:14:27 2023/05/25
【摘要】 AscendCL运行资源管理申请运行管理资源时,需按顺序依次申请: Device、Context、Stream,然后根据实际需求调用aclrtGetRunMode接口获取软件栈的运行模型(当同一个应用既支持在Host运行,也支持在Device运行时,在编程时需要就需要根据运行模式来判断后续的接口调用逻辑,这时需要提前获取运行模式。)。调用aclrtSetDevice接口显式指定用于运算的D...

AscendCL运行资源管理

image.png

申请运行管理资源时,需按顺序依次申请: Device、Context、Stream,然后根据实际需求调用aclrtGetRunMode接口获取软件栈的运行模型(当同一个应用既支持在Host运行,也支持在Device运行时,在编程时需要就需要根据运行模式来判断后续的接口调用逻辑,这时需要提前获取运行模式。)。
调用aclrtSetDevice接口显式指定用于运算的Device。调用aclrtCreateContext接口显式创建Context,调用aclrtCreateStream接口显式创建Stream。
不显式创建Context和Stream,系统会使用默认Context、默认Stream该默认Context、默认Stream是在调用aclrtSetDevice接口时隐式创建的默认Context、默认Stream作为接口入参时,直接传NULL。不显式指定用于运算的Device。
调用aclrtCreateContext接口显式创建Context,调用aclrtCreateStream接口显式创建Stream。 系统在显式创建Context时,系统内部会调用acirtSetDevice接口指定运行的Device,Device ID通过aclrtCreateContext接口传入。

接口命名规则

image.png

Device管理

image.png
image.png
image.png
image.png

Context管理

image.png
image.png
image.png

Stream管理

原理介绍

在ACL中,Stream是一个任务队列,应用程序通过Stream来管理任务的并行,一个Stream内部的任务保序执行,即Stream根据发送过来的任务依次执行;不同Stream中的任务并行执行。一个默认Context下会挂一个默认Stream,如果不显式创建Stream,可使用默认Stream。

image.png

AscendCL内存管理&数据传输

ACL是有一套自己的内存管理逻辑的,任何用于参与ACL运算的内存(Device侧)都不能是C/C++原生内存管理接口(Malloc、new) 申请的内存,而是调用ACL提供的内存管理专用接口回忆一下: ACL在设备的管理上,是要区分Host和Device的 (还记得aclrtGetRunMode接口吗? )所有的加速计算最终都是要在Device上执行的,也就是说所有的数据(数据集、模型等)最终都会在Device侧参与计算,这里分两种场景:

Host&Device分设,如Atlas300场景 (虽然在同一台机器上,但是是通过PCle接口交的,本质上是两个设备)此时数据、模型都在host侧加载,然后将这些数据传输到device侧进行计算,计算完毕后将结果回传至host侧进行使用

Host&Device合设,如Atlas200Dk场景,此时不区分Host与Device,只有Device,数据、模型都在device上直接加载、计算、使用
本模块就是要跟大家分享如何在Host侧和Device侧分别申请内存,并将数据在两端进行传输(复制)

Host侧内存的申请与存放

![image.png](https://bbs-img.huaweicloud.image.png
com/blogs/img/20230525/1685019677722672157.png)

image.png

AscendCL 模型加载与执行

image.png
image.png

自动管理内存场景
image.png
手动管理内存场景
image.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。