このドキュメントでは、インタープリタの op の実装と確認に関するガイドラインの概要を説明します。ベリファイアと型推論に関連するいくつかの補助アクション アイテムを意図的に含めました。インタプリタの実装とともに、これらを前進させるというアイデアがあります。
オペレーションの実装時
- これと同様のテスト戦略を(PR の記述で)明示的に記述し、検証と型推論の手法と対応するテストを検討する際の参考として使用できるようにします。審査担当者は、説明が包括的であることを再確認します。
- 難しい実装の詳細や潜在的な機能のギャップを特定するには、hlo_evaluator をご覧ください。
- バグや不足している機能が見つかった場合は、対応するソフトウェア コンポーネントのチケットを提出します。
演算の実装後
StablehloOps.td で次の操作を行います。
- 演算の ODS の
summary
が標準形式に従っていることを確認します。(関連チケット) オペレーション
XyzOp
で、仕様から制約ラベル(Cn
やIn
など)を参照するコメントをxyz_cn
またはxyz_in
の形式で追加し、ODS の制約と仕様の対応を特定します。次の例は、mlirTraits
とTypeConstraints
とともに、制約ラベルをコメントとして追加する方法を示しています。注:xyz_c4
は、StableHLO_FooOp
クラスで定義された制約(StableHLO_ShapedInterfaceOp
、StableHLO_UnaryElementwiseOp
、StableHLO_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*/ .... ); );
- 演算の ODS の
TypeInference.cpp と StablehloOps.cpp:
- 「次のプロパティを確認してください: ...」のようなコメントを削除します。
- 演算
XyzOp
用に、仕様から制約ラベル(Cn
やIn
など)を参照するコメントをxyz_cn
またはxyz_in
の形式で追加し、検証ツールとシェイプ関数のどの部分が仕様内のどの制約に対応しているかを確認します。- 1 つのコメントに複数の制約ラベルを付けたり、同じ制約ラベルを付けた複数のコメントにしたりしてもかまいません。いずれも制約の実装方法によって異なります。連続する制約がある場合は、
xyz_cn...xyz_cm, xyz_in...xyz_jn
として圧縮します。 - 実装と仕様の制約に不一致がある場合は、その不一致を反映する未解決の問題があることを確認してください。
- 1 つのコメントに複数の制約ラベルを付けたり、同じ制約ラベルを付けた複数のコメントにしたりしてもかまいません。いずれも制約の実装方法によって異なります。連続する制約がある場合は、
-
interpret_<op_mnemonic>.mlir
という名前のファイルを追加します。- テストのガイドラインに沿ってテストを作成します。
testdata ディレクトリで次の操作を行います。
- 新しく追加したオペレーションの対象となる、無効なテストを実行します。
- テストに合格したら、
RUN-DISABLED
をRUN
に変換して有効にします。 - 精度の不一致以外の理由でテストが失敗した場合は、実装/テストを修正します。
- 精度が一致しない場合は、テストに
RUN-DISABLED(#1278)
のタグを付けます(まだタグ付けしていない場合)。
-
- 検証ツールと型推論メソッドの制約ごとに、少なくとも 1 つのテスト(陽性または陰性)があることを確認してください。ODS でカバーされる制約はテストされません。これらのテストはほとんどがネガティブであり、制約が満たされていないかポジティブかをテストして、推測された形状が正しいかどうかをテストします。
- テスト対象の演算に関連するすべてのテストがまとめて配置されていることを確認します。
- テスト対象の演算に関連するすべてのテストの前に、
CHECK-LABEL
lit マクロを追加します。 - テストの関数名を選択します。テストの関数名には、演算
XyzOp
に関数テストの制約Cn
、Im
などにxyz_cn_im_...
という形式を使用します。提案された形式が当てはまらない場合は、既存の名前をそのまま使用します。 - 上記の手順が完了したら、テスト対象の演算に関連するすべてのテストを、関数名に基づいてアルファベット順に並べ替えます。
- ccov でオペレーションのカバレッジが 90% 以上になるまで、テストの追加を続けます。
infer_stablehlo.mlir の場合:
- 形状推論テストに関連するすべての制約が、前述の命名ガイドラインに従って、このファイルに含まれていることを確認します。
- シェイプ推論テストを ops_stablehlo.mlir ファイルからこのファイルに移動します。
spec.md 内:
- 「例」セクションに
interpret_<op_mnemonic>.mlir
へのリンクを追加します(例: その他の例)。 - 仕様に含まれる例は 1 つのみにしてください。
- 仕様の例がテストのガイドラインに従っていることを確認してください。
- 仕様のサンプルテストが解釈可能であることを確認する。
- 仕様の例が ODS で使用されているものと同じであることを確認してください。
- 「例」セクションに
status.md 内:
- [通訳] 列を
yes
に更新します。
- [通訳] 列を