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

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

MegEngine 使用小技巧:如何使用 MegCC 進(jìn)行模型編譯

2023-07-06 17:36 作者:曠視天元MegEngine  | 我要投稿

MegEngine?作為一個(gè)訓(xùn)推一體的 AI 框架,為用戶提供了模型訓(xùn)練以及部署的能力。但是在部署模型時(shí),由于會(huì)存在對(duì)于部署的模型計(jì)算來(lái)說(shuō)不必要的代碼,導(dǎo)致 SDK 體積比較大。為了解決上述問(wèn)題,我們提供了新的工具:AI 編譯器?MegCC(https://github.com/MegEngine/MegCC)。

MegCC 有以下特性:

  1. 只生成完成輸入模型計(jì)算的必要的 kernel 代碼以及用戶指定的 CV 算子,編譯得到的二進(jìn)制文件體積很小。

  2. 支持 int8 量化模型以及 float16 量化,且生成的 kernel 是精心優(yōu)化過(guò)的,推理性能好。

  3. 支持平臺(tái)廣。硬件方面,支持 Armv8、Armv7 以及 X86。操作系統(tǒng)方面,支持標(biāo)準(zhǔn)和非標(biāo)準(zhǔn)操作系統(tǒng)。

本文將重點(diǎn)解析模型部署中的重要步驟之一-模型編譯:編譯 MegEngine 模型,生成運(yùn)行這個(gè)模型對(duì)應(yīng)的 Kernel 以及和這些 Kernel 綁定的模型。

編譯模型時(shí):

  • MegCC 生成模型使用的內(nèi)核和用戶所需的 CV 內(nèi)核

  • MegCC 做了多項(xiàng)優(yōu)化,例如靜態(tài)內(nèi)存規(guī)劃和模型優(yōu)化

  • MegCC 將上述數(shù)據(jù)轉(zhuǎn)儲(chǔ)到最終模型中

模型編譯階段主要使用 mgb-to-tinynn 工具,編譯完成之后,會(huì)在用戶給定的目錄下面,生成對(duì)應(yīng)的純 C 代碼的 Kernel 以及對(duì)應(yīng)的模型。為了編譯模型,mgb-to-tinynn 工具需要用戶提供一個(gè)?Json(https://en.wikipedia.org/wiki/JSON)?文件來(lái)配置編譯選項(xiàng)。

目前 MegCC 只支持 mge 模型作為輸入,其他模型格式可以考慮轉(zhuǎn)換到 ONNX,然后通過(guò)?mgeconvert(https://github.com/MegEngine/mgeconvert#13-sparkles-onnx%E6%A8%A1%E5%9E%8B%E4%BA%92%E8%BD%AC)?進(jìn)行模型格式轉(zhuǎn)換。

編寫 Json 文件

json模板如下:

  • 設(shè)置模型編譯之后 dump 的路徑,可以在 mgb-to-tinynn 工具中通過(guò) --dump 參數(shù)進(jìn)行 override。

  • Json 文件中需要指定使用 mgb-to-tinynn 編譯的模型名稱,模型的路徑,以及模型的輸入數(shù)據(jù),以及一些優(yōu)化參數(shù)等

    • 如果部署的實(shí)際情況中需要多個(gè)模型組成 pipline,可以指定多個(gè)模型

    • 如果一個(gè)模型在實(shí)際推理過(guò)程中可能需要多種輸入 shape,需要分別在?input_shape_str?中指定,并用?:?分割開(kāi)。

    • 支持?enable_nchw44?和?enable_nchw44_dot?兩個(gè)優(yōu)化選項(xiàng),enable_nchw44?為 true 表示,優(yōu)化模型推理中 Tensor layout 為?NC4HW4。enable_nchw44_dot?為 true 表示,優(yōu)化模型推理中 Tensor layout 為?NC4HW4,并且在推理過(guò)程中使用?ArmV8.2 dot?指令進(jìn)行推理加速

    • 開(kāi)啟 enable_ioc16 優(yōu)化選項(xiàng),可以使用 float16 進(jìn)行 float32 模型的計(jì)算,可提升推理性能,代價(jià)是損失一些精度。通常需要同時(shí)開(kāi)啟 enable_nchw88 選項(xiàng)

  • 另外為了方便用戶集成時(shí)候使用 cv 算子進(jìn)行模型的前后處理,可以在這個(gè) Json 文件中指定需要用到的 cv 算子的名稱以及對(duì)應(yīng)的數(shù)據(jù)類型。MegCC 支持的 cv 算子?列表(https://github.com/MegEngine/MegCC/blob/main/runtime/include/tinycv_c.h)。

模型編譯

編譯模型目前可以使用 mgb-to-tinynn 這個(gè)可執(zhí)行文件完成編譯,也可以使用 Release 包里面的現(xiàn)成腳本?./script/ppl_gen.sh?進(jìn)行編譯。

使用現(xiàn)成腳本進(jìn)行模型編譯(推薦)

Release 包中的 script 目錄下面有一個(gè)?ppl_gen.sh?的文件,直接執(zhí)行:

./script/ppl_gen.sh?這個(gè)腳本將執(zhí)行模型編譯,并把 Runtime 需要的資源一同打包在一個(gè)壓縮包中,方便后續(xù) Runtime 的編譯,解壓這個(gè)壓縮包將得到:

使用可執(zhí)行文件編譯

使用 mgb-to-tinynn 和上面寫好的 Json 文件執(zhí)行:

成模型編譯后,將生成的運(yùn)行這個(gè)模型的 Kernel,和這些 Kernel 綁定的模型文件以及 cv 算子都放在 Json 文件中指定的目錄。其中

  • target:可以是 baremetal, arm64, armv7, arm64v7.

  • baremetal: 生成的 Kernel 為單片機(jī)可以運(yùn)行的純 C 形式

  • arm64v7: 生成能夠同時(shí)在 Arm64 和 ArmV7 上運(yùn)行的兩套 Kernel 以及他們對(duì)應(yīng)的模型,這時(shí)候,模型文件可能會(huì)比 target 為 arm64 時(shí)候大一點(diǎn)。

如編譯 Release 包中的 mobilenet 模型,目標(biāo)機(jī)器是 arm64 機(jī)器,運(yùn)行如下命令

更多 MegEngine 信息獲取,您可以查看:

文檔:https://www.megengine.org.cn/doc/stable/zh/?

深度學(xué)習(xí)框架?MegEngine 官網(wǎng):https://www.megengine.org.cn/

GitHub 項(xiàng)目:https://github.com/MegEngine,或加入 MegEngine 用戶交流 QQ 群:1029741705


MegEngine 使用小技巧:如何使用 MegCC 進(jìn)行模型編譯的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
班玛县| 丹江口市| 长泰县| 土默特右旗| 锡林郭勒盟| 莎车县| 乌鲁木齐县| 敦煌市| 铜山县| 长葛市| 定边县| 邯郸县| 灵石县| 虎林市| 庆云县| 神农架林区| 洛阳市| 孝感市| 高淳县| 枝江市| 遵义县| 安宁市| 钦州市| 诸城市| 林甸县| 大庆市| 武冈市| 邵阳市| 文水县| 阿城市| 新乡县| 宕昌县| 普格县| 建瓯市| 城市| 长兴县| 商丘市| 大余县| 淳化县| 大新县| 海晏县|