StableHLO 翻譯檢查清單

本文總結了實作及審查翻譯工具的指南。我們特意納入幾個與驗證器和類型推論相關的輔助操作項目,並考慮在轉譯器實作旁提升這些前端的進展。

執行運算時

  1. 提供類似於這項做法的明確寫入測試策略 (在 PR 說明中),做為參考,在查看驗證和類型推論方法時,以及對應的測試。審查人員會仔細檢查說明內容是否完整。
  2. 請參閱 hlo_evaluator,瞭解複雜的實作細節,以及潛在的功能缺口。
  3. 如果發現任何錯誤或缺少功能,請提交對應軟體元件的支援單。

執行運算之後

  1. StablehloOps.td 中:

    1. 確認運算的 ODS 中的 summary 符合標準格式。 (相關票券)
    2. 新增參照項目限制標籤 (例如 CnIn) 的註解,格式為 xyz_cnxyz_in,適用於運算 XyzOp,以識別 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. 新增參照規格標籤 (例如 CnIn) 的註解。若為運算 XyzOp,則以 xyz_cnxyz_in 格式新增註解,以識別驗證器和形狀函式的哪些部分與規格中的限制條件對應。
      1. 建立含有多個限制標籤的註解,或擁有多個設有相同限制標籤的註解。這一切取決於限制條件的實作方式。如果連續限制具有連續限制,請將其修飾為 xyz_cn...xyz_cm, xyz_in...xyz_jn
      2. 如果實作 VS 和規格的限制不相符,請確認有尚未解決的問題能夠反映該差異。
  3. 解譯器測試中:

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

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

    1. 確保驗證器和類型推論方法中每項限制至少都有一項測試 (陽性或陰性);系統不會測試在 ODS 涵蓋的限制。這些測試大多為負數,測試是否符合限制條件或陽性,測試推測的形狀是否正確。
    2. 請確保與受測試的運算相關的所有測試都已一起完成。
    3. 請確保所有與受測運算相關的測試都已在加上 CHECK-LABEL 光照巨集的前面加上。
    4. 請以 xyz_cn_im_... 格式選擇測試的函式名稱,以便執行函式測試限制 CnIm 等作業對運算 XyzOp 的限制。如果提議的格式不適用,請保留現有名稱。
    5. 上述步驟完成後,請根據函式名稱,按測試字母順序排序所有與運算相關的測試。
    6. 繼續新增測試,直到 ccov 顯示這類運算的涵蓋率超過 90% 為止。
  6. infer_stablehlo.mlir 中:

    1. 請確認這個檔案列出了所有與形狀推論測試相關的限制,並遵循上述的相同命名規範。
    2. ops_stablehlo.mlir 檔案任何形狀推論測試移至這個檔案。
  7. spec.md 中:

    1. 在「範例」部分新增 interpret_<op_mnemonic>.mlir 連結 (例如更多範例)。
    2. 確認規格中只有 1 個範例。
    3. 請確定規格範例符合測試指南
    4. 請確定規格範例測試可以解讀。
    5. 請確定規格範例與 ODS 中的範例相同。
  8. status.md 中:

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