IREE AI編譯器編譯測試流程指南

iree onnx demo

計劃協議系列博客,記錄學習iree編譯器的過程.

今天第一篇博客,記錄安裝和測試iree

文章目錄

  • iree onnx demo
    • 下載安裝iree
    • python環境安裝
    • 編譯測試
      • 1. [前端] onnx模型轉MLIR文件
      • 2. [后端] MLIR文件轉可執行文件
      • 3. [執行] 執行測試編譯后的文件
    • 關于后端設備的介紹

下載安裝iree

IREE官網教程

這里都已經非常詳細了,按照官網教程可以成功配置

當然如果你和我一樣懶得看這么多, 你可以直接下載iree項目后, 項目內有一個編譯腳本

build_tools/cmake/build_all.sh ,直接執行 build_tools/cmake/build_all.sh build就可以編譯iree到build文件夾了.

python環境安裝

上述的編譯步驟會自動編譯iree python的相關庫,前端IR的導入就是依賴這一部分,可以慘考 官網-python包編譯安裝 , 我是使用cmake指令直接安裝的

CMAKE_INSTALL_METHOD=ABS_SYMLINK python -m pip install -e ../iree-build/compiler
CMAKE_INSTALL_METHOD=ABS_SYMLINK python -m pip install -e ../iree-build/runtime

編譯測試

1. [前端] onnx模型轉MLIR文件

下載onnx 模型可以在: https://github.com/onnx/models/tree/main 這里找onnx 模型用來實驗.

本文將下載模型: https://github.com/onnx/models/tree/main/Computer_Vision/adv_inception_v3_Opset16_timm 用于后續的測試

  • 使用下述指令即可將onnx模型轉為mlir文件,
    • free-import-onnx 是python工具,需要編譯IREE后安裝python相關的東西,
      • 也可以直接使用pip下載,自行查閱官網文檔.
