0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何基于OrangePi?AIpro開(kāi)發(fā)AI推理應(yīng)用

香橙派 ? 2024-06-04 14:23 ? 次閱讀

香橙派AIpro開(kāi)發(fā)板采用昇騰AI技術(shù)路線,接口豐富且具有強(qiáng)大的可擴(kuò)展性,提供8/20TOPS澎湃算力,可廣泛使用于AI邊緣計(jì)算、深度視覺(jué)學(xué)習(xí)及視頻流AI分析、視頻圖像分析、自然語(yǔ)言處理等AI領(lǐng)域。通過(guò)昇騰CANN軟件棧的AI編程接口,可滿足大多數(shù)AI算法原型驗(yàn)證、推理應(yīng)用開(kāi)發(fā)的需求。

AscendCL(Ascend Computing Language,昇騰計(jì)算語(yǔ)言)是昇騰計(jì)算開(kāi)放編程框架,是對(duì)底層昇騰計(jì)算服務(wù)接口的封裝,提供Device管理、Context管理、Stream管理、內(nèi)存管理、模型加載與執(zhí)行、算子加載與執(zhí)行、媒體數(shù)據(jù)處理等API,支持C&C++、Python編程語(yǔ)言,能夠?qū)崿F(xiàn)深度學(xué)習(xí)推理計(jì)算、圖形圖像預(yù)處理、單算子加速計(jì)算等能力。

掌握了AscendCL的編程方法,就意味著可以在香橙派AIpro開(kāi)發(fā)板上充分利用昇騰的算力資源,能夠基于深度學(xué)習(xí)算法開(kāi)發(fā)圖片分類、目標(biāo)檢測(cè)等一系列深度學(xué)習(xí)推理計(jì)算程序。

01總體流程

使用AscendCL開(kāi)發(fā)推理應(yīng)用時(shí),開(kāi)發(fā)流程大致分為以下幾步:

1.AscendCL初始化:初始化AscendCL內(nèi)部資源,為程序運(yùn)行做準(zhǔn)備

2.運(yùn)行管理資源申請(qǐng):申請(qǐng)運(yùn)行時(shí)相關(guān)資源,例如計(jì)算設(shè)備

3.媒體數(shù)據(jù)處理:可實(shí)現(xiàn)摳圖、縮放、視頻或圖片的編解碼等

4.模型推理:包括模型加載、執(zhí)行、卸載

5.運(yùn)行管理資源釋放:資源使用后及時(shí)釋放

6.AscendCL去初始化:與初始化配對(duì)使用

在開(kāi)始之前,我們得先了解下,使用AscendCL時(shí)經(jīng)常會(huì)提到的“數(shù)據(jù)類型的操作接口” ,它是什么?為什么會(huì)存在?

在C/C++中,對(duì)用戶開(kāi)放的數(shù)據(jù)類型通常以Struct結(jié)構(gòu)體方式定義、以聲明變量的方式使用,但這種方式一旦結(jié)構(gòu)體要增加成員參數(shù),用戶的代碼就涉及兼容性問(wèn)題,不便于維護(hù),因此AscendCL對(duì)用戶開(kāi)放的數(shù)據(jù)類型,均以接口的方式操作該數(shù)據(jù)類型,例如,調(diào)用某個(gè)數(shù)據(jù)類型的Create接口創(chuàng)建該數(shù)據(jù)類型、調(diào)用Get接口獲取數(shù)據(jù)類型內(nèi)參數(shù)值、調(diào)用Set接口設(shè)置數(shù)據(jù)類型內(nèi)的參數(shù)值、調(diào)用Destroy接口銷毀該數(shù)據(jù)類型,用戶無(wú)需關(guān)注定義數(shù)據(jù)類型的結(jié)構(gòu)體長(zhǎng)什么樣,這樣即使后續(xù)數(shù)據(jù)類型需擴(kuò)展,只需增加該數(shù)據(jù)類型的操作接口即可,也不會(huì)引起兼容性問(wèn)題。

所以,總結(jié)下,“數(shù)據(jù)類型的操作接口”就是創(chuàng)建數(shù)據(jù)類型、Get/Set數(shù)據(jù)類型中的參數(shù)值、銷毀數(shù)據(jù)類型的一系列接口,存在的最大好處就是減少兼容性問(wèn)題。

