91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如何優(yōu)雅地將Swin Transformer模型部署到AX650N Demo板上?

愛芯元智AXERA ? 來源:愛芯元智AXERA ? 2023-04-15 10:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01

背景

今年來以ChatGPT為代表的大模型的驚艷效果,讓AI行業(yè)迎來了新的動力。各種AIGC的應(yīng)用接踵而至。我們知道類似ChatGPT的大模型,其核心網(wǎng)絡(luò)結(jié)構(gòu)均基于Google 2017年的論文提出的Transformer的論文《Attention Is All You Need》。在計算機(jī)視覺建模一直由卷積神經(jīng)網(wǎng)絡(luò)(CNN)主導(dǎo),基于Transformer結(jié)構(gòu)的網(wǎng)絡(luò)模型長時間停留在各大頂會“刷榜”階段,真正大規(guī)模落地并不突出。直到ICCV 2021的最佳論文《Swin Transformer》才達(dá)到了準(zhǔn)確率和性能雙佳的效果。

但是到目前為止,類似Swin Transformer的視覺類Transformer網(wǎng)絡(luò)模型大多數(shù)還是部署在云端服務(wù)器上,原因是GPU對于MHA結(jié)構(gòu)計算支持更友好,反而邊緣側(cè)/端側(cè)AI芯片由于其DSA架構(gòu)限制,為了保證CNN結(jié)構(gòu)的模型效率更好,基本上對MHA結(jié)構(gòu)沒有過多性能優(yōu)化,甚至需要修改網(wǎng)絡(luò)結(jié)構(gòu)才能勉強(qiáng)部署。這也間接限制了算法工程師在邊緣計算應(yīng)用上進(jìn)一步發(fā)揮Transformer網(wǎng)絡(luò)的想象力。

今年3月,愛芯元智發(fā)布了新一代產(chǎn)品AX650N,內(nèi)置了其自主研發(fā)的第三代神經(jīng)網(wǎng)絡(luò)單元,進(jìn)一步提升了最新AI算法模型的部署能力,可幫助用戶在智慧城市,智慧教育,智能制造等領(lǐng)域發(fā)揮更大的價值。最近我通過正式渠道有幸拿到了一塊AX650N Demo板進(jìn)行嘗鮮體驗。

本文的目的是簡單介紹基于AX650N Demo配套的新一代AI工具鏈如何優(yōu)雅地將Swin Transformer模型部署到AX650N Demo板上,希望能給算法工程師們在Transformer網(wǎng)路部署落地上提供一種新的思路和途徑。

02

Swin Transformer

b18a3090-daca-11ed-bfe3-dac502259ad0.png

The architecture of a Swin Transformer

目前Transformer應(yīng)用到圖像領(lǐng)域主要有兩大挑戰(zhàn):

視覺實體變化大,在不同場景下視覺Transformer性能未必很好;

圖像分辨率高,像素點多,Transformer基于全局自注意力的計算導(dǎo)致計算量較大。

2.1 原理

針對上述兩個問題,微軟在《Swin Transformer》的論文中提出了一種包含滑窗操作。其中滑窗操作包括不重疊的local window,和重疊的cross-window。將注意力計算限制在一個窗口中,一方面能引入CNN卷積操作的局部性,另一方面能節(jié)省計算量。在各大圖像任務(wù)上,Swin Transformer都具有很好的性能。

2.2 分析

相比常見CNN網(wǎng)絡(luò)模型,其實也就是新增了MHA(Multi Head Attention)的關(guān)鍵算子

LayerNormalization

Matmul

GELU

量化

LN、GELU、Matmul存在掉點風(fēng)險

計算效率

占比最大的計算操作由Conv變成Matmul,因此要求硬件平臺MatMul計算能力強(qiáng)

03

模型轉(zhuǎn)換

Pulsar2介紹

Pulsar2(暫定名)是我們的新一代AI工具鏈,在吸取上一代工具鏈Pulsar的優(yōu)秀行業(yè)經(jīng)驗和不足之處的反思后進(jìn)行的重構(gòu),依然包含“模型轉(zhuǎn)換、離線量化、模型編譯、異構(gòu)調(diào)度”四合一功能,進(jìn)一步強(qiáng)化的網(wǎng)絡(luò)模型快速、高效的部署需求。在針對第三NPU架構(gòu)進(jìn)行了深度定制優(yōu)化的同時,也擴(kuò)展了算子&模型支持的能力及范圍,對Transformer結(jié)構(gòu)的網(wǎng)絡(luò)也有較好的支持。

b1c17690-daca-11ed-bfe3-dac502259ad0.png

pulsar2 deploy pipeline

3.1 模型下載

