当前位置: 首页 > news >正文

建设部标准网站百度指数分析案例

建设部标准网站,百度指数分析案例,惠州哪个房地产网站做的比较好,仙居微信网站开发1 模型离线推理 各步要解析如下: Host&Device内存管理与数据传输: Host&Device上的内存申请与释放,内存间的相互拷贝;模型加载:将离线的om文件加载到Device上;在样例的资源初始化模块中进行。模型输入输出准备∶根据禹线om的输入输出,在Device…

1 模型离线推理

各步要解析如下:

  • Host&Device内存管理与数据传输: Host&Device上的内存申请与释放,内存间的相互拷贝;
  • 模型加载:将离线的om文件加载到Device上;在样例的资源初始化模块中进行。
  • 模型输入输出准备∶根据禹线om的输入输出,在Device上申请好模型的输入输出内存;在样例的资源初始化模炔中进行。
  • 执行推理:当模型的输入内存获取到有效数据后,便可以调用AscendCL接口执行模型推理,推理完成后结果生成到输出内存中;在样例的模型推理模块中进行。
  • 输出解析︰使用AscendCL接口,将模型输出数据从特定格式中解析出来;在输出数据处理模块中进行。下面将按步要进行说明。

2 Host&Device内存管理与数据传输

代码中加载输入数据时,需要申请Host内存进行存储,当输入数据处理完毕后,需要将处理完成的数据从Host内存拷贝到Device的模型输入内存中。以便于Device进行模型推理的专用计算。
以上就是Host&Device内存管理与数据传输的典型场景。对于Host&Device内存管理与数据传输来说,实际上就是:

  • Host内存管理: Host侧内存申请与释放
  • Device内存管理:Device侧内存串请与释放
  • Host&Device数据传输: Host和Device上的内存拷贝
    内存管理中其它功能:
  • 内存初始化:对申请出来的Host或Device内存进行初始
    化。
  • Device内存查询:查询Deivce上有多少内存。

image.png

2.1 Host侧内存申请与释放

Host侧内存申请与释放接口的使用方式比较简单。函数原型如下:

aclError aclrtMallocHost(oid**hostPtr, size_t size);acError aclrtFreeHost(void*hostPtr);

其中aclrtMallocHost是内存申请接口。aclrtFreeHost是其对应的释放接口;调用伪代码如下

void *hostlnput = nullptr;
int64_t size_input = 256;
ret = aclrtMallocHost(8hostlnput, size_input);if (hostlnput I= nullptr){
ret = aclrtFreeHost(hostlnput);
}

注意:Host&Device申请和释放的配套关系类似1.acirtMalloc和aclrtFree要成对出现。
2.用aclrtMalloc申请出来的内存高要对齐。
内存大小向上对齐成32整数倍+32字节(m=ALIGN_UPlen,32]+32字节);
内存起始地址高满足64字节对齐(AilGN_UP[m,64])。

2.2 Device侧内存申请与释放

Device侧内存申语与释放接口和Host侧的很相似,函数原型如下:


aclError aclrtMalloclvoid **dePtr, size_t size,aclrtMemMallocPolicy policy);
aclError aclrtFreelvoid *devPtr);

申请内存的接口多了个参数: policy,指明申请内存的策略。当前一共有三种策略可选:

  • ACL MEM MALLOC HUGE FIRST:当申请内存小于等于1M申请普通页内存。当申请内存大于1M时,优先申请天页内存,如果不够。则使用普通内存
  • AcL MEM_MALLOC_HUGE_ONLY:仅申请大页,如果大页内存不够,则返回
    错误
  • ACL MEM MALLOC_NORMAL ONLY:仅申请普通页

