ONNX 版本轉換器

ONNX 提供一個程式庫,用於在不同的 opset 版本之間轉換 ONNX 模型。主要動機是改善 ONNX 模型的回溯相容性,而無需加強 ONNX 後端的規格。這讓後端開發人員可以提供對特定 opset 版本的支援,並且讓使用者可以編寫或匯出到特定 opset 版本的模型,但在具有不同 opset 版本的環境中執行。在實作方面,此程式庫利用了記憶體中的表示法,其操作比原始的 protobuf 結構更方便,以及針對 ONNX 優化器開發的與 protobuf 格式之間的轉換器。

您可能對調用提供的特定運算元調整器,或實作新的調整器(或兩者)感興趣。預設調整器僅在預設網域中運作,但可以將其推廣為跨網域運作,或利用新的轉換方法,這取決於相關重大變更的性質。

調用版本轉換器

版本轉換器可以透過 C++ 或 Python 調用。

Python API 的說明,並附帶範例,請參閱這裡

C++ API 包含一個單一函式

ModelProto ConvertVersion(
    const ModelProto& mp_in,
    const OpSetID& initial_version,
    const OpSetID& target_version);

其接受輸入 ModelProto、模型的初始 opset 版本,以及目標 opset 版本,並傳回一個新的 ModelProto,其為應用初始版本和目標版本之間所有相關調整器的結果。如需可用通道的清單,請參閱convert.h

實作調整器

您可以透過子類別化 Adapter,並使用 VersionConverter::registerAdapter() 註冊您的新調整器來實作新的調整器。調整器對在 ir.h 中定義的記憶體圖形表示法進行操作。在 adapters 目錄中有很多範例。請確保所有調整器都是從 opset 版本 i 轉換到 i + 1 或 i - 1,亦即從版本 6 到版本 5 或反之,即使要轉換的兩個版本是版本 1 和版本 6 也一樣。

如果您的調整器適用於預設網域,請考慮將其新增到核心 ONNX 儲存庫