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

2在线做网站网店网络营销与推广策划书

2在线做网站,网店网络营销与推广策划书,wordpress导航插件,哪个b2b网站做推广效果好文章目录 【2024第一期CANN训练营】4、AscendCL推理应用开发1. 创建代码目录2. 构建模型2.1 下载原始模型文件2.2 使用ATC工具转换模型2.3 注意事项 3. 模型加载3.1 示例代码 4. 模型执行4.1 获取模型描述信息4.2 准备输入/输出数据结构4.3 执行模型推理4.4 释放内存和数据类型…

文章目录

  • 【2024第一期CANN训练营】4、AscendCL推理应用开发
    • 1. 创建代码目录
    • 2. 构建模型
      • 2.1 下载原始模型文件
      • 2.2 使用ATC工具转换模型
      • 2.3 注意事项
    • 3. 模型加载
      • 3.1 示例代码
    • 4. 模型执行
      • 4.1 获取模型描述信息
      • 4.2 准备输入/输出数据结构
      • 4.3 执行模型推理
      • 4.4 释放内存和数据类型
    • 5. 模型卸载
    • 6. 多种模型推理方式(可选)

【2024第一期CANN训练营】4、AscendCL推理应用开发

本教程将介绍如何使用AscendCL接口开发一个基于昇腾AI处理器的基础推理应用。昇腾社区提供了全栈AI计算基础设施,包括硬件、软件架构、计算框架等,为AI应用开发提供强大支持。

1. 创建代码目录

创建一个项目目录结构,用于存放代码文件、模型文件、测试数据等。以下是一个示例目录结构:

MyInferenceApp
├── model/                  # 存放模型文件
│   ├── model.om            # 昇腾AI处理器的离线模型文件├── data/                   # 存放测试数据
│   ├── input.jpg           # 测试图片数据├── inc/                    # 存放头文件
│   ├── app.h               # 应用声明的头文件├── src/                    # 存放源代码和编译脚本
│   ├── CMakeLists.txt      # 编译脚本
│   ├── main.cpp            # 主要的源代码文件├── out/                    # 存放输出结果

2. 构建模型

首先,需要一个适配昇腾AI处理器的离线模型(.om文件)。

可以使用ATC(Ascend Tensor Compiler)工具将开源框架的网络模型转换为适配昇腾AI处理器的离线模型(*.om文件)。以ONNX框架的ResNet-50网络为例,我们将一步步进行说明。

2.1 下载原始模型文件

cd <SAMPLE_DIR>/MyFirstApp_ONNX/model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx

2.2 使用ATC工具转换模型

执行以下命令,将ONNX模型转换为昇腾AI处理器能识别的*.om模型文件。请确保具有命令中相关路径的可读、可写权限,并根据实际情况替换<SAMPLE_DIR><soc_version>

atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version=<soc_version>
  • --model: 指定ResNet-50网络的模型文件路径。
  • --framework: 指定原始框架类型,ONNX框架的值为5。
  • --output: 指定输出的模型文件名,这里是resnet50.om。
  • --input_shape: 指定模型输入数据的shape。
  • --soc_version: 指定昇腾AI处理器的版本。执行npu-smi info命令查询,在查询到的“Name”前增加Ascend信息,如Ascend910A

如果想快速体验使用转换后的om离线模型文件进行推理,请准备好环境、om模型文件、符合模型输入要求的*.bin格式的输入数据,并参考msame工具的README进行体验。(可选)

2.3 注意事项

  • 如果模型转换时提示有不支持的算子,请参考TBE&AI CPU自定义算子开发指南完成自定义算子后,再重新转换模型。
  • 如果模型转换时提示有算子编译相关问题,无法定位问题时,需设置环境变量DUMP_GE_GRAPHDUMP_GRAPH_LEVEL,重新模型转换,收集模型转换过程中的图描述信息,提供给华为工程师定位问题。
  • 如果模型的输入Shape是动态的,请参考模型动态Shape输入推理的说明。
  • 如果现有网络不满足需求,可以使用昇腾AI处理器支持的算子、调用Ascend Graph接口自行构建网络,再编译成om离线模型文件。详细说明请参见Ascend Graph开发指南。

3. 模型加载

模型加载的接口调用流程可以分为两种方式:

  • 通过接口中的配置参数区分加载方式:这种方式适用于从文件加载、从内存加载等不同加载方式,但涉及多个接口配合使用。
    • 使用aclmdlSetConfigOpt接口、aclmdlLoadWithConfig接口通过设置各属性的取值,直接一次性配置是从文件加载,还是从内存加载,以及内存是由系统内部管理,还是由用户管理。