從Swin Transformer的官方倉庫獲取模型,由于是基于PyTorch訓(xùn)練,導(dǎo)出的是原始的pth模型格式,而對于部署的同學(xué)而言,更喜歡使用ONNX模型進(jìn)行后續(xù)的產(chǎn)品落地,為了方便測試,我們提供該模型的ONNX版本導(dǎo)出腳本,降低模型獲取門檻,便于之前不熟悉的同學(xué)直接掌握其中的關(guān)鍵操作。

import onnx
import torch
import requests
from onnxsim import simplify
from PIL import Image
from transformers import AutoFeatureExtractor, SwinForImageClassification


def download_swin_model(model_name):
  prefix = "microsoft"
  model_id = f"{prefix}/{model_name}" # google/vit-base-patch16-384


  url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
  image = Image.open(requests.get(url, stream=True).raw)
  feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)
  model = SwinForImageClassification.from_pretrained(model_id)
  inputs = feature_extractor(images=image, return_tensors="pt")
  outputs = model(**inputs)
  logits = outputs.logits
  # model predicts one of the 1000 ImageNet classes
  predicted_class_idx = logits.argmax(-1).item()
  print("Predicted class:", model.config.id2label[predicted_class_idx])


  # export
  model_path = f"{model_name}.onnx"
  torch.onnx.export(
    model,
    tuple(inputs.values()),
    f=model_path,
    do_constant_folding=True,
    opset_version=13,
    input_names=["input"],
    output_names=["output"]
  )


  # simplify
  model = onnx.load(model_path)
  model_simp, check = simplify(model)
  assert check, "Simplified ONNX model could not be validated"
  simp_path = f"{model_name}_sim.onnx"
  onnx.save(model_simp, simp_path)


def main():
  download_swin_model(model_name="swin-tiny-patch4-window7-224") # microsoft/swin-tiny-patch4-window7-224


if __name__ == "__main__":
  main()

3.2 模型編譯

Pulsar2為了提升用戶使用體驗,降低Pulsar客戶遷移的學(xué)習(xí)成本,基本上延續(xù)了原有風(fēng)格,包括Docker環(huán)境安裝、命令行指令、配置文件修改參數(shù)、仿真功能等。同時針對編譯速度慢的痛點,進(jìn)行了大幅度優(yōu)化,模型編譯的耗時相比第一代工具鏈平均降低了一個數(shù)量級(分鐘->秒)。

$ pulsar2 build --input model/swin-t.onnx --output_dir output --config config/swin-t.json --target_hardware=AX650
32 File(s) Loaded.
[10:22:36] AX Quantization Config Refine Pass Running ... Finished.
[10:22:36] AX Quantization Fusion Pass Running ...    Finished.
[10:22:36] AX Quantize Simplify Pass Running ...     Finished.
[10:22:36] AX Parameter Quantization Pass Running ...   Finished.
Calibration Progress(Phase 1): 100%|████████| 32/32 [00:08<00:00, ?3.92it/s]
Finished.
[10:22:45] AX Passive Parameter Quantization Running ... ?Finished.
[10:22:45] AX Parameter Baking Pass Running ... ? ? ? ? ? Finished.
[10:22:45] AX Refine Int Parameter pass Running ... ? ? ? Finished.
Network Quantization Finished.
quant.axmodel export success: output/quant/quant_axmodel.onnx
Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
......
2023-04-13 10:23:07.109 | INFO ? ? | yasched.test_onepass1475 - max_cycle = 6689562
2023-04-13 10:23:25.765 | INFO ? ? | yamain.command.build832 - fuse 1 subgraph(s)

從編譯log中我們大致看出,計算圖優(yōu)化、PTQ量化、離線編譯總共耗時只需50秒。然后我們來看一下大家比較關(guān)心的MHA結(jié)構(gòu)變成了什么樣子:

b1e98f68-daca-11ed-bfe3-dac502259ad0.png

MHA ONNX原始結(jié)構(gòu)

b214ffc2-daca-11ed-bfe3-dac502259ad0.png

MHA由工具鏈進(jìn)行圖優(yōu)化之后的quant.axmodel結(jié)構(gòu)

3.3 仿真運行

在這一代工具鏈,我們提供更方便的pulsar2-run-helper的插件,可以模擬NPU計算流程,方便提前獲得上板運行結(jié)果。(請大家記住仿真運行的結(jié)果,后續(xù)章節(jié)將與上板實際部署的推理結(jié)果進(jìn)行比對)

python3 cli_classification.py --post_processing --axmodel_path models/swin-t.axmodel --intermediate_path sim_outputs/0
[I] The following are the predicted score index pair.
[I] 2.6688, 285
[I] 1.9528, 223
[I] 1.8877, 279
[I] 1.8877, 332
[I] 1.8226, 282

