圖形手術
大多數模型在運算子和張量形狀受到 Model Compiler 的支援時,可以直接進行編譯。在變更模型之前,請檢查 模型相容性 清單,並首先嘗試標準的編譯流程。
圖的修改是一種進階步驟,適用於需要在編譯之前或在 SiMa 裝置上高效執行之前,對圖進行有針對性的變更的模型。您可以對原始 Python 模型程式碼進行這些變更,然後再次匯出模型,或者您可以直接編輯匯出的 ONNX 圖。
SDK 包含一個預先建置的 sima-model-surgery 技能,適用於 Codex 和 Claude。請要求代理程式檢查您的模型,它可以檢查相容性、提出並應用所需的圖修改,驗證結果,並為另一次編譯嘗試準備模型。此技能對於 YOLO 模型特別有用,因為圖的修改可以提高編譯器的相容性,並優化模型輸出,以用於 SiMa 執行時間。
例如,您可以這樣詢問:
Use the sima-model-surgery skill to inspect my YOLO model, optimize unsupported
graph sections, and validate the modified model.
了解圖的修改操作。
圖結構修改會改變神經網路運算圖的結構。當模型在量化、編譯或部署之前,需要進行有針對性的修改時,請使用此功能。
常見的原因包括:
- 客製化一個預先訓練好的模型。
- 替換一個 Model Compiler 不支援的運算子。
- 重新設計或重寫圖形運算,以避免阻礙高效的編譯。
- 優化模型圖,讓更多模型能在 MLA 上執行。
- 針對目標裝置或部署限制,調整模型。
選擇要變更的位置。
這個 Model Compiler 會定期更新,以支援更多運算子。 有些模型在所有層都能在 MLA 上執行,或是在模型達到效能目標之前,仍然需要進行圖結構的調整。
如果可能,請在原始模型程式碼中進行變更,例如: PyTorch 或 TensorFlow 產生已匯出模型的模組。通常,對原始碼層級進行的修改更容易進行審查、測試和維護。
當無法對原始碼層級進行修改時,請編輯已匯出的模型。 ONNX 圖。接下來的內容將著重於。 ONNX 圖的結構是因為 ONNX 是 Model Compiler例如,您可以將非 4D 張量重新塑形為 4D,或將不受支援的運算子替換為受支援的替代運算子。 Model Compiler 包含 sima-utils 套件。匯入 ONNX 輔助工具
在您修改圖之前使用的模組:
from sima_utils.onnx import onnx_helpers as oh
如需了解 Model Compiler API,請參閱 AFE API 參考資料 。
分析 MLA 的涵蓋範圍。
西馬 MLSoC 使用以下執行後端:
- 現代語言學會
- CVU(EV74)
- APU(A65)
在編譯期間,Model Compiler 會在可行時將運算子指派給 MLA。無法在 MLA 上執行的運算子會對應到 CVU 或 APU。這可能會將模型分割成多個 MLA 區段,並產生多個 .elf 檔案。
為了獲得最佳效能,請修改模型,以便更多部分在 MLA 上執行。如果整個模型都對應到 MLA,則編譯會產生單一 .elf 檔案。
首先,找出不對應到 MLA 的層。然後決定要替換或重新塑形的運算子。這需要同時使用 Model Compiler 的輸出,以及對 ML 運算子、DSP 處理和 MLA 支援的了解。