草庐IT

CANN2022训练营第一季,学习笔记——初级应用开发3

qq_60508618 2023-08-23 原文

 CANN2022训练营第一季,学习笔记(含打卡截图)——初级应用开发3

学习笔记

模型转换工具(ATC工具)
将TensorFlow/Caffe等开源网络的模型通过ATC工具转为昇腾AI处理器支持格式的模型(Model.om file)

流程:开始→环境准备(获取ATC工具、设置环境变量)→模型准备→ATC模型转换(可以根据需要进行配置)→结束

ACL简介(见第二节课内容)

用于加速推理的应用开发框架(不是新手训练用的)。其向上可以供第三方框架、开发第三方lib库调用,向下可以调用GE执行器、运行管理器等

一、开发图片分类运用学习

ACL主要接口调用流程(实验ACL开发应用的基本流程):
ACL初始化→运行管理资源申请→算子调用/模型推理(算子调用:生成算子文件、加载算子文件、执行算子 或者 模型推理:模型加载、模型执行、模型卸载)
→运行管理资源释放→ACL去初始化

 

课程内容

1、ACL运行资源管理

申请运行资源
注意!!要按顺序依次申请(就像逻辑运行一样要有顺序)
顺序为:Device、Context、Stream,然后根据需要调用aclrtGetRunMode接口获取软件栈的运行模型(当同一个应用既支持在Host运行也支持在Device运行时,在编程时就需要根据运行模式来判断后续的接口调用逻辑,这时需要提前获取运行模式)

运行管理资源释放

注意!!释放和申请的顺序相反(类比C++中多个构造函数和多个析构函数的调用顺序)!!
顺序为:Stream、Context、Device

  • Device管理相关接口
    aclrtGetDeviceCount接口:获取可用的Device数量,同步接口(即同步等待接口,须接口完成动作返回后才可继续向下执行。
    aclrtGetRunMode接口:获取当前昇腾软件栈的运行模式,同步接口
    aclrtSetDevice接口:制定用于运算的Device,同时隐式创建默认Context,该默认Context中包含2个Stream,1个默认Stream和1个执行内部同步的Stream。同步接口。
    aclrtResetDevice接口:复位当前运算的Device,释放Device上的资源,包括默认Context、 默认Stream以及默认Context下创建的所有Stream, 同步接口。若默认Context或默认Stream下的任务还未完成,系统会等待任务完成后再释放。
    aclrtGetDevice接口:获取当前正在使用的Device的ID。同步接口。
  • Context管理相关接口
    aclrtCreateContext接口:显式创建一个 Context,该Context中包含2个Stream, 1个默认Stream和1个执行内部同步的Stream,同步接口。
    aclrtDestroyContext接口:销毁一个Context,释放Context的资源,只能销毁通过aclrtCreateContext接口显式创建的Context。同步接口。
    aclrtSetCurrentContext接口:设置线程的Context。同步接口。
    aclrtGetCurrentContext接口:获取线程的Context。同步接口。
  • Stream管理相关接口
    aclrtCreateStream接口:创建一个Stream。同步接口。
    aclrtDestroyStream接口:销毁指定Stream,只能销毁通过aclrtCreateStream接口创建的Stream。同步接口。

未完待续……

2、ACL内存管理&数据传送

3、ACL数据预处理

4、ACL模型加载与执行

5、ACL单算子加载与执行

6、ACL案例讲解

二、编译及运行应用

步骤:①准备模型 ②准备数据 ③编译程序 ④运行程序

三、获取运行日志
重点:日志目录默认为:“CANN软件安装目录/ascend/log”,应用运行之后,可以在该目录下查阅日志
日志中的关键信息:

 

有关CANN2022训练营第一季,学习笔记——初级应用开发3的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  5. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  6. arrays - 在一行中选择数组的第一个和最后一个元素 - 2

    我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,

  7. ruby-on-rails - Ruby 或 Rails 有只将第一个字符大写的方法吗? - 2

    或者好像我必须自己写方法?(保持DHA不变):ruby-1.9.2-p180:001>s='omega-3(DHA)'=>"omega-3(DHA)"ruby-1.9.2-p180:002>s.capitalize=>"Omega-3(dha)"ruby-1.9.2-p180:003>s.titleize=>"Omega3(Dha)"ruby-1.9.2-p180:005>s[0].upcase+s[1..-1]=>"Omega-3(DHA)" 最佳答案 如果我的回答只是垃圾,我深表歉意(我不做ruby)。但我相信我已经为您找到了答

  8. ruby - gsub 删除第一个逗号前的所有内容 - 2

    我有这个字符串:auteur="comtedeFlandreetHainaut,Baudouin,Jacques,Thierry"我想删除第一个逗号之前的所有内容,即在这种情况下保留“Baudouin,Jacques,Thierry”试过这个:nom=auteur.gsub(/.*,/,'')但这会删除最后一个逗号之前的每个逗号,只保留“Thierry”。 最佳答案 auteur.partition(",").last#=>"Baudouin,Jacques,Thierry" 关于rub

  9. ruby-on-rails - Order Hash 并删除第一个键值对 - 2

    我有一个以时间戳为键的哈希。hash={"2016-05-31T22:30:58+02:00"=>{"path"=>"/","method"=>"GET"},"2016-05-31T22:31:23+02:00"=>{"path"=>"/tour","method"=>"GET"},"2016-05-31T22:31:05+02:00"=>{"path"=>"/contact_us","method"=>"GET"}}我订购了这个系列并得到了第一双这样的:hash.sort_by{|k,_|k}.first.first但是我该如何删除它呢?删除方法requiresyou知道key的准确

  10. arrays - 字符串数组中字符串第一部分的总和 - 2

    我有一个字符串数组,我需要从中提取第一个单词,将它们转换为整数并获得它们的总和。示例:["5Apple","5Orange","15Grapes"]预期输出=>25我的尝试:["5","5","15"].map(&:to_i).sum 最佳答案 我从你的问题中找到了答案。["5Apple","5Orange","15Grapes"].map(&:to_i).sum在数组中,如果存在任何整数可转换值,那么它将自动转换为整数。 关于arrays-字符串数组中字符串第一部分的总和,我们在Sta

随机推荐