torch.onnx¶
概觀¶
開放神經網路交換格式 (ONNX) 是一種用於表示機器學習模型的開放標準格式。torch.onnx 模組會從原生 PyTorch torch.nn.Module 模型擷取計算圖,並將其轉換為 ONNX 圖。
匯出的模型可以由任何 支援 ONNX 的執行階段 使用,包括 Microsoft 的 ONNX Runtime。
您可以使用 ONNX 匯出器 API 的兩種版本,如下所示
基於 TorchDynamo 的 ONNX 匯出器¶
基於 TorchDynamo 的 ONNX 匯出器是 PyTorch 2.1 和更新版本最新的(和 Beta 版)匯出器
TorchDynamo 引擎被用來鉤入 Python 的框架評估 API,並將其位元組碼動態重寫為 FX 圖。產生的 FX 圖會在最終轉譯為 ONNX 圖之前進行優化。
這種方法的主要優勢在於 FX 圖 是使用位元組碼分析擷取的,該分析保留了模型的動態特性,而不是使用傳統的靜態追蹤技術。
基於 TorchScript 的 ONNX 匯出器¶
基於 TorchScript 的 ONNX 匯出器自 PyTorch 1.2.0 起可用
TorchScript 被用來追蹤(透過 torch.jit.trace())模型並擷取靜態計算圖。
因此,產生的圖有幾個限制
- 它不會記錄任何控制流程,例如 if 語句或迴圈; 
- 不會處理 - 訓練和- 評估模式之間的細微差別;
- 不會真正處理動態輸入 
為了嘗試支援靜態追蹤限制,匯出器也支援 TorchScript 腳本(透過 torch.jit.script()),例如,它增加了對資料依賴控制流程的支援。但是,TorchScript 本身是 Python 語言的一個子集,因此並非所有 Python 功能都受到支援,例如就地操作。