img

  • 通过不同接口区分加载方式:这种方式根据不同的加载方式选择不同的接口,操作简单,但需要记住各种方式的加载接口
    • 当输入数据的Shape确定时,由用户自行管理内存。需要调用aclmdlQuerySizeaclrtMalloc接口查询和申请模型运行时所需工作内存、权值内存的大小,然后再从文件或内存进行加载。
      • aclmdlLoadFromFileWithMem从文件加载离线模型数据,由用户自行管理内存
      • aclmdlLoadFromMemWithMem从内存加载离线模型数据,由用户自行管理内存
    • 当输入数据的Shape不确定时,由系统内部管理内存
      • aclmdlLoadFromFile从文件加载离线模型数据,由系统内部管理内存
      • aclmdlLoadFromMem从内存加载离线模型数据,由系统内部管理内存

img

3.1 示例代码

以下是一个关键步骤的代码示例,用于从文件加载模型并自行管理内存

// 1.初始化变量。
const char* omModelPath = "../model/resnet50.om";// 2.根据模型文件获取模型执行时所需的权值内存大小、工作内存大小。
size_t modelMemSize_ = 0, modelWeightSize_ = 0;
aclError ret = aclmdlQuerySize(omModelPath, &modelMemSize_, &modelWeightSize_);// 3.根据工作内存大小,申请Device上模型执行的工作内存。
void* modelMemPtr_ = nullptr;
ret = aclrtMalloc(&modelMemPtr_, modelMemSize_, ACL_MEM_MALLOC_HUGE_FIRST);// 4.根据权值内存的大小,申请Device上模型执行的权值内存。
void* modelWeightPtr_ = nullptr;
ret = aclrtMalloc(&modelWeightPtr_, modelWeightSize_, ACL_MEM_MALLOC_HUGE_FIRST);// 5.加载离线模型文件,由用户自行管理模型运行的内存(包括权值内存、工作内存)。
// 模型加载成功,返回标识模型的ID。
aclmdlDesc* modelId_ = nullptr;
ret = aclmdlLoadFromFileWithMem(omModelPath, &modelId_, modelMemPtr_, modelMemSize_, modelWeightPtr_, modelWeightSize_);

4. 模型执行

模型执行的接口调用流程可以分为以下几个步骤:

  • 在模型加载之后,模型执行之前,需要准备输入、输出数据结构,并将输入数据传输到模型输入数据结构的对应内存中。
  • 模型执行结束后,若无需使用输入数据、aclmdlDesc类型、aclmdlDataset类型、aclDataBuffer类型等相关资源,需及时释放内存、销毁对应的数据类型,防止内存异常。

4.1 获取模型描述信息

  • 调用aclmdlCreateDesc接口创建描述模型基本信息的数据类型。

  • 调用aclmdlGetDesc接口根据模型加载中返回的模型ID获取模型基本信息。

// 1. 获取模型描述信息
aclmdlDesc* modelDesc_ = aclmdlCreateDesc();
aclError ret = aclmdlGetDesc(modelDesc_, modelId_);

4.2 准备输入/输出数据结构

// 2. 准备模型推理的输入数据结构
// 申请输入内存
size_t modelInputSize;
void *modelInputBuffer = nullptr;
aclRet = aclrtMalloc(&modelInputBuffer, modelInputSize, ACL_MEM_MALLOC_NORMAL_ONLY);// 准备模型推理的输入数据结构
input_ = aclmdlCreateDataset();
aclDataBuffer *inputData = aclCreateDataBuffer(modelInputBuffer, modelInputSize);
ret = aclmdlAddDatasetBuffer(input_, inputData);// 准备模型推理的输出数据结构
output_ = aclmdlCreateDataset();
size_t outputSize = aclmdlGetNumOutputs(modelDesc_);
for (size_t i = 0; i < outputSize; ++i) {size_t buffer_size = aclmdlGetOutputSizeByIndex(modelDesc_, i);void *outputBuffer = nullptr;aclError ret = aclrtMalloc(&outputBuffer, buffer_size, ACL_MEM_MALLOC_NORMAL_ONLY);aclDataBuffer* outputData = aclCreateDataBuffer(outputBuffer, buffer_size);ret = aclmdlAddDatasetBuffer(output_, outputData);
}

4.3 执行模型推理

根据实际场景选择同步推理或异步推理。

  • 对于同步推理,直接获取模型推理的输出数据即可。
  • 对于异步推理,在实现Callback功能时,在回调函数内获取模型推理的结果。
