StableHLO の仕様チェックリスト

このドキュメントでは、仕様の変更を確認するためのガイドラインについて概説します。現時点では、これらの変更では通常、複数のソースの複数のチェックを行います。そのため、このドキュメントではレビューを簡素化するためにすべてを要約しています。

  1. status.md の [Specification] 列に「yes」と表示されていることを確認します。新しい演算を追加する場合は行を追加します。
  2. セクション タイトルが 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. 例は 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 にテストを追加して、投機性ロジックをカバーします。