04

上板部署

AX650N Demo板的BSP上已經(jīng)預(yù)裝了NPU模型測試需要的工具

/root # sample_npu_classification -m swin-t.axmodel -i cat.jpg -r 100
--------------------------------------
model file : swin-t.axmodel
image file : cat.jpg
img_h, img_w : 224 224
--------------------------------------
Engine creating handle is done.
Engine creating context is done.
Engine get io info is done.
Engine alloc io is done.
Engine push input is done.
--------------------------------------
2.6688, 285
1.9528, 223
1.8877, 332
1.8877, 279
1.8226, 282
--------------------------------------
Repeat 100 times, avg time 8.64 ms, max_time 8.65 ms, min_time 8.64 ms
--------------------------------------

對比上一章節(jié)的仿真結(jié)果,完全一致。

4.1 算力分配

AX650N的10.8Tops@Int8的算力其實是可分配的,上述內(nèi)容中,按照默認(rèn)的編譯選項,其實只發(fā)揮了一部分算力(3.6Tops@Int8)。我們來看看滿算力下的耗時表現(xiàn)如何呢?

/root # ax_run_model -m swin-t-npu3.axmodel -r 100
Run AxModel:
   model: swin-t-npu3.axmodel
    type: NPU3
    vnpu: Disable
  affinity: 0b001
   repeat: 100
   warmup: 1
   batch: 1
  tool ver: 1.0.0
 ------------------------------------------------------
 min =  3.769 ms  max =  3.805 ms  avg =  3.778 ms
 ------------------------------------------------------
/root #
/root # sample_npu_classification -m swin-t-npu3.axmodel -i cat.jpg -r 100
--------------------------------------
model file : swin-t-npu3.axmodel
image file : cat.jpg
img_h, img_w : 224 224
--------------------------------------
Engine creating handle is done.
Engine creating context is done.
Engine get io info is done.
Engine alloc io is done.
Engine push input is done.
--------------------------------------
2.6688, 285
1.9528, 223
1.8877, 332
1.8877, 279
1.8226, 282
--------------------------------------
Repeat 100 times, avg time 3.78 ms, max_time 3.79 ms, min_time 3.77 ms
--------------------------------------

05

性能統(tǒng)計

算力 耗時(ms) 幀率(fps)
3.6Tops@Int8 8.64 115
10.8Tops@Int8 3.77 265

NPU工具鏈的性能優(yōu)化是個長期堅持的過程,最新版本的性能數(shù)據(jù)會更優(yōu)秀。





審核編輯:劉清

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

    關(guān)注

    28

    文章

    5196

    瀏覽量

    135508
  • cnn
    cnn
    +關(guān)注

    關(guān)注

    3

    文章

    355

    瀏覽量

    23429
  • 卷積神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    4

    文章

    372

    瀏覽量

    12878
  • ChatGPT
    +關(guān)注

    關(guān)注

    31

    文章

    1598

    瀏覽量

    10279

原文標(biāo)題:愛芯分享 | 基于AX650N部署Swin Transformer