接下來(lái),進(jìn)入我們今天的主題,怎么用AscendCL的接口開(kāi)發(fā)網(wǎng)絡(luò)模型推理場(chǎng)景下的應(yīng)用。

02AscendCL初始化與去初始化

使用AscendCL接口開(kāi)發(fā)應(yīng)用時(shí),必須先初始化AscendCL ,否則可能會(huì)導(dǎo)致后續(xù)系統(tǒng)內(nèi)部資源初始化出錯(cuò),進(jìn)而導(dǎo)致其它業(yè)務(wù)異常。在初始化時(shí),還支持以下跟推理相關(guān)的配置項(xiàng)(例如,性能相關(guān)的采集信息配置),以json格式的配置文件傳入AscendCL初始化接口。如果當(dāng)前的默認(rèn)配置已滿足需求(例如,默認(rèn)不開(kāi)啟性能相關(guān)的采集信息配置),無(wú)需修改,可向AscendCL初始化接口中傳入NULL,或者可將配置文件配置為空json串(即配置文件中只有{})。

有初始化就有去初始化,在確定完成了AscendCL的所有調(diào)用之后,或者進(jìn)程退出之前,需調(diào)用AscendCL接口實(shí)現(xiàn)AscendCL去初始化。

wKgaomZesqmAaSdZAAECGYU3NU4358.png

03運(yùn)行管理資源申請(qǐng)與釋放

運(yùn)行管理資源包括Device、Context、Stream、Event等,此處重點(diǎn)介紹Device、Context、Stream,其基本概念如下圖所示 。

wKgZomZesqqANGIBAAGLHAzjlYs952.png

您需要按順序依次申請(qǐng)如下運(yùn)行管理資源:Device、Context、Stream,確??梢允褂眠@些資源執(zhí)行運(yùn)算、管理任務(wù)。所有數(shù)據(jù)處理都結(jié)束后,需要按順序依次釋放運(yùn)行管理資源:Stream、Context、Device。

在申請(qǐng)運(yùn)行管理資源時(shí),Context、Stream支持隱式創(chuàng)建和顯式創(chuàng)建兩種申請(qǐng)方式:

wKgaomZesqqAKannAALE-6cX-sE521.pngwKgZomZesquAUwvkAAI_pL5x7f0437.png

04媒體數(shù)據(jù)處理

如果模型對(duì)輸入圖片的寬高要求與用戶提供的源圖不一致,AscendCL提供了媒體數(shù)據(jù)處理的接口,可實(shí)現(xiàn)摳圖、縮放、格式轉(zhuǎn)換、視頻或圖片的編解碼等,將源圖裁剪成符合模型的要求。后續(xù)會(huì)展開(kāi)說(shuō)明這個(gè)功能,本期著重介紹模型推理的部分,以輸入圖片滿足模型的要求為例。

05模型加載

模型推理場(chǎng)景下,必須要有適配昇騰AI處理器的離線模型(*.om文件),我們可以使用ATC(Ascend Tensor Compiler)來(lái)構(gòu)建模型。如果模型推理涉及動(dòng)態(tài)Batch、動(dòng)態(tài)分辨率等特性,需在構(gòu)建模型增加相關(guān)配置。關(guān)于如何使用ATC來(lái)構(gòu)建模型,請(qǐng)移步文末“昇騰社區(qū)文檔中心”。

有了模型,就可以開(kāi)始加載了,當(dāng)前AscendCL支持以下幾種方式加載模型:

·從*.om文件中加載模型數(shù)據(jù),由AscendCL管理內(nèi)存

·從*.om文件中加載模型數(shù)據(jù),由用戶自行管理內(nèi)存

·從內(nèi)存中加載模型數(shù)據(jù),由AscendCL管理內(nèi)存

·從內(nèi)存中加載模型數(shù)據(jù),由用戶自行管理內(nèi)存

由用戶自行管理內(nèi)存時(shí),需關(guān)注工作內(nèi)存、權(quán)值內(nèi)存。工作內(nèi)存用于存放模型執(zhí)行過(guò)程中的臨時(shí)數(shù)據(jù),權(quán)值內(nèi)存用于存放權(quán)值數(shù)據(jù)。這個(gè)時(shí)候,是不是有疑問(wèn)了,我怎么知道工作內(nèi)存、權(quán)值內(nèi)存需要多大?不用擔(dān)心,AscendCL不僅提供了加載模型的接口,同時(shí)也提供了“根據(jù)模型文件獲取模型執(zhí)行時(shí)所需的工作內(nèi)存和權(quán)值內(nèi)存大小”的接口,方便用戶使用 。