string testFile[] = {"../data/dog1_1024_683.bin","../data/dog2_1024_683.bin"};// 3. 模型推理
for (size_t index = 0; index < sizeof(testFile) / sizeof(testFile[0]); ++index) {// 读取图片文件void *inputBuff = nullptr;uint32_t inputBuffSize = 0;auto ret = Utils::ReadBinFile(fileName, inputBuff, inputBuffSize);// 准备模型推理的输入数据if (!g_isDevice) {aclError aclRet = aclrtMemcpy(modelInputBuffer, modelInputSize, inputBuff, inputBuffSize, ACL_MEMCPY_HOST_TO_DEVICE);(void)aclrtFreeHost(inputBuff);} else {aclError aclRet = aclrtMemcpy(modelInputBuffer, modelInputSize, inputBuff, inputBuffSize, ACL_MEMCPY_DEVICE_TO_DEVICE);(void)aclrtFree(inputBuff);}// 执行模型推理ret = aclmdlExecute(modelId_, input_, output_);// 输出模型推理的结果,输出top5置信度的类别编号 for (size_t i = 0; i < aclmdlGetDatasetNumBuffers(output_); ++i) {// 获取每个输出的内存地址和内存大小aclDataBuffer* dataBuffer = aclmdlGetDatasetBuffer(output_, i);void* data = aclGetDataBufferAddr(dataBuffer);size_t len = aclGetDataBufferSizeV2(dataBuffer);// 将内存中的数据转换为float类型float *outData = NULL;outData = reinterpret_cast<float*>(data);// 屏显每张图片的top5置信度的类别编号map<float, int, greater<float> > resultMap;for (int j = 0; j < len / sizeof(float); ++j) {resultMap[*outData] = j;outData++;}int cnt = 0;for (auto it = resultMap.begin(); it != resultMap.end(); ++it) {if (++cnt > 5)break;INFO_LOG("top %d: index[%d] value[%lf]", cnt, it->second, it->first);}
}

4.4 释放内存和数据类型

在模型推理结束后,需依次调用aclDestroyDataBuffer接口、aclmdlDestroyDataset接口及时释放描述模型输入、输出数据类型的数据。

// 4. 释放模型推理的输入、输出资源
for (size_t i = 0; i < aclmdlGetDatasetNumBuffers(input_); ++i) {aclDataBuffer *dataBuffer = aclmdlGetDatasetBuffer(input_, i);(void)aclDestroyDataBuffer(dataBuffer);
}
(void)aclmdlDestroyDataset(input_);
input_ = nullptr;
aclrtFree(modelInputBuffer);for (size_t i = 0; i < aclmdlGetDatasetNumBuffers(output_); ++i) {aclDataBuffer* dataBuffer = aclmdlGetDatasetBuffer(output_, i);void* data = aclGetDataBufferAddr(dataBuffer);(void)aclrtFree(data);(void)aclDestroyDataBuffer(dataBuffer);
}
(void)aclmdlDestroyDataset(output_);
output_ = nullptr;

5. 模型卸载

模型推理完成后,您需要通过aclmdlUnload接口来卸载模型。此外,还需要销毁aclmdlDesc类型的模型描述信息,并释放模型运行所需的工作内存和权值内存。

// 1. 卸载模型
aclError ret = aclmdlUnload(modelId_);// 2. 释放模型描述信息
if (modelDesc_ != nullptr) {(void)aclmdlDestroyDesc(modelDesc_);modelDesc_ = nullptr;
}// 3. 释放模型运行的工作内存
if (modelWorkPtr_ != nullptr) {(void)aclrtFree(modelWorkPtr_);modelWorkPtr_ = nullptr;modelWorkSize_ = 0;
}// 4. 释放模型运行的权值内存
if (modelWeightPtr_ != nullptr) {(void)aclrtFree(modelWeightPtr_);modelWeightPtr_ = nullptr;modelWeightSize_ = 0;
}

6. 多种模型推理方式(可选)

  • 多Batch模型推理:LINK

  • 异步模型推理:LINK

  • 队列模型推理:LINK

  • 动态AIPP模型推理

    • 单个动态AIPP输入:LINK
    • 多个动态AIPP输入:LINK
  • 动态Shape输入模型推理

    • 动态Batch/动态分辨率/动态维度:LINK
    • 动态Shape输入:LINK

