部署與效率

onnx

你在 PyTorch 中訓練視覺模型,卻想以 C++ 部署到伺服器、或部署到手機、或餵給 TensorRT——而不必在每個地方重寫模型。ONNX(Open Neural Network Exchange,開放神經網路交換格式)是一種標準檔案格式,捕捉模型的計算圖與權重,使其能在框架之間搬移;ONNX Runtime(ORT)則是能在眾多硬體後端上執行這些計算圖的快速引擎。兩者合起來就是模型部署的通用語。

一個 ONNX 模型是序列化的計算圖(以 protobuf 儲存),由標準化運算子建構——Conv、MatMul、Relu、Resize、Attention 等等——並以「運算集」(opset)標示版本,再加上以初始化張量(initializer)儲存的權重。你用 torch.onnx.export、tf2onnx 之類產生它。ONNX Runtime 接著施加圖最佳化(常數摺疊、運算子融合、佈局轉換),並把工作分派給可插拔的「執行提供者」(execution provider)——CPU、CUDA、TensorRT、DirectML、CoreML、NNAPI、OpenVINO——使同一個檔案能跨越差異極大的平台執行。

摩擦點在於運算子涵蓋率。自訂運算、動態控制流或冷門層可能無法乾淨匯出,或雖能匯出卻退回到緩慢的通用核心;動態輸入形狀與 opset 版本不符是常見的除錯麻煩。ONNX 也把量化運算子標準化(QDQ——quantize/dequantize——表示法),因此 int8 的 PTQ 模型同樣可移植。在多數生產堆疊中,ONNX 是通往 TensorRT、行動裝置執行環境或邊緣引擎之前那個中立的中介步驟。

能無錯誤匯出的模型,數值上仍可能是錯的。在信任匯出模型之前,務必以真實輸入驗證 ONNX 的輸出與來源框架相符(例如最大絕對差小於 1e-4)——運算子對應或形狀不符所導致的無聲錯誤很常見。

又稱
Open Neural Network ExchangeONNX RuntimeORT