wKgZomZesqmATZRXAADtuvQ_SvA095.pngwKgZomZesquAVpbEAAJ3FPB9cbw879.png

06模型執(zhí)行

在調(diào)用AscendCL接口進(jìn)行模型推理時(shí),模型推理有輸入、輸出數(shù)據(jù),輸入、輸出數(shù)據(jù)需要按照AscendCL規(guī)定的數(shù)據(jù)類型存放。相關(guān)數(shù)據(jù)類型如下:

·使用aclmdlDesc類型的數(shù)據(jù)描述模型基本信息(例如輸入/輸出的個(gè)數(shù)、名稱、數(shù)據(jù)類型、Format、維度信息等)。模型加載成功后,用戶可根據(jù)模型的ID,調(diào)用該數(shù)據(jù)類型下的操作接口獲取該模型的描述信息,進(jìn)而從模型的描述信息中獲取模型輸入/輸出的個(gè)數(shù)、內(nèi)存大小、維度信息、Format、數(shù)據(jù)類型等信息。

·使用aclDataBuffer類型的數(shù)據(jù)來(lái)描述每個(gè)輸入/輸出的內(nèi)存地址、內(nèi)存大小。調(diào)用aclDataBuffer類型下的操作接口獲取內(nèi)存地址、內(nèi)存大小等,便于向內(nèi)存中存放輸入數(shù)據(jù)、獲取輸出數(shù)據(jù)。

·使用aclmdlDataset類型的數(shù)據(jù)描述模型的輸入/輸出數(shù)據(jù)。模型可能存在多個(gè)輸入、多個(gè)輸出,調(diào)用aclmdlDataset類型的操作接口添加多個(gè)aclDataBuffer類型的數(shù)據(jù)。

wKgaomZesqmAM1dKAAEzPqOnuH0752.pngwKgZomZesquAdZuNAASqLOL-kPE916.png

準(zhǔn)備好模型執(zhí)行所需的輸入和輸出數(shù)據(jù)類型、且存放好模型執(zhí)行的輸入數(shù)據(jù)后,可以執(zhí)行模型推理了,如果模型的輸入涉及動(dòng)態(tài)Batch、動(dòng)態(tài)分辨率等特性,則在模型執(zhí)行前,還需要調(diào)用AscendCL接口告訴模型本次執(zhí)行時(shí)需要用的Batch數(shù)、分辨率等。

當(dāng)前AscendCL支持同步模型執(zhí)行、異步模型執(zhí)行兩種方式,這里說(shuō)的同步、異步是站在調(diào)用者和執(zhí)行者的角度。

·若調(diào)用模型執(zhí)行的接口后需等待推理完成再返回,則表示模型執(zhí)行是同步的。當(dāng)用戶調(diào)用同步模型執(zhí)行接口后,可直接從該接口的輸出參數(shù)中獲取模型執(zhí)行的結(jié)果數(shù)據(jù),如果需要推理的輸入數(shù)據(jù)量很大,同步模型執(zhí)行時(shí),需要等所有數(shù)據(jù)都處理完成后,才能獲取推理的結(jié)果數(shù)據(jù)。

·若調(diào)用模型執(zhí)行的接口后不等待推理完成完成再返回,則表示模型執(zhí)行是異步的。當(dāng)用戶調(diào)用異步模型執(zhí)行接口時(shí),需指定Stream( Stream用于維護(hù)一些異步操作的執(zhí)行順序,確保按照應(yīng)用程序中的代碼調(diào)用順序在Device上執(zhí)行),另外,還需調(diào)用aclrtSynchronizeStream接口阻塞程序運(yùn)行,直到指定Stream中的所有任務(wù)都完成,才可以獲取推理的結(jié)果數(shù)據(jù)。如果需要推理的輸入數(shù)據(jù)量很大,異步模型執(zhí)行時(shí),AscendCL提供了Callback機(jī)制,觸發(fā)回調(diào)函數(shù),在指定時(shí)間內(nèi)一旦有推理的結(jié)果數(shù)據(jù),就獲取出來(lái),達(dá)到分批獲取推理結(jié)果數(shù)據(jù)的目的,提高效率。

wKgaomZesquATZUdAANe0C3Dk3M041.png

