StableHLO インタープリタのチェックリスト

このドキュメントでは、Terraform の実装と確認に関するガイドラインを 使用します。追加のアクションを意図的に追加しました ベリファイアと型推論に関連する項目を簡単に説明します。 大きな課題に直面しています

オペレーションの実装時は

  1. テスト戦略を明示的に記述する(PR の説明に記載) this を使用 検証と型推論を確認するときに参考にできます。 メソッド、対応するテストが含まれています。審査担当者は、 説明が網羅されています。
  2. コンサルト hlo_evaluator を使用して、難しい実装の詳細や潜在的な機能のギャップを特定します。
  3. バグが見つかった場合は、対応するソフトウェア コンポーネントのチケットを提出します。 不足している可能性もあります

オペレーションの実装後

  1. StablehloOps.td で以下を行います。

    1. 演算の ODS の summary が標準形式に従っていることを確認します。 (関連するチケット
    2. 制約ラベル(CnIn など)を参照するコメントを xyz_cn または xyz_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.cpp では、 および StablehloOps.cpp:

    1. 「次のプロパティを確認してください: ...」
    2. 制約ラベル(CnIn など)を参照するコメントを xyz_cn または xyz_in 形式の仕様(演算 XyzOp の場合) 対応するのはベリファイアとシェイプ関数のどの部分か 仕様の制約。
      1. コメントに複数の制約ラベルを付けたり、コメントを 同じ制約ラベルを持つ複数のコメントがある場合です。すべては 制約の実装方法を指定します。連続する制約がある場合 xyz_cn...xyz_cm, xyz_in...xyz_jn として圧縮します。
      2. モジュール内で制約が一致しない場合、 実装と仕様の違いについては、必ず 未解決の問題だと考えることができます。
  3. インタープリタ テストでは次のようになります。

    1. <op_mnemonic>.mlir という名前のファイルを追加します。
    2. テスト ガイドラインに沿ってテストを作成します。
  4. testdata ディレクトリで次の操作を行います。

    1. 新しく追加されたオペレーションの対象となる、無効なテストを実行します。
    2. テストに合格したら、RUN-DISABLEDRUN に変換して有効にします。
    3. 精度の不一致以外の理由でテストが失敗した場合は、 実装とテストについて説明します。
    4. 精度が一致しない場合は、テストに RUN-DISABLED(#1278) のタグを付けます( まだ完了していません)。
  5. ops_stablehlo.mlir の内容:

    1. それぞれに少なくとも 1 つのテスト(陽性または陰性)があることを確認する 検証ツールと型推論メソッドの制約制約 テストされません。ほとんどの場合陰性となり 制約が満たされていないか、制約がないことを検証するテスト、 正しいかを確認します。
    2. テスト対象のオペレーションに関連するすべてのテストが配置されていることを確認する 説明します。
    3. テスト対象のオペレーションに関連するすべてのテストが、 CHECK-LABEL の点灯マクロが末尾に付加されます。
    4. 次の形式を使用してテストの関数名を選択します。 関数テストの制約 CnImxyz_cn_im_... (オペレーション XyzOp など)。提案されたフォーマットが 既存の名前をそのまま使用します。
    5. 上記のステップが完了したら、オペレーションに関連するすべてのテストを並べ替えます。 関数名に基づいてアルファベット順に表示されます。
    6. ccov までテストを追加 オペレーションのカバレッジが 90% 以上であることを示す
  6. infer_stablehlo.mlir で次のように記述します。

    1. 形状推論テストに関連するすべての制約が存在することを確認する 上記と同じ命名ガイドラインに従って記述してください。
    2. 任意の形状推論テストを ops_stablehlo.mlir から移動します。 このファイルに追加します。
  7. spec.md で次のように設定します。

    1. stablehlo/tests/interpret/<op_mnemonic>.mlir へのリンクを追加 「Example」セクションにセクション (例: その他の例)。
    2. 仕様に 1 つの例のみが含まれていることを確認します。
    3. 仕様の例がテスト ガイドラインに従っていることを確認します。
    4. 仕様のサンプルテストが解釈可能であることを確認してください。
    5. 仕様の例が ODS にあるものと同じであることを確認してください。
  8. status.md を次のように設定します。

    1. 「インタープリタ」の更新列を yes に変更します。