StableHLO 翻譯工具檢查清單

在本文件中,我們將概述為轉譯器實作及審查運算元的規範。我們有意納入一些與驗證器和類型推論相關的輔助動作項目,目的是希望在實作解譯器時,能同時在這些方面取得進展。

實作 op 時

  1. 請提供明確書寫的測試策略 (在 PR 說明中),類似於這個,以便在審查驗證和類型推論方法以及對應的測試時做為參考。審查人員會再次確認說明是否完整
  2. 請參閱 hlo_evaluator,找出難以實作的詳細資料和潛在的功能差距。
  3. 如果您發現任何錯誤或缺少功能,可提交對應軟體元件的票證。

實作作業後

  1. StablehloOps.td 中:

    1. 請確認運算 ODS 中的 summary 符合標準格式。(相關票券)
    2. 針對 XyzOp 作業,以 xyz_cnxyz_in 格式,從規格中新增參照限制標籤 (例如 CnIn) 的註解,以便識別 ODS 中的限制與規格之間的對應關係。以下範例說明如何將限制標籤做為註解新增至 mlir TraitsTypeConstraints 中。請注意,xyz_c4 是指 StableHLO_FooOp 類別中定義的限制條件 (例如 StableHLO_ShapedInterfaceOpStableHLO_UnaryElementwiseOpStableHLO_Op 等)。

       def StableHLO_XyzOp: StableHLO_FooOp<"xyz", [Trait1,
           Trait2 /*xyz_c1, xyz_c2*/, InferTensorType /*xyz_c3*/]> { /*xyz_c4*/
            ...
         let summary = "Xyz operation";
         let arguments = (ins
            1DTensorOf<[HLO_Float]>:$a, /*xyz_c5, xyz_i1*/
            HLO_Tensor:$b, /*xyz_i2*/
            ....
         );
      );
      
  2. TypeInference.cppStablehloOps.cpp 中:

    1. 刪除含有「驗證下列屬性:...」等字詞的註解。
    2. 依照 xyz_cnxyz_in 格式,新增參照規格限制標籤 (例如 CnIn) 的註解 (適用於運算 XyzOp),以識別驗證器和形狀函式的哪些部分與規格中的限制對應。
      1. 一個註解可以有多個限制標籤,或是具有相同限制標籤的多個註解。這全都取決於限制的導入方式。如果有連續的限制條件,請將這些條件濃縮為 xyz_cn...xyz_cm, xyz_in...xyz_jn
      2. 如果實作 VS 中的限制條件與規格中的限制條件不一致,請務必提出待解決的問題,反映這項差異。
  3. 轉譯器測試中:

    1. 新增名為 <op_mnemonic>.mlir 的檔案。
    2. 按照測試指南編寫測試。
  4. testdata 目錄中:

    1. 執行新加入的作業涵蓋的所有停用測試。
    2. 如果測試通過,請將 RUN-DISABLED 轉換為 RUN 來啟用測試。
    3. 如果測試因為精確度不符以外的原因而失敗,請修正實作/測試。
    4. 如果精確度不符,請為測試加上 RUN-DISABLED(#1278) 標記 (如果尚未標記)。
  5. ops_stablehlo.mlir 中:

    1. 請確認驗證器和類型推論方法中的每個限制,至少都有一個測試 (正面或負面);ODS 涵蓋的限制不會進行測試。這些測試大多會呈現負值,測試是否未符合限制條件,或是呈現正值,測試推斷出的形狀是否正確。
    2. 請確認與測試中 op 相關的所有測試都放在一起。
    3. 請確認與受測運算相關的所有測試,均在前面加上 CHECK-LABEL 照明巨集。
    4. 請使用 xyz_cn_im_... 格式選擇測試函式名稱,以便測試函式限制 CnIm 等,以便測試函式限制 CnIm 等,以便測試函式限制 XyzOp。如果提議的格式不適用,請保留現有名稱。
    5. 完成上述步驟後,請根據函式名稱依字母順序排序與測試中 op 相關的所有測試。
    6. 持續新增測試,直到 ccov 顯示 op 涵蓋率達到 90% 以上為止。
  6. infer_stablehlo.mlir 中:

    1. 確保這個檔案中包含與形狀推論測試相關的所有限制,並遵循前述相同的命名規範。
    2. 將任何形狀推論測試從 ops_stablehlo.mlir 檔案移至此檔案。
  7. spec.md 中:

    1. stablehlo/tests/interpret/<op_mnemonic>.mlir 的連結新增至「示例」部分 (例如「更多示例」)。
    2. 請確認規格僅包含 1 個範例。
    3. 請務必確保規格範例符合測試規範
    4. 請確認規格範例測試可解讀。
    5. 請確認規格範例與 ODS 中的規格範例相同。
  8. status.md 中:

    1. 將「翻譯器」欄更新為 yes