0_simple_label
描述
本样例展示 CANN Runtime Label 管理的基础使用流程,包括创建 Label、组装 LabelList、在模型运行实例绑定的持久化 Stream 上设置 Label,并按 Device 内存中的索引执行 Label 切换。运行后可以看到模型运行实例构建、执行和资源释放完成的日志。
产品支持情况
本样例在以下产品上的支持情况如下:
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
编译运行
环境安装、环境变量配置和通用运行说明请参见 example 目录下的 README。可提前执行 source <cann_path>/set_env.sh 设置 CANN 环境变量;如果未提前设置,run.sh 会自动尝试探测 ASCEND_INSTALL_PATH、ASCEND_HOME_PATH、$HOME/Ascend/cann、/usr/local/Ascend/cann 和 /opt/Ascend/cann。
进入当前样例目录后,执行以下命令运行样例:
bash run.sh
CANN RUNTIME API
在该Sample中,涉及的关键功能点及其关键接口,如下所示:
- 初始化
- 调用
aclInit接口进行初始化配置。 - 调用
aclFinalize接口实现去初始化。
- 调用
- Device 与 Context 管理
- 调用
aclrtSetDevice接口指定用于运算的 Device。 - 调用
aclrtCreateContext接口创建 Context。 - 调用
aclrtDestroyContext接口销毁 Context。 - 调用
aclrtResetDeviceForce接口强制复位当前运算的 Device,回收 Device 上的资源。
- 调用
- Stream 管理
- 调用
aclrtCreateStreamWithConfig接口创建持久化 Stream。 - 调用
aclrtCreateStream接口创建执行模型运行实例的 Stream。 - 调用
aclrtSynchronizeStream接口阻塞等待 Stream 上任务执行完成。 - 调用
aclrtDestroyStream接口销毁 Stream。
- 调用
- 内存管理
- 调用
aclrtMalloc接口申请 Device 内存。 - 调用
aclrtFree接口释放 Device 内存。
- 调用
- 数据传输
- 调用
aclrtMemcpy接口将 Host 侧分支索引写入 Device 内存。
- 调用
- 模型运行实例管理
- 调用
aclmdlRIBuildBegin和aclmdlRIBuildEnd接口开始和结束模型运行实例构建。 - 调用
aclmdlRIBindStream和aclmdlRIUnbindStream接口绑定和解绑持久化 Stream。 - 调用
aclmdlRIEndTask接口标记绑定 Stream 上的任务下发结束。 - 调用
aclmdlRIExecuteAsync接口异步执行模型运行实例。 - 调用
aclmdlRIDestroy接口销毁模型运行实例。
- 调用
- Label 管理
- 调用
aclrtCreateLabel和aclrtDestroyLabel接口创建并释放 Label。 - 调用
aclrtCreateLabelList和aclrtDestroyLabelList接口组装并释放 LabelList。 - 调用
aclrtSetLabel接口在模型运行实例绑定的 Stream 上设置 Label。 - 调用
aclrtSwitchLabelByIndex接口根据 Device 内存中的分支索引执行 Label 切换。
- 调用
示例输出
[INFO] ACL initialized.
[INFO] Device 0 selected.
[INFO] Context created on device 0.
[INFO] Persistent label stream created.
[INFO] Execute stream created.
[INFO] Model runtime instance build started.
[INFO] Persistent label stream bound to the model runtime instance.
[INFO] Allocated device memory for branch index.
[INFO] Copied branch index 1 from host to device.
[INFO] Created label 0.
[INFO] Created label 1.
[INFO] Created label list with 2 labels.
[INFO] Submitted switch-label task with branch index 1.
[INFO] Set label 0 on the persistent stream.
[INFO] Set label 1 on the persistent stream.
[INFO] Model runtime instance build finished.
[INFO] Switch label executed successfully with branch index 1.
[INFO] Run the simple_label sample successfully.