備本地推理:OpenVINO 快速上手指南)
從 PyTorch 模型到多設(shè)備本地推理OpenVINO 快速上手指南【免費下載鏈接】openvinoOpenVINO? is an open source toolkit for optimizing and deploying AI inference項目地址: https://gitcode.com/GitHub_Trending/op/openvinoOpenVINO 是 Intel 開源的 AI 推理優(yōu)化工具箱負責把你用 PyTorch、ONNX、TensorFlow 等框架訓練的模型做轉(zhuǎn)換、優(yōu)化再編譯部署到 CPU、Intel 獨顯/核顯和 NPU專用 AI 加速芯片上跑推理。它覆蓋 Windows、macOS、Linux 三個平臺補上的是模型從訓練環(huán)境遷到業(yè)務(wù)環(huán)境時最頭疼的一段不改業(yè)務(wù)代碼就把推理速度提上來。誰該讀這篇讀完這節(jié)能對號入座決定自己走到哪一步。獨立開發(fā)者手里有個 PyTorch 分類或檢測模型想塞進產(chǎn)品讀完能用 pip 裝好并在本機 CPU 上跑通第一次推理。邊緣設(shè)備開發(fā)者要在樹莓派、舊筆記本或帶 Intel NPU 的輕薄本上離線跑模型讀完能確認設(shè)備支持情況并編譯到目標硬件。數(shù)據(jù)科學工程師習慣用 ONNX 中轉(zhuǎn)模型讀完能分清.onnx和 OpenVINO IR模型序列化格式兩種加載方式的區(qū)別。C 應(yīng)用開發(fā)者不想在業(yè)務(wù)里嵌 Python讀完能照著 samples 目錄里的 C/C/JS 示例找到對應(yīng)入口。跑起來之前讀完這節(jié)能配好環(huán)境分 pip 直裝和源碼編譯兩條路。路線要裝什么安裝方式pip 直裝推薦Python 3.9–3.12 pippip install -U openvino源碼編譯Linux 為例CMake ≥ 3.26、GCC ≥ 7.5構(gòu)建期依賴若干庫sudo ./install_build_dependencies.sh源碼編譯macOS / Windows與 Linux 類似工具鏈以平臺為準以docs/dev/build_mac_intel_cpu.md、build_windows.md實際內(nèi)容為準絕大多數(shù)場景走 pip 就夠了pip install -U openvino python -c import openvino as ov; print(ov.__version__)成功后你會看到控制臺打印出 OpenVINO 的版本號。需要最新特性或要動源碼時走源碼編譯Linux 為例git clone https://gitcode.com/GitHub_Trending/op/openvino cd openvino git submodule update --init --recursive sudo ./install_build_dependencies.sh mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. cmake --build . --parallel成功后你會在build/bin/intel64/Release下看到編譯出的運行時庫build/tools/ovc下多出模型轉(zhuǎn)換命令。構(gòu)建耗時較長資源緊張的機器可用cmake --build . --parallel 8限制并行數(shù)。首次使用走一遍讀完這節(jié)能獨立跑通你的第一次推理。裝包驗證執(zhí)行上一節(jié)的 pip 命令看到版本號即通過。確認可用設(shè)備代碼里用ov.Core()調(diào).available_devices屬性。卡住時先看 Python 是否在 3.9–3.12 范圍內(nèi)版本不對 import 會直接報錯。拿到模型文件用現(xiàn)成的.onnx或 OpenVINO IR.xml結(jié)構(gòu) .bin權(quán)重文件PyTorch 模型可在下一步直接轉(zhuǎn)換無需先導出。編譯到目標設(shè)備ov.compile_model(model, CPU)把模型針對該硬件做算子映射和優(yōu)化耗時略長屬正常。跑一次推理看輸出輸入張量喂進去讀輸出張量 shape 和數(shù)值。功能逐個拆讀完這節(jié)能按場景挑出你要用的四塊能力。同一份模型切換 CPU、GPU、NPU出差帶著輕薄本同一個模型想核顯能跑就交核顯回公司臺式機再換回獨顯。操作路徑加載和轉(zhuǎn)換都不變只把ov.compile_model第二個參數(shù)從CPU改成GPU或NPU先打印available_devices確認設(shè)備在列。訓練框架模型直接轉(zhuǎn)成 IR給舊筆記本加本地問答模型是同事用 PyTorch 訓的、對方不配合導出。操作路徑model torch.hub.load(pytorch/vision, shufflenet_v2_x1_0, weightsDEFAULT) example torch.randn(1, 3, 224, 224) ov_model ov.convert_model(model, example_input(example,)) ov.save_model(ov_model, shufflenet.xml)成功后會生成.xml.bin兩個文件之后加載不再需要 PyTorch 環(huán)境。ONNX 文件則直接ov.Core().read_model(a.onnx)以倉庫支持列表為準。輸入尺寸、歸一化交給 PreProcessor產(chǎn)品上線前把訓練時的 resize、除以 255、channel 重排這些步驟固化下來避免各端預(yù)處理不一致。操作路徑拿到編譯好的模型后調(diào)ov.PrePostProcessor在 input 上鏈式設(shè)tensor_info、scale、mean最后用它的build()拿回帶預(yù)處理邏輯的模型?;鶞使ぞ吡炕崴傩Ч钜拐{(diào)試完想確認優(yōu)化到底省了多少毫秒憑感覺沒用。操作路徑命令行執(zhí)行benchmark_app 模型.xml -d CPU在samples/cpp/benchmark_app/下也能找到對應(yīng)源碼版本輸出里有每次迭代的耗時和吞吐統(tǒng)計。底層思路讀完這節(jié)能看懂三個設(shè)計決策動源碼前心里有底。前端和運行時拆開它做了什么每個訓練框架單獨做成一個前端插件src/frontends/下 pytorch、onnx、tensorflow、jax、paddle 各占一個目錄統(tǒng)一輸出到同一套核心模型結(jié)構(gòu)定義在src/core/。為什么這么設(shè)計新框架支持不碰核心代碼框架升級也只改自己的前端目錄。改源碼時看src/frontends/對應(yīng)框架子目錄。設(shè)備以插件形式注冊它做了什么Core枚舉可用設(shè)備CPU、GPU、NPU 各自是獨立插件代碼在src/plugins/下的 intel_cpu、intel_gpu、intel_npu 等目錄auto 插件負責自動挑最快設(shè)備。為什么這么設(shè)計加新硬件只需新增插件目錄上層一行不改。改源碼時看src/plugins/CMakeLists.txt和對應(yīng)插件目錄。推理請求支持異步它做了什么InferenceRequestsrc/inference/目錄同時提供同步infer和set_blobasync_infer的異步用法配合 wait 控制完成時機。為什么這么設(shè)計多路攝像頭或并發(fā)問答場景下請求可以排隊重疊執(zhí)行而不是串行干等。改源碼時看src/inference/include/openvino/inference.hpp和src/inference/docs/下的說明。動手改一改讀完這節(jié)能挑一條二開路徑先動手。換成自己的模型驗證全流程把上面 5 行轉(zhuǎn)換代碼里的 hub 模型換成自己的 PyTorch 模型或 onnx 路徑在samples/python/hello_classification/腳本里替換模型路徑跑通并看到分類結(jié)果即改對了。跑一個不同設(shè)備的插件把編譯目標從 CPU 換成 NPU在samples/python/hello_classification/hello_classification.py里改設(shè)備名available_devices里有NPU且推理出結(jié)果即改對了。加自定義預(yù)處理規(guī)則在samples/python/hello_reshape_ssd/hello_reshape_ssd.py基礎(chǔ)上給 PreProcessor 加一層scale對比加前后輸出數(shù)值變化符合預(yù)期即改對了??ㄗ×讼瓤催@讀完這節(jié)能自行排查前 5 類問題。import 報版本錯誤Python 版本不在 3.9–3.12 范圍換用支持的 Python 版本重裝。available_devices只有 CPUGPU 沒裝 OpenCL 驅(qū)動或 NPU 驅(qū)動缺失裝好對應(yīng)驅(qū)動后重啟以官方支持設(shè)備列表為準。轉(zhuǎn)換或編譯報 unsupported op模型里有當前版本未支持的算子升級 openvino或把該算子拆成基礎(chǔ)算子。GPU 編譯后比 CPU 還慢輸入尺寸太小導致 kernel 開銷大于收益先換 CPU 跑通再用 benchmark_app 量化對比。源碼編譯報第三方庫缺失git submodule update --init --recursive沒執(zhí)行或網(wǎng)絡(luò)中斷重跑該命令國內(nèi)網(wǎng)絡(luò)可試倉庫自帶的scripts/submodule_update_with_gitee.sh。項目采用 Apache-2.0 協(xié)議商用免費。如果你正被模型在訓練機上跑得動、上不了業(yè)務(wù)機卡住先花 5 分鐘用 pip 跑通第一版git clone https://gitcode.com/GitHub_Trending/op/openvino發(fā)現(xiàn) bug 或缺少機型/算子支持歡迎提 issue 或 PR。【免費下載鏈接】openvinoOpenVINO? is an open source toolkit for optimizing and deploying AI inference項目地址: https://gitcode.com/GitHub_Trending/op/openvino創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考