iree-import-onnx \./*.onnx \--opset-version 17 \-o model.mlir

生成的MLIR文件是一個文本文件,可以直接打開

image-20250320230858104

里面基本分類2個部分:

  1. 有哪些算子,比如

    1. 卷積算子

      1. %190 = torch.operator "onnx.Conv"(%arg0, %2, %3) {torch.onnx.dilations = [1 : si64, 1 : si64], torch.onnx.group = 1 : si64, torch.onnx.kernel_shape = [3 : si64, 3 : si64], torch.onnx.pads = [0 : si64, 0 : si64, 0 : si64, 0 : si64], torch.onnx.strides = [2 : si64, 2 : si64]} : (!torch.vtensor<[1,3,299,299],f32>, !torch.vtensor<[32,3,3,3],f32>, !torch.vtensor<[32],f32>) -> !torch.vtensor<[1,32,149,149],f32> 
        
      2. 常量算子

        1.     %188 = torch.operator "onnx.Constant"() {torch.onnx.value = dense_resource<_onnx__Conv_1156> : tensor<192x2048x1x1xf32>} : () -> !torch.vtensor<[192,2048,1,1],f32> 
          
  2. 有哪些常量

    1. 一般就是權重和算子的參數

      _onnx__Conv_1156: "0x0800000098233D3B52728ABEE29334BE1F0CF4BD48A5BDBD8D90713D..."
      

2. [后端] MLIR文件轉可執行文件

  • 編譯MLIR
iree-compile \model.mlir \--iree-hal-target-backends=llvm-cpu \--iree-llvmcpu-target-cpu=host \-o model_cpu.vmfb

可以生成最終的編譯結果 vmfb 文件, 這是一個flatbuffer格式的, 可以通過 iree-dump-module ./model_cpu.vmfb 指令來看模型的結構.


#   # | Offset   |   Length | Blocks | i32 # | ref # | Requirements | Aliases
# ----+----------+----------+--------+-------+-------+--------------+-----------------------------------------------------
#   0 | 00000000 |    17232 |      1 |   340 |     4 |              |
#   1 | 00004350 |      488 |      1 |    24 |     8 |              | main_graph$async
#   2 | 00004538 |       90 |      1 |     2 |     3 |              | main_graph
#   3 | 00004598 |     2311 |     14 |    26 |     6 |              | __init

其中J:

# main_graph$async 和 main_graph 更有可能是用于模型推理的函數。其中,main_graph$async 或許是異步執行的函數,而 main_graph 是同步執行的函數。你可以先嘗試使用 main_graph 作為函數名來運行模型

3. [執行] 執行測試編譯后的文件

  • 執行測試
    • 這里使用的是fp32全是2的數值的TV.
iree-run-module \--module=model_cpu.vmfb \--device=local-task \--function=main_graph \--input="1x3x299x299xf32=2" \./model_cpu.vmfb

image-20250320231446248

關于后端設備的介紹

1. llvm-cpu

  • 通用 CPU 后端(默認選項)
  • 基于 LLVM 編譯器優化 CPU 指令
  • 支持 x86/ARM 等主流 CPU 架構
  • 適合沒有專用加速硬件的設備

2. metal-spirv

  • 蘋果專有 GPU 加速方案
  • 支持 iOS/macOS 設備的 Metal API
  • 適配 Apple Silicon(M 系列芯片)和 A 系列芯片
  • 需要 macOS 10.13 + 或 iOS 11+

3. vmvx

  • 針對 Intel 視覺處理單元(VPU)
  • 如 Movidius Myriad X 等邊緣 AI 芯片
  • 適合低功耗嵌入式設備的視覺推理
  • 需安裝 VPU 驅動和相關工具鏈

4. vmvx-inline

  • 實驗性的 VPU 內聯編譯模式
  • 直接在 CPU 上模擬 VPU 指令集
  • 主要用于開發調試,性能較低

5. vulkan-spirv

  • 跨平臺 GPU 加速方案
  • 支持 NVIDIA/AMD/Intel 等主流 GPU
  • 適用于 Linux/Windows/macOS 等系統
  • 需安裝對應 GPU 的 Vulkan 驅動

6. webgpu-spirv

  • 瀏覽器端 GPU 加速方案
  • 基于 WebGPU API(需 Chrome/Firefox 等支持)
  • 允許在網頁中直接運行 AI 模型
  • 適用于 WebAssembly 環境

選擇建議

  • CPU 設備 → llvm-cpu
  • 蘋果設備 → metal-spirv
  • 通用 GPU → vulkan-spirv
  • 邊緣 AI 設備 → vmvx
  • 網頁應用 → webgpu-spirv

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898477.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898477.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898477.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【產品小白】如何運營一個新的產品

運營一個新產品既充滿機遇&#xff0c;也伴隨著挑戰。新產品運營的核心在于快速獲取用戶、驗證市場假設、持續迭代與優化&#xff0c;并通過有效的推廣和用戶反饋機制不斷完善產品。 1. 市場調研與定位 用戶調研&#xff1a;在產品初期&#xff0c;通過訪談、問卷、競品分析等…

破解驗證碼新利器:基于百度OCR與captcha-killer-modified插件的免費調用教程

破解驗證碼新利器&#xff1a;基于百度OCR與captcha-killer-modified插件的免費調用教程 引言 免責聲明&#xff1a; 本文提供的信息僅供參考&#xff0c;不承擔因操作產生的任何損失。讀者需自行判斷內容適用性&#xff0c;并遵守法律法規。作者不鼓勵非法行為&#xff0c;保…

JSON 解析中需要清理的危險字符

在代碼中 replace(chr(0), "") 的作用是刪除 JSON 響應中可能存在的空字符&#xff08;Null character&#xff09;。以下是詳細解釋&#xff1a; 1. chr(0) 是什么&#xff1f; chr(0) 表示 ASCII 碼為 0 的字符&#xff0c;即空字符&#xff08;Null Character&am…

指令系統2(Load/Store 指令)

一. Load/Store 指令 1. 前變址 前變址指令是在讀取或存儲數據時&#xff0c;先根據基址寄存器&#xff08;Rn&#xff09;與偏移量&#xff08;offset&#xff09;計算出有效地址&#xff0c;再進行數據操作。相關指令及示例如下&#xff1a; LDR R0, [R1, #4]&#xff1a;從…

ubuntu部署運行xinference全精度對話deepseek本地部署圖文教程

前置環境搭建勞請移步往期 source activate 自己環境名啟動python3.12環境安裝xinference&#xff0c; 按教程敲命令&#xff0c;wheel包與wsl的通用&#xff0c;pip install 包名。 vllm引擎&#xff0c;transform引擎也會順帶自動裝上了。 后續操作請參照往期教程。本地部署模…

技術分享 | MySQL內存使用率高問題排查

本文為墨天輪數據庫管理服務團隊第51期技術分享&#xff0c;內容原創&#xff0c;如需轉載請聯系小墨&#xff08;VX&#xff1a;modb666&#xff09;并注明來源。 一、問題現象 問題實例mysql進程實際內存使用率過高 二、問題排查 2.1 參數檢查 mysql版本 &#xff1a;8.0.…

[AI速讀]混合語言IP集成:挑戰與高效解決方案

在現代SoC(系統級芯片)設計中,IP(知識產權模塊)復用是提升開發效率的關鍵。然而,當設計涉及多種硬件描述語言(如SystemVerilog、VHDL、SystemC)時,如何高效集成不同語言的IP模塊成為一大難題。本文將從實際設計場景出發,探討混合語言IP集成的核心挑戰,并介紹一套方法…

【vulhub/wordpress靶場】------獲取webshell

1.進入靶場環境&#xff1a; 輸入&#xff1a;cd / vulhub / wordpress / pwnscriptum 修改版本號&#xff1a; vim docker-compose.yml version: 3 保存退出 開啟靶場環境&#xff1a; docker - compose up - d 開啟成功&#xff0c;docker ps查看端口 靶場環境80…

微信小程序:用戶拒絕小程序獲取當前位置后的處理辦法

【1】問題描述&#xff1a; 小程序在調用 wx.getLocation() 獲取用地理位置時&#xff0c;如果用戶選擇拒絕授權&#xff0c;代碼會直接拋出錯誤。如果再次調用 wx.getLocation() 時&#xff0c;就不會在彈窗詢問用戶是否允許授權。導致用戶想要重新允許獲取地理位置時&#x…

NLP 與常見的nlp應用

自然語言處理&#xff08;NLP&#xff09;是一個廣泛的領域&#xff0c;它不僅包括自然語言理解&#xff08;NLU&#xff09;&#xff0c;還涉及一系列其他任務和子領域。以下是NLP領域中的主要組成部分及其相關任務&#xff1a; 1. 自然語言理解&#xff08;NLU&#xff09; …

全網首創/純Qt/C++實現國標GB28181服務/實時視頻/云臺控制/預置位/錄像回放和下載/事件訂閱/語音對講

一、前言說明 用純Qt來實現這個GB28181的想法很久了&#xff0c;具體可以追溯到2014年&#xff0c;一晃十年都過去了&#xff0c;總算是整體的框架和邏輯都打通了&#xff0c;總歸還是雜七雜八的事情多&#xff0c;無法靜下心來研究具體的協議&#xff0c;最開始初步了解協議后…

Django+celery+flower

Djangoceleryflower Django的定時任務及可視化監控Django Django的定時任務及可視化監控 Django的定時任務&#xff0c;以及可視化監控。 Django Django&#xff1b; 首先在python中新建虛擬環境并激活 pip install virtualenv python -m venv venv source venv/bin/activa…

Python 編程題 第十一節:選擇排序、插入排序、刪除字符、目標移動、尾部的0

選擇排序 假定第一個為最小的為已排序序列&#xff0c;與后面的比較&#xff0c;找到未排序序列中最小的后&#xff0c;交換位置&#xff0c;獲得最小元素&#xff0c;依次往后 lst[1,14,25,31,21,13,6,8,14,9,7] def selection_sort(lst):for i in range(len(lst)):min_inde…

組態王Kingview配置為OPCUA服務器的一些問題處理

一、問題描述 1、組態王【運行配置】界面沒有【服務配置】的選項&#xff0c;無法將組態王Kingview配置為OPCUA服務器&#xff1b; 2、點擊組態王【運行配置界面】的【服務配置】選項彈窗警告提示【試圖執行的操作不受支持】&#xff0c;如下圖所示&#xff1a; 二、問題分析 …

模塊二 單元4 安裝AD+DC

模塊二 單元4 安裝ADDC 兩個任務&#xff1a; 1.安裝AD活動目錄 2.升級當前服務器為DC域控制器 安裝前的準備工作&#xff1a; 確定你要操作的服務器系統&#xff08;Windows server 2022&#xff09;&#xff1b; 之前的服務器系統默認是工作組的模式workgroup模式&#xff08…

git clone項目報錯fatal: fetch-pack: invalid index-pack output問題

前情回顧&#xff1a;git項目放在公司服務器上面&#xff0c;克隆等操作需要連接VPN才能操作。由于項目比較大&#xff0c;網速比較慢&#xff0c;克隆項目經常出現fetch-pack: invalid index-pack output。在網上查找各種解決方法。也就這一種有點效果。僅供參考&#xff0c;不…

前端Tailwind CSS面試題及參考答案

解釋 Tailwind CSS 中 w-1/2 和 max-w-md 的區別及適用場景 在 Tailwind CSS 里&#xff0c;w-1/2 和 max-w-md 屬于不同類型的寬度控制類&#xff0c;它們的功能和適用場景存在明顯差異。 w-1/2 是用來設定元素寬度的類。它把元素寬度設定為其父元素寬度的一半。例如&#xff…

《深度剖析:BERT與GPT——自然語言處理架構的璀璨雙星》

在自然語言處理&#xff08;NLP&#xff09;的廣袤星空中&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;與GPT&#xff08;Generative Pretrained Transformer&#xff09;系列模型宛如兩顆最為耀眼的星辰&#xff0c;引領…

VMware主機換到高配電腦,高版本系統的問題

原來主機是i3 ,windows7系統&#xff0c;vmware 14.0,虛機系統是ubuntu 14.04。目標新機是i7 14700KF,windows11系統。原以為安裝虛擬機&#xff0c;將磁盤文件&#xff0c;虛擬機配置文件拷貝過去可以直接用。 新目標主機先安裝了vmware 15&#xff0c;運行原理虛機&#xff0…

后端框架模塊化

后端框架的模塊化設計旨在簡化開發流程、提高可維護性&#xff0c;并通過分層解耦降低復雜性。以下是常見的后端模塊及其在不同語言&#xff08;Node.js、Java、Python&#xff09;中的實現方式&#xff1a; 目錄 1. 路由&#xff08;Routing&#xff09;2. 中間件&#xff08;…