最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

速度與技能的較量!飛槳黑客松OpenVINO 任務(wù)獲獎?wù)呓?jīng)驗分享

2023-07-11 15:50 作者:飛槳PaddlePaddle  | 我要投稿

黑客馬拉松活動介紹

飛槳黑客馬拉松是一項兼具編程樂趣和挑戰(zhàn)一項活動。通過該活動,我們能夠接觸并參與到企業(yè)建設(shè)的大型開源項目,提升個人編程能力,增強開源社區(qū)互動,推動開源生態(tài)發(fā)展。第四期飛槳黑客馬拉松由深度學(xué)習(xí)技術(shù)及應(yīng)用國家工程研究中心主辦,飛槳承辦,英特爾作為頂級贊助方,為我們帶來了 OpenVINO? 算子映射和增加 Notebook Demo 等任務(wù)。算子映射能夠?qū)?PaddlePaddle 模型中的算子映射到 OpenVINO? 中,完成模型在兩個框架之間的轉(zhuǎn)換,最終達到在 PaddlePaddle 訓(xùn)練模型、OpenVINO? 部署推理的效果,在兩個框架之間搭起模型轉(zhuǎn)換的橋梁。

OpenVINO? 介紹

OpenVINO? 工具套件是一款由英特爾公司開發(fā)的支持快速開發(fā)視覺、語音識別和自然語言處理應(yīng)用的工具包。它采用了最新的人工智能神經(jīng)網(wǎng)絡(luò)模型,包括卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)和注意力機制網(wǎng)絡(luò)等,以實現(xiàn)高效的計算機視覺和深度學(xué)習(xí)應(yīng)用。
OpenVINO? 的主要功能包括:在邊緣側(cè)支持卷積神經(jīng)網(wǎng)絡(luò)的推理加速;在英特爾CPU、GPU、FPGA等設(shè)備上的混合執(zhí)行/異構(gòu)計算執(zhí)行;通過大量的預(yù)訓(xùn)練模型庫加速從產(chǎn)品原型到市場化的過程;支持傳統(tǒng)的計算機視覺標(biāo)準(zhǔn)庫中的操作,如 OpenCV 和 OpenCL 等。

總之,OpenVINO? 是一個強大的工具包,可以幫助開發(fā)者快速構(gòu)建和優(yōu)化計算機視覺和深度學(xué)習(xí)應(yīng)用,提高應(yīng)用性能和商業(yè)價值。

(說明:Generated by 文心一言,Prompt:介紹一下OpenVINO? 工具套件)

環(huán)境配置

01 環(huán)境搭建

首先 Fork 一份 OpenVINO? 的 GitHub 倉庫,并將其克隆到本地(Fork后 OpenVINO?toolkit 應(yīng)當(dāng)替換為自己的用戶名,新建分支等 git 操作在此不再贅述):

OpenVINO? 為我們提供了一份編譯構(gòu)建的文檔,詳情見鏈接:https://github.com/openvinotoolkit/openvino/blob/master/docs/dev/build.md

我們可以根據(jù)自身開發(fā)環(huán)境的不同查看對應(yīng)平臺的構(gòu)建文檔。我比較推薦使用 Docker 創(chuàng)建一個開發(fā)容器,這里我選擇使用 PaddlePaddle 提供的開發(fā)鏡像,里面已經(jīng)內(nèi)置了常用的編譯工具鏈,開箱即用非常方便。

部分參數(shù)解析:

--gpus=all:將物理機上的 GPU 掛載到容器中,如本機無 GPU 可不掛載

--name=fisher_OpenVINO:給自己創(chuàng)建的容器起一個好記的名字

--net=host:直接使用主機的網(wǎng)絡(luò),方便在容器中使用主機的代理

-v `pwd`:`pwd`:將主機當(dāng)前的路徑直接掛載到容器對應(yīng)路徑中,方便clangd 插件對 compile_commands.json 文件進行分析,提供語法檢查、代碼跳轉(zhuǎn)等功能

02 編譯
根據(jù)構(gòu)建文檔中的步驟,我們初始化 git 子模塊、安裝構(gòu)建依賴工具包、配置編譯選項,以下是我的編譯選項,可根據(jù)個人需要進行修改,其中關(guān)鍵的參數(shù)是 -DENABLE_TESTS=ON,該參數(shù)將打開測試模塊的編譯,以便后續(xù)開發(fā)完成后進行本地測試。

編譯完成后,在 bin/intel64/Release/ 中能夠找到 PaddlePaddle 相關(guān)的測試程序:


添加映射

01 接口對齊

確認編譯沒有問題后,接下來便是真正的算子映射開發(fā)了。我們首先需要查閱文檔,將 PaddlePaddle 算子和 OpenVINO? 算子的功能、輸入、屬性等對齊,以 silu 為例,我們在 PaddlePaddle 文檔中很容易找到其相關(guān)文檔:

接下來便是在 OpenVINO? 的文檔中找到 silu 相關(guān)的文檔,通過搜索發(fā)現(xiàn)沒有任何結(jié)果。此時有兩種可能:

  • 在 OpenVINO? 中,有功能完全相同,但命名不同的算子。

  • OpenVINO? 中沒有該算子的實現(xiàn),我們需要使用現(xiàn)有的算子進行組合,組合后的算子能夠?qū)崿F(xiàn)相同的功能。