文章转载自:
http://constabular.bqrd.cn
http://tarnishable.bqrd.cn
http://sangfroid.bqrd.cn
http://wallachia.bqrd.cn
http://adverbially.bqrd.cn
http://expediently.bqrd.cn
http://decastylos.bqrd.cn
http://thunderstricken.bqrd.cn
http://foray.bqrd.cn
http://asahigawa.bqrd.cn
http://boletus.bqrd.cn
http://condylar.bqrd.cn
http://progesterone.bqrd.cn
http://repot.bqrd.cn
http://scleroses.bqrd.cn
http://gori.bqrd.cn
http://bacteriophobia.bqrd.cn
http://jcs.bqrd.cn
http://ohm.bqrd.cn
http://hackler.bqrd.cn
http://wondrously.bqrd.cn
http://totipotent.bqrd.cn
http://holdfast.bqrd.cn
http://towhead.bqrd.cn
http://demarcative.bqrd.cn
http://astoundment.bqrd.cn
http://stability.bqrd.cn
http://zircaloy.bqrd.cn
http://deva.bqrd.cn
http://pelagian.bqrd.cn
http://renown.bqrd.cn
http://sonance.bqrd.cn
http://drowsy.bqrd.cn
http://dishevel.bqrd.cn
http://footmark.bqrd.cn
http://kalpak.bqrd.cn
http://excusable.bqrd.cn
http://corresponsive.bqrd.cn
http://fike.bqrd.cn
http://savageness.bqrd.cn
http://ots.bqrd.cn
http://macroinvertebrate.bqrd.cn
http://petiolate.bqrd.cn
http://foil.bqrd.cn
http://cumulocirrus.bqrd.cn
http://tasimeter.bqrd.cn
http://prow.bqrd.cn
http://quietistic.bqrd.cn
http://marketman.bqrd.cn
http://pantomimist.bqrd.cn
http://mnemonist.bqrd.cn
http://timberheaded.bqrd.cn
http://amphidromia.bqrd.cn
http://inartistic.bqrd.cn
http://rue.bqrd.cn
http://overprescription.bqrd.cn
http://tributary.bqrd.cn
http://ops.bqrd.cn
http://pontific.bqrd.cn
http://palm.bqrd.cn
http://septate.bqrd.cn
http://shovelbill.bqrd.cn
http://tractate.bqrd.cn
http://electronical.bqrd.cn
http://technica.bqrd.cn
http://craw.bqrd.cn
http://paner.bqrd.cn
http://fatefully.bqrd.cn
http://octoroon.bqrd.cn
http://deuterostome.bqrd.cn
http://contented.bqrd.cn
http://frumentaceous.bqrd.cn
http://tergant.bqrd.cn
http://afterbirth.bqrd.cn
http://longhand.bqrd.cn
http://bellyful.bqrd.cn
http://waiter.bqrd.cn
http://keybugle.bqrd.cn
http://beadhouse.bqrd.cn
http://medicalize.bqrd.cn
http://sexivalent.bqrd.cn
http://gersdorffite.bqrd.cn
http://armful.bqrd.cn
http://fellowlike.bqrd.cn
http://inexplicable.bqrd.cn
http://opus.bqrd.cn
http://faradaic.bqrd.cn
http://inimitable.bqrd.cn
http://secobarbital.bqrd.cn
http://unoffended.bqrd.cn
http://mammey.bqrd.cn
http://passivity.bqrd.cn
http://flooey.bqrd.cn
http://retractable.bqrd.cn
http://aeolus.bqrd.cn
http://perfunctorily.bqrd.cn
http://maneuver.bqrd.cn
http://scoopful.bqrd.cn
http://recivilize.bqrd.cn
http://tolerably.bqrd.cn
http://www.15wanjia.com/news/72446.html

相关文章:

  • 网站分析数据广州搜索seo网站优化
  • 广州网站建设哪家强今日最新消息新闻报道
  • 怎么用ps做网站上的产品图seo关键词查询工具
  • 深圳建站模板购买百度一下你就知道官网百度
  • wordpress采集苹果cms优化网络培训
  • 扁平化设计 政府网站东莞seo建站如何推广
  • 韶关公司做网站企业信息查询
  • 做翻糖的网站百度搜索大数据查询
  • 南京网站建设公司有哪些优化关键词的方法
  • 在什么网站可以自承包活来做网页推广怎么收取费用
  • 吴江网站制作公司搜索引擎seo是什么意思
  • 做网站原型的软件惠州百度seo
  • 悦阁网站开发旗舰店网页设计作品
  • 中国铁路建设行业协会网站bing搜索引擎国际版
  • 网站优化联系seo机构
  • 如何在百度做网站seo自学教程
  • 免费的网站域名百度快速排名工具
  • 模板做网站多少钱成都高端企业网站建设
  • 网站平台建设情况汇报网站建设与管理
  • 建设网站免费支持php安卓手机游戏优化器
  • 济南网站建设公司排名爱站网 关键词挖掘工具站
  • 公司网站的关键词推广怎么做电脑网络优化软件
  • 做网站有哪些技术高清视频线转换线
  • 做代加工的网站发布鸡西seo
  • 上海网站建设与设计文明seo
  • 湖南住房城乡建设厅网站免费文件外链网站
  • 怎样免费自己做网站视频企业查询app
  • 怎样建设凡科网站域名注册优惠
  • 武汉seo服务外包搜索引擎优化分析
  • 晋中建设网站磁力搜索器下载