文章出處:【微信號:愛芯元智AXERA,微信公眾號:愛芯元智AXERA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何在ZYNQ本地部署DeepSeek模型

    一個最小號 DeepSeek 模型部署 AMD Zynq UltraScale+ MPSoC 處理系統(tǒng)的項目。
    的頭像 發(fā)表于 12-19 15:43 ?7587次閱讀
    如何在ZYNQ本地<b class='flag-5'>部署</b>DeepSeek<b class='flag-5'>模型</b>

    如何訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型部署蜂鳥e203開發(fā)

    本帖欲分享如何訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型部署蜂鳥e203開發(fā)。 1. 加載TFLite
    發(fā)表于 10-22 08:04

    Immich智能相冊在樹莓派5的高效部署與優(yōu)化

    海外廣受歡迎的開源智能相冊項目Immich部署于樹莓派5,并通過搭載基于AX650N/AX8850的M.2算力卡,顯著提升了系統(tǒng)算力。借
    的頭像 發(fā)表于 10-14 11:30 ?1283次閱讀
    Immich智能相冊在樹莓派5<b class='flag-5'>上</b>的高效<b class='flag-5'>部署</b>與優(yōu)化

    DeepSeek模型如何在云服務(wù)器上部署

    隨著大型語言模型(LLM)的應(yīng)用日益普及,許多開發(fā)者和企業(yè)希望像DeepSeek這樣的優(yōu)秀模型部署自己的云服務(wù)器
    的頭像 發(fā)表于 10-13 16:52 ?955次閱讀

    如何在FPGA部署AI模型

    如果你已經(jīng)在用 MATLAB 做深度學(xué)習(xí),那一定知道它的訓(xùn)練和仿真體驗非常絲滑。但當(dāng)模型要真正落地 FPGA 時,往往就會卡?。涸趺窗丫W(wǎng)絡(luò)結(jié)構(gòu)和權(quán)重優(yōu)雅地搬到硬件里?
    的頭像 發(fā)表于 09-24 10:00 ?4435次閱讀
    如何在FPGA<b class='flag-5'>部署</b>AI<b class='flag-5'>模型</b>

    使用OpenVINOPP-OCRv5模型部署在Intel顯卡

    是一個用于優(yōu)化和部署人工智能(AI)模型,提升AI推理性能的開源工具集合,不僅支持以卷積神經(jīng)網(wǎng)絡(luò)(CNN)為核心組件的預(yù)測式AI模型(Predictive AI),還支持以Transforme
    的頭像 發(fā)表于 09-20 11:17 ?1247次閱讀
    使用OpenVINO<b class='flag-5'>將</b>PP-OCRv5<b class='flag-5'>模型</b><b class='flag-5'>部署</b>在Intel顯卡<b class='flag-5'>上</b>

    vision board部署模型openmv的代碼導(dǎo)致連接超時怎么解決?

    在env終端中勾選了tiflte support后燒錄mdk板子后就開始顯示連接不到 無法部署模型
    發(fā)表于 09-19 07:59

    基于米爾瑞芯微RK3576開發(fā)的Qwen2-VL-3B模型NPU多模態(tài)部署評測

    。RKLLM 軟件棧可幫助用戶快速將 AI 模型部署瑞芯微芯片[3]。 RKLLM 使用流程 RKLLM SDK 概覽為使用 RKNPU,用戶需先在計算機(jī)上運行 RKLLM-To
    發(fā)表于 08-29 18:08

    自動駕駛中Transformer模型會取代深度學(xué)習(xí)嗎?

    持續(xù)討論。特別是在自動駕駛領(lǐng)域,部分廠商開始嘗試多模態(tài)大模型(MLLM)引入感知、規(guī)劃與決策系統(tǒng),引發(fā)了“傳統(tǒng)深度學(xué)習(xí)是否已過時”的激烈爭論。然而,從技術(shù)原理、算力成本、安全需求與實際落地路徑等維度來看,
    的頭像 發(fā)表于 08-13 09:15 ?4189次閱讀
    自動駕駛中<b class='flag-5'>Transformer</b>大<b class='flag-5'>模型</b>會取代深度學(xué)習(xí)嗎?

    【HZ-RK3568開發(fā)免費體驗】04 YOLOv11 模型轉(zhuǎn)換為RKNN并在部署

    1 前言 本次實驗要用YOLOv11模型yolov11n.onnx轉(zhuǎn)為RKNN模型,以便部署在開發(fā)
    發(fā)表于 07-02 14:01

    stm32N657上部署cubeAI生成代碼,編譯出錯的原因?怎么解決?

    你好,要怎么在stm32N657上部署cubeAI生成代碼呢,編譯出錯,我使用cubeAI生成的手寫數(shù)字模型的代碼,編譯報錯 要怎么配置呢,我看其他AI demo都是分了兩個文件,這
    發(fā)表于 06-20 06:31

    在env終端中勾選了tiflte support后燒錄mdk板子后就開始顯示連接不到,無法部署模型怎么解決?

    在env終端中勾選了tiflte support后燒錄mdk板子后就開始顯示連接不到 無法部署模型
    發(fā)表于 06-11 08:11

    如何使用Docker部署模型

    隨著深度學(xué)習(xí)和大模型的快速發(fā)展,如何高效地部署這些模型成為了一個重要的挑戰(zhàn)。Docker 作為一種輕量級的容器化技術(shù),能夠模型及其依賴環(huán)境
    的頭像 發(fā)表于 05-24 16:39 ?1136次閱讀

    基于RK3576開發(fā)的RKLLM大模型部署教程

    RKLLM-ToolkitHuggingFace或GGUF模型轉(zhuǎn)換為RKLLM格式,并選擇是否進(jìn)行量化。在部署階段,模型被加載到Roc
    的頭像 發(fā)表于 05-16 17:48 ?2317次閱讀
    基于RK3576開發(fā)<b class='flag-5'>板</b>的RKLLM大<b class='flag-5'>模型</b><b class='flag-5'>部署</b>教程

    【幸狐Omni3576邊緣計算套件試用體驗】DeepSeek 部署及測試

    的 Python 接口實現(xiàn)簡化模型部署和運行。 為了實現(xiàn)模型部署和應(yīng)用,需要先在計算機(jī)運行 RKLLM-Toolkit,
    發(fā)表于 03-21 19:31