What is ONNX(開放神經網路交換)?

    表示機器學習模型的開放標準格式,實現不同框架間的互操作性。

    Definition

    ONNX(Open Neural Network Exchange)是一種用於將機器學習模型表示為計算圖的開源格式。最初由 Microsoft 和 Facebook(現為 Meta)開發,ONNX 定義了一套通用的運算子和資料類型,允許模型從一個框架(例如 PyTorch)匯出並匯入到另一個框架(例如 TensorFlow 或 ONNX Runtime 等專用推論引擎)。該格式將模型表示為有向無環圖,其中節點是操作(卷積、矩陣乘法、注意力),邊是在操作之間流動的張量。

    ONNX 作為多樣 ML 生態系統之間的橋樑。不同的團隊可能偏好不同的訓練框架,但部署環境通常有嚴格的要求——行動應用可能需要 Core ML、嵌入式裝置可能需要 TensorRT,雲端服務可能使用 ONNX Runtime。ONNX 使單一訓練好的模型能夠透過格式轉換部署到所有這些環境,而無需重新訓練或手動重新實作。

    對於語言模型,ONNX 在推論優化方面特別相關。ONNX Runtime(Microsoft 的推論引擎)應用圖層級優化——運算子融合、常數折疊、記憶體規劃——可以顯著加速推論。這些優化應用於 ONNX 圖表示,使它們與框架無關。ONNX 生態系統還支援量化工具,可以直接在 ONNX 圖上將模型壓縮到 INT8 或 INT4 精度。

    Why It Matters

    在企業環境中,訓練框架和部署環境通常是不同的。研究團隊可能在 PyTorch 中開發模型,但生產系統可能需要 TensorRT 進行 GPU 推論、ONNX Runtime 進行 CPU 推論,或 Core ML 用於 Apple 裝置。沒有像 ONNX 這樣的可攜格式,每個部署目標都需要重新實作模型——這是一個昂貴且容易出錯的過程。

    ONNX Runtime 具體來說已成為生產部署的關鍵推論引擎,因為其效能優勢。在 CPU 工作負載上,帶有優化的 ONNX Runtime 可以比原生 PyTorch 推論快 2-4 倍。這種效能優勢使 ONNX 轉換成為生產部署管線中的標準步驟,特別是對於需要在嚴格延遲要求下大規模服務的模型。

    How It Works

    ONNX 轉換透過追蹤或腳本化模型的計算圖來運作。在 PyTorch 中,torch.onnx.export() 透過模型運行一個範例輸入,記錄所有執行的操作,並將產生的計算圖序列化為 ONNX 格式。匯出的圖同時捕獲模型架構(操作及其連接)和訓練好的權重(作為圖中的常數張量)。

    ONNX 圖隨後可以被任何相容的執行時載入。ONNX Runtime 應用優化通道:融合相鄰操作(例如將 MatMul + Add + GELU 合併為單一融合核心)、消除冗餘計算,以及規劃記憶體分配以最小化開銷。優化後的圖被編譯為目標硬體(CPU、GPU 或專用加速器)的可執行核心,產生一個以最小開銷處理輸入的推論會話。

    Example Use Case

    一家公司在 PyTorch 中訓練了一個用於客戶意圖偵測的文字分類模型。在生產中,他們需要在 CPU 實例上服務該模型以控制成本。他們將模型匯出為 ONNX,應用 ONNX Runtime 的圖優化和 INT8 量化,並實現了比原生 PyTorch CPU 推論高 3.5 倍的吞吐量提升——使他們能夠在單一實例上每秒服務 10,000 個請求,而不是需要三個實例。

    Key Takeaways

    • ONNX 是跨 ML 框架的可攜模型表示的開放標準。
    • 它實現了在一個框架中訓練並在另一個框架中部署而無需重新實作。
    • ONNX Runtime 提供顯著加速推論的圖層級優化。
    • 該格式將模型表示為帶有操作和張量的有向無環計算圖。
    • ONNX 對 CPU 推論優化和跨平台部署特別有價值。

    How Ertas Helps

    Ertas Studio 可以將微調模型匯出為與 ONNX 轉換管線相容的格式,使需要優化 CPU 推論或跨平台相容性的團隊能夠透過 ONNX Runtime 進行部署。

    Related Resources

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.