于是我們可以沿著這兩種可能去尋找解決方法:

方法一:在激活函數(shù)中尋找名字不同,功能相同或相似的算子。經(jīng)過一番查找,我在 PaddlePaddle 的文檔中找到了一個計算公式和 silu 一樣的激活函數(shù) swish,swish 在 OpenVINO? 文檔中的定義如下圖所示,顯然當(dāng) β=1 時,就能完全對應(yīng)上了,問題解決。

方法二:通過現(xiàn)有的組合算子實現(xiàn)。仔細觀察 silu 的計算公式,可以發(fā)現(xiàn)silu(x) = x * sigmoid(x),我們也可以使用 multiply、sigmoid 兩個算子組合實現(xiàn)相同的功能。因為已經(jīng)存在可以直接映射的算子,我們就沒必要將使用該方法了,在此僅提供一個實現(xiàn)思路,如遇到無法直接進行映射的算子,該思路可以作為一個參考。

02 映射實現(xiàn)
新建映射文件 src/frontends/paddle/src/op/silu.cpp,將算子映射實現(xiàn)放置在以下命名空間域中:

實現(xiàn)算子映射的具體邏輯:

在以上代碼中,我們從計算節(jié)點中獲取輸入變量 X,將其作為輸入調(diào)用 Swish,將輸出寫回到計算節(jié)點的 Out 變量中,完成了 silu 算子的映射。

在其他的算子中,輸入的變量和屬性可能不止一個,我們可以通過查看? PaddlePaddle 源碼中的 OpMaker 或?paddle/fluid/operators/compat/op.pbtxt?獲取變量名和屬性名,以下是 Paddle Silu 算子的變量名和屬性名:


03 注冊映射
在 src/frontends/paddle/src/op_table.cpp 中注冊該算子映射,該文件中包含了 PaddlePaddle 到 OpenVINO? 的所有映射,我們依樣畫葫蘆即可。


04 單測用例構(gòu)造

創(chuàng)建文件src/frontends/paddle/tests/test_models/gen_scripts/generate_silu.py,用于生成 silu 相關(guān)的測試用例,在編寫測試用例時,我們需要從以下幾個維度去考慮單測用例,盡量做到全覆蓋:Shape(靜態(tài)、動態(tài)、1D~4D-Tensor)、數(shù)據(jù)類型(int32、float32等)、算子屬性等。

以上腳本將會為每一個測試用例導(dǎo)出并保存一個模型,OpenVINO? 讀取、轉(zhuǎn)換、運行該模型,通過比對計算結(jié)果判斷測試是否通過。

05 注冊單測
在 src/frontends/paddle/tests/op_fuzzy.cpp 中注冊單測,單測的名稱就是在上一步中保存的模型名稱。


編譯并測試

重新編譯并在 bin/intel64/Release/ 中運行以下測試,可以通過-- gtest_filter 參數(shù)篩選想要運行的單測,我們只增加了 silu 算子的映射和單測,因此我們只測試這一部分。

測試完成,沒有問題之后,使用 pre-commit ?格式化代碼,根據(jù)OpenVINO??貢獻指南的要求提PR,等待相應(yīng)的研發(fā)檢查即可。https://github.com/openvinotoolkit/openvino/blob/master/CONTRIBUTING.md

總結(jié)

算子映射任務(wù)能夠幫助我們了解算子的具體功能,理解模型在不同的AI框架中是如何進行轉(zhuǎn)換的,對于新手來說是一份寶貴的學(xué)習(xí)經(jīng)驗。以下是我在開發(fā)過程中總結(jié)出來的一點經(jīng)驗,希望能夠幫助到大家:

  • 首次編譯盡量使用代理,使用代理能夠避免一部分網(wǎng)絡(luò)原因造成的倉庫克隆失敗等問題

  • 多翻翻文檔,許多算子的功能是相同或相似的,多看文檔也能夠認識各種算子的功能,形成基本概念

  • 多學(xué)習(xí)別人的思路、寫法,自己想出的組合算子實現(xiàn)可能比較復(fù)雜,參考學(xué)習(xí)別人的思路和寫法能夠給自己帶來一些改進的靈感


速度與技能的較量!飛槳黑客松OpenVINO 任務(wù)獲獎?wù)呓?jīng)驗分享的評論 (共 條)

分享到微博請遵守國家法律
新乐市| 德兴市| 临沭县| 翁源县| 宜州市| 车致| 临颍县| 新建县| 家居| 张家港市| 峨山| 河北省| 德兴市| 岳普湖县| 象山县| 武隆县| 泸定县| 淄博市| 凤山县| 和田市| 巴塘县| 甘德县| 镇坪县| 舒城县| 龙口市| 普宁市| 伊吾县| 汉寿县| 博乐市| 罗平县| 成安县| 民权县| 永寿县| 长宁县| 南京市| 万年县| 汝城县| 海门市| 凉山| 体育| 乌鲁木齐县|