首页 > 其他分享 >华为 AscendCL库 笔记

华为 AscendCL库 笔记

时间:2024-04-01 17:33:38浏览次数:28  
标签:调用 笔记 华为 AscendCL 内存 Context 算子 加载

1. AscendCL主要接口调用流程

  • AscendCL初始化:初始化整个AscendCL的运行时环境,这一步是不可缺少的。
  • 运行管理资源申请:手动申请所需要的计算资源和运行时资源生成模型om文件(在编码前完成)
  • 根据实际需求来判断是需要调用单算子进行计算还是调用模型进行推理
  • 如果是调用单算子进行计算,需要走单算子调用流程
  • 如果是模型推理,则需要加载模型,加载数据,按需对数据进行预处理,推理,卸载模型
  • 涉及AscendCL的计算结束后,及时释放前面申请的运行管理资源
  • 最终,销毁AscendCL运行时环境,即AscendCL去初始化
    在这里插入图片描述

2. AscendCL初始化

调用 aclInit 接口,开始对AscendCL进行初始化操作。

需要注意的是,一个进程内只能调用一次 aclInit 接口。

3. 运行资源管理

在对运行管理资源进行申请时,需要按以下顺序依次申请:Device->Context->Stream。

常用接口

在这里插入图片描述

相关函数

在这里插入图片描述

  • 如不显式创建Context和Stream,系统将会使用默认Context和默认Stream,且默认Context、默认Stream作为接口入参时,会直接传NULL。
  • 如果多次调用 aclrtSetDevice 指向同一Device,acltrResetDevice 仅需调用一次即可复位Device
  • 在使用 acltrResetDevice 前,需按照Event、Stream、Context的顺序依次释放对应的资源
  • Context的创建无数量限制,但如在某一进程中创建多个Context,该线程在同一时刻内,仅可使用一个Context,可通过 acltrSetCurrentContext 明确指定当前线程的Context,以增加可维护性。
  • 如多次调用 acltrSetCurrentContext 设置线程的Context,则以最后一次为准

4. 内存管理&数据传输

在这里插入图片描述

相关函数接口

在这里插入图片描述

  • 如应用在Host上运行,调用 aclrtMallocHost 申请的是Host内存,由系统保证内存首地址64字节对齐;如应用在Device上运行时,调用 aclrtMallocHost 申请的是Device内存,如需首地址64字节对齐,需要用户自行处理对齐
  • 在调用 aclrtMalloc 申请内存时,会对用户输入的size按向上对齐为32整数倍,再多加32字节。
  • 频繁调用 aclrtMalloc 申请内存、调用 aclrtFree 释放内存,会损耗性能,最理想方案为提前做内存的预先分配或二次管理

5. 数据预处理

数据预处理主要使用两大工具AIPP(AI Preprocessing)和DVPP(Digital Vision Preprocessing)。

DVPP

DVPP中主要提供了5个功能模块,包括视频编码模块(VENC)、视频解码模块(VDEC)、JPEG图片解码(JPEGE)、JPEG图片解码(JPEGD)、视觉预处理模块(VPC)

具体见 AscendCL DVPP 模块学习

6. 模型加载与执行

模型推理流程见 msame开源压测工具学习笔记

相关函数接口

在这里插入图片描述

表中未加以说明的都是同步接口

7. 单算子加载与执行

相比于模型加载,单算子的加载与执行不同之处在于模型文件的加载、算子输入数据的传输和单算子的执行

  • 单算子模型加载
    • 调用 aclopSetModelDir ,设置加载模型文件的目录,目录下存放单算子模型文件(*.om文件)
    • 调用 aclopLoad,从内存中加载单算子模型数据,由用户管理内存。单算子模型数是指“单算子编译成的*.om文件后,再将om文件读取到内存中”的数据
  • 将算子输入数据从 Host 复制到 Device
    • 调用 aclrtMemcpy 实现同步内存复制
    • 调用 aclrtMemcpyAsync 实现异步内存复制
  • 单算子的执行
    • 自行构造算子描述信息(输入输出Tensor描述、算子属性等)、申请存放算子输入输出数据的内存、调用 aclopExecute 接口加载并执行算子
    • 自行构造算子描述信息(输入输出Tensor描述、算子属性等)、申请存放算子输入输出数据的内存、调用aclopCreateHandle接口创建一个Handle、再调用aclopExecWithHandle接口加载并执行算子。

