StableHLO 規格檢查清單

在本文件中,我們會總結審查規格變更的準則。目前,這些變更通常涉及檢查多個來源的多個項目,因此本文件將這些資訊總結起來,以簡化審查:

  1. 檢查 status.md 的「規格」欄顯示「yes」。如要新增運算,請新增資料列。
  2. 檢查區段標題是否與 ODS 中的運算印象 (ODS) 相符。
  3. 檢查「語意」部分是否與 XLA 的「Operation Semantics」(運算語意) 相符。
  4. 檢查「Inputs」和「Outputs」部分是否顯示:
    1. 列出與 ODS 相同的項目。
    2. 列出與 HloInstruction::CreateFromProto 相同的項目。
    3. 順序與 ODS 完全相同。
    4. 如果發現不相符的項目,請檢查是否有對應的票券。
  5. 檢查「限制」部分是否符合下列條件:
    1. 與 XLA 的 shape_inference.cc 相符。
    2. 與 XLA 的 hlo_verifier.cc 相符。
    3. 等同於 ODS。
    4. 符合 StablehloOps.cpp
    5. 如果發現不相符的項目,請檢查是否有對應的票券。請在規格中盡可能連結所有這些票券 (舉例來說,如果支援單與尚未實作的限制相關,請直接在該限制中連結票券)。
    6. 如果 ODS 和 StablehloOps.cpp 的對應部分符合規格,請檢查 status.md 中的「Verification」和「Type Inference」欄是否顯示「yes」。
  6. 檢查「示例」部分是否符合下列條件:
    1. 只有一個例子。(日後,我們會連結更多 StableHLO 翻譯工具測試套件中的範例)。
    2. 透過在程式碼範例中執行 stablehlo-opt,使用有效的 MLIR 語法。
    3. 使用可執行 stablehlo-opt -mlir-print-op-generic 取得的一般 MLIR 語法 (我們會確實使用規格中的通用語法,以避免需要變更美化版列印器變更的規格)。
  7. 檢查操作 ODS 中的 description
    1. 包含規格的第一個句子。
    2. 然後連結至規格的對應部分。
    3. 接著使用與規格相同的範例,但透過執行 stablehlo-opt 就能取得的精美語法。
  8. 檢查與導入驗證和類型推論限制相關的檔案是否符合下列規範:
    1. 遵循 StablehloOps.td#1 規範。
    2. 遵循 TypeInference.cppStablehloOps.cpp 的準則 #2
    3. 遵循 ops_stablehlo.mlir#5 規範。
    4. 遵循 infer_stablehlo.mlir 的準則 #6
  9. 評估對副作用和投射性。
    1. 如果運算沒有任何副作用,且一直都可推測,請提供 Pure 特徵。這種做法很罕見,因為大多數運算都允許使用動態形狀,這可能導致應用程式在執行階段發生形狀不相符的問題,這是未定義的行為。某些作業在其他情況下也可能有未定義的行為。絕大多數的操作都沒有副作用 (它們應有 NoMemoryEffect 特性)。
    2. 大多數作業都屬於 HLO_SpeculatableIf* 特徵之一。如果操作不符合上述任一條件,請提供 ConditionallySpeculatable 特徵並實作介面方法。新增測試至 stablehlo/tests/ops_speculatability.mlir,以涵蓋投機邏輯。