StableHLO 解释器核对清单

在本文档中,我们总结了有关实现和查看解释器操作的准则。我们有意添加了一些与验证程序和类型推断相关的辅助操作项,并希望随着解释器实现在这方面不断取得进展。

实现操作时

  1. 提供与此处类似的明确书面测试策略(在 PR 说明中),以便在查看验证和类型推断方法以及相应测试时作为参考。审核人员会仔细检查说明是否全面。
  2. 请查阅 hlo_evaluator,以确定棘手的实现细节和潜在的功能缺口。
  3. 如果您发现任何 bug 或缺少功能,请提交相应软件组件的工单。

实现相应操作后

  1. StablehloOps.td 中:

    1. 请确保操作的 ODS 中的 summary 遵循标准格式。(相关 ticket
    2. 对于操作 XyzOp,请以 xyz_cnxyz_in 格式添加引用规范中的限制条件标签(例如 CnIn)的注释,以标识 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. 对于操作 XyzOp,请以 xyz_cnxyz_in 格式添加引用规范标签(例如 CnIn)的注释,以确定验证程序和形状函数的哪些部分对应于规范中的哪些限制条件。
      1. 可以具有一条具有多个限制条件标签的注释,也可以有多条带同一限制条件标签的注释。这完全取决于限制条件的实现方式。如果有连续的约束条件,请将其压缩为 xyz_cn...xyz_cm, xyz_in...xyz_jn
      2. 如果实现与规范中的限制条件不一致,请确保存在反映该差异的待解决问题。
  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. 对于操作 XyzOp 的函数测试约束条件 CnIm 等,使用 xyz_cn_im_... 格式选择测试的函数名称。如果推荐的格式不适用,请保留现有名称。
    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. 将“Explainer”列更新为 yes