相关函数接口

在这里插入图片描述

  • Host 上运行应用时,一个进程内正在执行的算子的最大个数上限是2000000
  • Device 上运行应用时,一个进程内正在执行的算子的最大个数上限是480000
  • 所提到的单算子模型数据,是指“单算子编译成的*.om文件后,再将om文件读取到内存中”的数据

标签:调用,笔记,华为,AscendCL,内存,Context,算子,加载
From: https://blog.csdn.net/weixin_44812601/article/details/137072275

相关文章

  • QtQuick 学习笔记(一)容器组件
    1.QGroupBox功能提供分组框支持,可在其中布置多种窗口部件常用函数与组件voidsetChecked(boolchecked)QGroupBox使能voidsetTitle(constQString&title)标题文本设置效果及功能测试GroupBox.cpp#include<QApplication>#include<QDialog>#include......
  • AutoCF论文阅读笔记
    AutoCF论文阅读笔记Abstract开始介绍存在的问题​ 大多数对比方法的成功在很大程度上依赖于手动生成有效的基于启发式的数据增强。这并不适用于不同的数据集和下游推荐任务,这对数据增强具有自适应性,并且对噪声扰动具有鲁棒性很困难。介绍解决方案​ 为了弥补这一关键的差距,这......
  • Vue学习笔记69--activated + deactivated
    activated+deactivated注:生命周期学习可参考学习笔记33两个新的生命周期钩子作用:路由组件所独有的两个构造,用于捕获路由组件的激活状态具体名称:activated--路由组件被激活时触发+deactivated--路由组件失活时触发 示例如下所示:1<template>2<div>3<......
  • AJAX学习笔记
    HTTP协议请求与响应文本结构请求报文行: POSTurlHTTP/1.1 //分别是请求类型、url、HTTP协议版本头: Host:atguigu.com //记住头的格式,名称+“:”+空格+内容 Cook:name=guigu Content-type:application/x-www-form-urlencoded空行体: username=admin&password=admin......
  • 基于springboot实现学生读书笔记共享平台系统项目【项目源码+论文说明】计算机毕业设
    基于springboot实现学生读书笔记共享平台系统演示摘要本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及系统开发......
  • Python学习笔记
    Python一、导学Pthon语言基础入门 Pthon语言高阶加强大数据分析PySpark二、初识Python你好Python程序print("HelloWorld!!")>>HelloWorld!!!输入的双引号和括号为英文字符三、Python基础语法(一)字面量     1.定义:在代码中,被写下来的固定的值,称之为字......
  • 【QT学习笔记】qt配置快捷键:全局快捷键|应用程序中的快捷键
    在QtCreator中配置快捷键,可以通过以下步骤进行:配置全局快捷键(适用于整个IDE的操作):1.**打开快捷键设置**:  -打开QtCreator,点击顶部菜单栏的“工具”(Tools)。  -在下拉菜单中选择“选项”(Options)。  -在打开的选项窗口中,找到并点击“键盘”(Keyboard)或......
  • 【学习笔记】字符串基础:后缀数组
    后置数组好难啊好难啊好难啊好难啊好难啊好难啊最后还是听了不知道从ftp里搞出来的yspm讲课视频才听懂的,但是yspm用的屏幕绘画是看不见的比较尊贵,然后开了画图本文约定字符串下标从\(1\)开始后缀数组后缀数组,即\(\text{SA(SuffixArray)}\),主要关系到两个数组:\(sa......
  • Android+Fragment与Activity之间的信息传递——笔记3
    通过Bundle,Fragment与Activity之间的信息传递protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn2=findViewById(R.id.btn2);btn3=findViewById(R.......
  • JavaWeb学习笔记——第十一天
    SpringBootWeb案例(二)新增员工实现EmpController:@PostMappingpublicResultadd(@RequestBodyEmpemp){log.info("新增员工:{}",emp);empService.add(emp);returnResult.success();}EmpService:voidadd(Empemp);EmpServiceImpl:@Overri......