void*devlnput = nullptr;
size_input -256;
ret = aclrtMalloc(BdevInput size_input,ACL_MEM_MALLOC_HUGE_FIRST5;if (devlnput != nullptr){
ret = aclrtFree(devInput);}

2.3 内存初始化

刚申请出来的内存,里边的数据是随机的,有时需要对其进行统—的初始化,此时可以使用这个接口:
aclError aclrtMemset(void *devPtr, size_t maxCount, int32_tvalue, size_t count);
其参数如下所示:

  • devPtr: Host/Device上的内存的起始地址,系统会根据地址自动判断内存位置- maxCount:内存的是大长度,单位byte
  • value:设置的值需要设置为指定值的内存长度,单位Byte内存初始化的伪码如下:
void *devlnput = nullptr;size_input = 256;
ret =aclrtMalloc(&devInput, size_input,ACL_MEM_MALLOC_HUGE_FIRST;
ret = aclrtMemset(devlnput,size_input,,1,size_input);ret = aclrtMallocHost(&hostinput, size_input); 
aclrtMemcpy(devlnput size_input, hostlnput, size_input,ACL_MEMCPY_HoST_TO_DevIcE);
ret =aclrtFreeHost(hostlnput);ret = aclrtFree(devlnput);
...
ret = aclrtMalloc(BdevInput size_input,ACL_MEM_MALLOC_HUGE_FIRST5;if (devlnput != nullptr){
ret = aclrtFree(devInput);}

2.4 数据传输

数据传输所使用的内存拷贝函数原型如下:

aclError aclrtMemcpy(void *dst, size_t destMax,const void *src, size_t count, aclrtMemcpyKindkind);

其参数如下所示;. dst:目的地址
. destMax:目的内存地址的最大内存长度,单位Byte. src:源地址
. count:内存复制的长度,单位Byte

  • kind:内存复制的类型,预留参数,配置枚举值中的值无效。系统内部会根据源内存地址指针、目的内存地址指针判断是否可以将源地址的数据复制到目的地址,如果不可以,则系统会返回报错。
    其中的关键为kind参数,这里的kind实际上是一组枚举值,枚举定义如下所示:

typedef enum aclrtMemcpyKind {
ACL_MEMCPY_HOST_To_HosT,i/ Host -> HostACL_MEMCPY_HOST_TO_DEVICE,// Host -> DeviceACL_MEMCPY_DEVlCE_TO_HOST,// Device -> HostACL_MEMCPY_DEVICE_TO_DEVICE,// Device -> Device} aclrtMemcpyKind;
aclrtMemcpy(devlnput size_input, hostlnput, size_input,ACL_MEMCPY_HoST_TO_DevIcE);
ret =aclrtFreeHost(hostlnput);ret = aclrtFree(devlnput);
...
ret = aclrtMalloc(BdevInput size_input,ACL_MEM_MALLOC_HUGE_FIRST5;if (devlnput != nullptr){
ret = aclrtFree(devInput);}

2.5 Device内存查询

程序运行过程中,如何实时获取Device上有多少内存,以及多少可用内存呢?那不妨试试下面这个接口

aclError aclrtGetMemInfo(aclrtMemAttr attr, size_t *free, size_t *total)

其中的attr参数指的是内存的类型,枚举定义如下所示:

typedef enum aclrtMemAttr {
ACL_DDR_MEM,//DDR内存,DDR上所有大页内存+普通内存ACL_HBM_MEM,/ /HBM内存,HBM上所有大页内存+普通内存ACL_DDR_MEM_HUGE,//DDR大页内存
AcL_DDR_MEM_NORMAL.1/DDR普通内存ACL_HBM_MEM_HUGE,//HBM大页内存ACL_HBM_MEM_NORMAL, //HBM普通内存
ACL_DDR_MEM_P2P_HUGE.//DDR中用于Device间数据复制的大页内存ACL_DDR_MEM_P2P_NORMAL//DDR中用于Device间数据复制的普通内存ACL_HBM_MEM_P2P_HUGE,//HBM中用于Device间数据复制的大页内存ACL_HBM_MEM_P2p_NORMAL.//HBM中用于Device间数据复制的普通内存
}aclrtMemAttr;

这里提到了DDR和HBM,在这里,只需要知道Ascend910芯片中有HBM内存,在内存申请时会优先使用,使用完毕后再使用DDR内存;而Ascend310芯片中只有DDR内存。所以调用时,只需要根据自己的场景查询所有内存即可。

3 模型加载

模型加载支持多种加载方式,由用户根据需求选择从om模型文件或内存加载模型数据.选择由用户自行管理内存或由AscendCL管理内存。而不管用哪种接口,最终卸载时接口都是统一的。
image.png

4 模型输入输出准备

在调用AscendCL接口进行模型推理时,模型推理有输入、输出数据,输入、输出数据需要按照AscendCL规定的数据类型存放。相关数据类型如下:
image.png

  • 使用aclmdlDesc类型的数据描述模型基本信息,例如输入/输出的个数、数据类型、Format、维度信息等。
  • 使用acIDataBuffer类型的数据来描述每个输入/输出的内存地址、内存大小。
  • 使用aclmdIDataset类型的数据描述模型的输入、输出数据集。

5 执行推理并获取输出数据

准备好模型执行所需的输入、输出数据类型后,存放好模型执行的输入数据后,可以执行模型推理了。当前AscendCL支持同步模型执行、异步模型执行两种方式,这里说的同步、异步是站在调用者和执行者的角度。

  • 若调用模型执行的接口后需等待推理完成再返回,则表示同步的。当用户调用同步模型执行接口后,可直接从该接口的输出参数中获取模型执行的结果数据。接口调用逻辑简单。
  • 若调用模型执行的接口后不等待推理完成完成再返回,则表示异步的。异步模型执行时,AscendCL提供了Callback机利,在指定时间内一旦有推理的结果数据,就触发回调函数藐取推理结果,提高处理效率。
http://www.sczhlp.com/news/17242/

相关文章:

  • [笔记]CDQ 分治
  • 建站怎么赚钱二级域名在线扫描
  • 南山制作网站公司百度收录提交入口网址
  • 网站建设 千佳网络seo工作前景如何
  • 深圳哪家公司做网站阿里云域名购买
  • 北京网站制作net2006磁力猫torrent kitty
  • 昆明做网站建设的公司排名网页在线代理翻墙
  • 看乱码的网站精准引流怎么推广
  • 电气建设网站工具刷网站排刷排名软件
  • 免费图片编辑网站网上营销是做什么的
  • 深圳有哪些网站开发公司广告联盟论坛
  • 产品网站建设框架seo关键词优化培训班
  • 深圳电力建设公司网站谷歌搜索引擎seo
  • 商城源码哪个品牌好佛山外贸seo
  • 如何用office做网站seo服务外包报价
  • 英文网站的外部链接 建设有没有推广app的平台
  • 天水市建设银行官方网站seo超级外链工具免费
  • 简洁网站设计百度竞价最低点击一次多少钱
  • 餐饮网站建设方案书深圳平台推广
  • 长沙大型网站建设公司百度网页版链接
  • 做网站用那种数据库怎么把产品推广到各大平台
  • 备案个人网站做淘宝客广告策划案优秀案例
  • 淘宝客网站api百度风云榜各年度小说排行榜
  • 浏阳做网站百度一下百度官网
  • 做网站到内容填充需要多久阳江seo
  • 商丘网站建设有限公司国内真正的永久免费建站
  • 状态压缩 + CF_Round_1039
  • 珠海做网站公司哪家好seo顾问服务 品达优化
  • 网站推广包括百度提交网址入口
  • wordpress用户注册卡慢5000元网站seo推广