推理結(jié)束后,如果需要獲取并進(jìn)一步處理推理結(jié)果數(shù)據(jù),則由用戶自行編碼實(shí)現(xiàn)。最后,別忘了,我們還要銷毀aclmdlDataset、aclDataBuffer等數(shù)據(jù)類型,釋放相關(guān)內(nèi)存,防止內(nèi)存泄露。

07模型卸載

在模型推理結(jié)束后,還需要通過(guò)aclmdlUnload接口卸載模型,并銷毀aclmdlDesc類型的模型描述信息、釋放模型運(yùn)行的工作內(nèi)存和權(quán)值內(nèi)存。

wKgZomZesqmAZwpZAADuklBa2MU474.png

(以上內(nèi)容來(lái)源于昇騰CANN公眾號(hào))

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Orange
    +關(guān)注

    關(guān)注

    0

    文章

    82

    瀏覽量

    19616
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29357

    瀏覽量

    267633
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4834

    瀏覽量

    96821
  • 邊緣計(jì)算
    +關(guān)注

    關(guān)注

    22

    文章

    3008

    瀏覽量

    48277
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI算法在RZ/V芯片中的移植推理流程

    之前文章已介紹了一些AI算法Demo的應(yīng)用 ,我們提供從模型訓(xùn)練到RZ/V系列嵌入式端推理應(yīng)用的完整流程。整體流程如下圖所示。
    的頭像 發(fā)表于 12-20 12:21 ?962次閱讀
    <b class='flag-5'>AI</b>算法在RZ/V芯片中的移植<b class='flag-5'>推理</b>流程

    基于OrangePi AIpro開(kāi)發(fā)一個(gè)電子紙屏?xí)r鐘

    OrangePiAIpro是香橙派聯(lián)合華為精心打造的一款高算力人工智能開(kāi)發(fā)板。作為業(yè)界首款基于昇騰深度研發(fā)的AI開(kāi)發(fā)板,它先后榮獲2023昇騰APN最佳產(chǎn)品獎(jiǎng)以及PoweredbyAscend甑選
    的頭像 發(fā)表于 06-25 17:00 ?1025次閱讀
    基于<b class='flag-5'>OrangePi</b> <b class='flag-5'>AIpro</b><b class='flag-5'>開(kāi)發(fā)</b>一個(gè)電子紙屏?xí)r鐘

    開(kāi)發(fā)者手機(jī) AI - 目標(biāo)識(shí)別 demo

    功能簡(jiǎn)介 該應(yīng)用是在Openharmony 4.0系統(tǒng)上開(kāi)發(fā)的一個(gè)目標(biāo)識(shí)別的AI應(yīng)用,旨在從上到下打通Openharmony AI子系統(tǒng),展示Openharmony系統(tǒng)的AI能力,并為
    發(fā)表于 04-11 16:14

    【HarmonyOS HiSpark AI Camera】AI圖像開(kāi)發(fā)

    項(xiàng)目名稱:AI圖像開(kāi)發(fā)試用計(jì)劃:申請(qǐng)理由本人在AI圖像識(shí)別中已有一年的開(kāi)發(fā)經(jīng)驗(yàn),目前正采用瑞芯微的rk1808芯片進(jìn)行模型的落地部署,但是該芯片沒(méi)有任何的攝像頭方案,需要自己選取。目前
    發(fā)表于 09-25 10:11

    基于SRAM的方法可以加速AI推理

    基于SRAM的方法可加速AI推理
    發(fā)表于 12-30 07:28

    Dllite_micro (輕量級(jí)的 AI 推理框架)

    DLLite-Micro 是一個(gè)輕量級(jí)的 AI 推理框架,可以為 OpenHarmony OS 的輕量設(shè)備和小型設(shè)備提供深度模型的推理能力DLLite-Micro 向開(kāi)發(fā)者提供清晰、易
    發(fā)表于 08-05 11:40

    深度剖析OpenHarmony AI調(diào)度管理與推理接口

    1 簡(jiǎn)介AI任務(wù)管理與統(tǒng)一的推理能力提供了接口的統(tǒng)一標(biāo)準(zhǔn)系統(tǒng)上CPU提供了AI任務(wù)調(diào)度管理的能力,對(duì)AI的能力進(jìn)行了開(kāi)放的推理
    發(fā)表于 03-25 11:15

    嘉楠勘智K510開(kāi)發(fā)板簡(jiǎn)介——高精度AI邊緣推理芯片及應(yīng)用

    。K510是嘉楠公司推出的第二代AI加速芯片,它采用雙核RISC-V CPU@800Mhz,內(nèi)置DSP協(xié)處理器和強(qiáng)大的AI運(yùn)算單元KPU,支持 BF16浮點(diǎn)數(shù)據(jù)格式,可在邊緣端進(jìn)行高精度推理,是國(guó)內(nèi)少有
    發(fā)表于 11-22 15:52

    HarmonyOS:使用MindSpore Lite引擎進(jìn)行模型推理

    () % divisor) / divisor;// 0--0.9f } } return OH_AI_STATUS_SUCCESS; } 然后進(jìn)入主要的開(kāi)發(fā)步驟,具括包括模型的準(zhǔn)備、讀取、編譯、推理和釋放,具體
    發(fā)表于 12-14 11:41

    安晟培半導(dǎo)體通過(guò)AI推理應(yīng)用程序進(jìn)一步增強(qiáng) Ampere Altra 的性能

    中國(guó),北京(2021 年 8 月 5 日)——安晟培半導(dǎo)體科技有限公司(Ampere Computing)日前宣布收購(gòu)AI技術(shù)初創(chuàng)公司 OnSpecta,該收購(gòu)將助力 Ampere 通過(guò) AI 推理應(yīng)用程序進(jìn)一步增強(qiáng) Amper
    的頭像 發(fā)表于 08-18 11:38 ?3501次閱讀

    OrangePi_plus2應(yīng)用開(kāi)發(fā)文檔

    香橙派開(kāi)發(fā)必看!OrangePi_plus2應(yīng)用開(kāi)發(fā)文檔免費(fèi)下載。
    發(fā)表于 05-11 14:15 ?3次下載

    邊緣AI推理應(yīng)用設(shè)計(jì)的發(fā)展

      邊緣人工智能市場(chǎng)正在迅速增長(zhǎng),芯片供應(yīng)商也在這個(gè)市場(chǎng)上爭(zhēng)奪一席之地。事實(shí)上,到 2020 年代中期,人工智能銷售額迅速增長(zhǎng)至數(shù)百億美元,其中大部分增長(zhǎng)來(lái)自邊緣人工智能推理
    的頭像 發(fā)表于 07-10 10:03 ?873次閱讀

    香橙派聯(lián)合華為發(fā)布基于昇騰的Orange Pi AIpro開(kāi)發(fā)板 業(yè)界首款基于昇騰AI開(kāi)發(fā)

    香橙派聯(lián)合華為發(fā)布基于昇騰的Orange Pi AIpro 開(kāi)發(fā)板 業(yè)界首款基于昇騰AI開(kāi)發(fā)板 日前香橙派聯(lián)合華為發(fā)布了基于昇騰的Orange Pi
    的頭像 發(fā)表于 12-04 19:04 ?1389次閱讀
    香橙派聯(lián)合華為發(fā)布基于昇騰的Orange Pi <b class='flag-5'>AIpro</b><b class='flag-5'>開(kāi)發(fā)</b>板 業(yè)界首款基于昇騰<b class='flag-5'>AI</b><b class='flag-5'>開(kāi)發(fā)</b>板

    ONNX Runtime支持龍架構(gòu),AI推理生態(tài)再添新翼

    近日,備受矚目的AI推理框架開(kāi)源社區(qū)ONNX Runtime宣布推出支持龍架構(gòu)的新版本1.17.0,這一里程碑式的更新意味著龍芯平臺(tái)上的AI推理應(yīng)
    的頭像 發(fā)表于 03-27 10:58 ?616次閱讀

    OrangePi AIpro應(yīng)用:機(jī)械臂應(yīng)用開(kāi)發(fā)指南

    2024世界人工智能大會(huì)上,香橙派攜OrangePiAIpro20T在世博展覽館H1-A301展區(qū)亮相,給大家?guī)?lái)AI+互動(dòng)的沉浸式體驗(yàn)。其中,搭載OrangePiAIpro開(kāi)發(fā)板的智能機(jī)械臂吸引了
    的頭像 發(fā)表于 08-19 16:42 ?460次閱讀
    <b class='flag-5'>OrangePi</b> <b class='flag-5'>AIpro</b>應(yīng)用:機(jī)械臂應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>指南