技術指南

ONNX 和模型互通性

ONNX(開放神經網路交換)是一種用於表示機器學習模型的開放標準格式,以便它們可以在框架和運行時之間自由移動。

概述

ONNX(開放神經網路交換)是一種用於表示機器學習模型的開放標準格式,以便它們可以在框架和運行時之間自由移動。它允許您在一種工具(如 PyTorch)中訓練模型,並將其部署在另一個環境中,而無需重寫它。

ONNX 和模型互通性是一個技術構建塊,會大規模影響模型品質、基礎設施成本、延遲和可靠性。

深入探討

不同的框架(PyTorch、TensorFlow、scikit-learn)以不相容的格式儲存模型,這使得部署很痛苦。 ONNX 由 Microsoft 和 Facebook 於 2017 年推出,現在由 Linux 基金會管轄,它透過定義通用檔案格式和一組標準化運算子(如 Conv、MatMul、Relu)來解決這個問題,這些運算子將模型描述為計算圖。您將經過訓練的模型匯出到 .onnx 文件,任何相容的運行時都可以加載它。然後,ONNX 運行時在不同的硬體上有效地執行圖形,應用算子融合和量化等優化,並將計算路由到 CPU、NVIDIA GPU(透過 TensorRT)或專用加速器等後端。這將模型訓練與部署分開。

技術洞察

ONNX 模型是一個序列化的計算圖:節點是從版本化運算子集 (opset) 中提取的運算符,邊攜帶具有定義的形狀和類型的張量。導出器追蹤或編寫模型的腳本來捕獲此圖。在推理時,ONNX 運行時將圖劃分為「執行提供者」(CPU、CUDA、TensorRT 等),每個提供者處理其最支援的運算符,並應用圖級優化(例如常數折疊和節點融合)來加快速度。

掌握 ONNX 和模型互通性

ONNX(開放神經網路交換)是一種用於表示機器學習模型的開放標準格式,以便它們可以在框架和運行時之間自由移動。它允許您在一種工具(如 PyTorch)中訓練模型,並將其部署在另一個環境中,而無需重寫它。 ONNX 和模型互通性是一個技術構建塊,會大規模影響模型品質、基礎設施成本、延遲和可靠性。為了建立深入的理解,請將 ONNX 和模型互通性視為一個操作模型,而不是單一功能:定義所需的結果,澄清假設,並將系統可以可靠地執行的操作與仍需要專家判斷的操作分開。

在實踐中,使用 ONNX 和模型互通性的強大團隊根據可靠性和成本優化架構、資料和基礎設施選擇。他們記錄明確的成功標準,根據實際數據和工作流程進行測試,並根據觀察到的失敗模式而不是一次性基準測試勝利進行迭代。這就是理論理解轉變為跨產品、政策和營運的持久能力的地方。

多年來,架構決策決定著效能和營運成本。同時,優化一個基準測試可以隱藏更廣泛的系統弱點。最具彈性的方法是將實驗速度與治理規則結合:運行試點、捕獲證據、發布決策日誌,並隨著模型行為、使用者期望和監管要求的發展不斷更新保障措施。

戰略影響

多年來,架構決策決定著效能和營運成本。

多年來,架構決策決定著效能和營運成本。在高品質部署中,這會轉化為可衡量的操作規則、所有權邊界和定期審查儀式,以便團隊可以增強信心,而不是擴大模糊性。

技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。

技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。在高品質部署中,這會轉化為可衡量的操作規則、所有權邊界和定期審查儀式,以便團隊可以增強信心,而不是擴大模糊性。

更好的工程選擇可以減少生產中的可靠性事故。

更好的工程選擇可以減少生產中的可靠性事故。在高品質部署中,這會轉化為可衡量的操作規則、所有權邊界和定期審查儀式,以便團隊可以增強信心,而不是擴大模糊性。

ONNX 和模型互通性的未來

ONNX 正在鞏固自己作為模型部署通用語言的地位,特別是在邊緣和跨平台服務方面。預計大型語言模型和轉換器的運算符覆蓋範圍更廣,對量化和低位推理的更嚴格支持,以及與硬體供應商運行時的更深入整合。隨著專用 AI 晶片生態系統的發展,像 ONNX 這樣的供應商中立格式變得更有價值,讓團隊無需重新設計模型即可交換硬件,並且 ONNX Runtime 繼續擴展到移動和 Web(通過 WebAssembly)目標。

現實世界的實施

將 PyTorch 映像分類器匯出到 ONNX,並在不依賴 Python 的 C++ 生產伺服器上使用 ONNX 運行時運行它。

透過 ONNX Runtime Web (WebAssembly) 將模型部署到行動裝置或瀏覽器以進行裝置上進行推理。

使用 NVIDIA TensorRT 作為 ONNX 執行時間執行提供者來加速匯出的變壓器,以降低延遲。

將 ONNX 模型量化為 int8 以縮小其大小並加速邊緣 CPU 上的推理。

實施模式

ONNX 和模型互通性實踐

將 PyTorch 映像分類器匯出到 ONNX,並在不依賴 Python 的 C++ 生產伺服器上使用 ONNX 運行時運行它。

將 PyTorch 影像分類器匯出到 ONNX 並在不依賴 Python 的 C++ 生產伺服器上使用 ONNX 運行時運行它 團隊在預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移跟踪生產力增益和錯誤成本時,通常會獲得更好的結果。

ONNX 和模型互通性實踐

透過 ONNX Runtime Web (WebAssembly) 將模型部署到行動裝置或瀏覽器以進行裝置上進行推理。

透過 ONNX Runtime Web (WebAssembly) 將模型部署到行動裝置或瀏覽器以進行裝置上推理 當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並追蹤一段時間內的生產力提升和錯誤成本時,通常會獲得更好的結果。

ONNX 和模型互通性實踐

使用 NVIDIA TensorRT 作為 ONNX 執行時間執行提供者來加速匯出的變壓器,以降低延遲。

使用 NVIDIA TensorRT 作為 ONNX 執行時間執行提供者來加速匯出的變壓器,以實現更低的延遲 當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移追蹤生產力增益和錯誤成本時,通常會獲得更好的結果。

ONNX 和模型互通性實踐

將 ONNX 模型量化為 int8 以縮小其大小並加速邊緣 CPU 上的推理。

將 ONNX 模型量化為 int8 以縮小其大小並加快邊緣 CPU 的推理速度 當團隊預先定義品質閾值、為邊緣情況保留人工升級路徑並隨著時間的推移跟踪生產力增益和錯誤成本時,通常會獲得更好的結果。

風險與防護欄

!

優化一項基準測試可以隱藏更廣泛的系統弱點。

!

基礎設施和維護成本常常被低估。

!

隨著系統變得更加複雜,安全性和可觀察性差距可能會擴大。

實施路線圖

1

在實施之前定義延遲、品質和成本目標。

在實施之前定義延遲、品質和成本目標。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

2

在實際負載和資料條件下進行基準測試。

在實際負載和資料條件下進行基準測試。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

3

儀器監控錯誤、漂移和使用者影響。

儀器監控錯誤、漂移和使用者影響。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

4

在擴展之前準備回滾和事件回應路徑。

在擴展之前準備回滾和事件回應路徑。將每個步驟視為證據門:如果不符合標準,則暫停推出,縮小差距,然後再擴大使用。

不斷探索