StableHLO 解释器核对清单

在本文档中,我们总结了为解释器实现和审核操作的准则。我们特意添加了一些与验证器和类型推理相关的辅助操作项,目的是在实现解释器的同时,在这两个方面取得进展。

实现操作时

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

实现操作后

  1. StablehloOps.td 中:

    1. 确保操作的 ODS 中的 summary 采用标准格式。 (相关
    2. 为操作 XyzOp 添加引用规范中约束条件标签(例如 CnIn)的注释,格式为 xyz_cnxyz_in,以确定 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 添加引用规范中约束条件标签(例如 CnIn)的注释,格式为 xyz_cnxyz_in,以确定验证器和形状函数的哪些部分与规范中的哪些约束条件相对应。
      1. 可以包含带有多个限制条件标签的注释,也可以包含具有相同限制条件标签的多条注释。这完全取决于约束条件的实现方式。如果存在连续约束,请将其压缩为 xyz_cn...xyz_cm, xyz_in...xyz_jn
      2. 如果实现中的限制条件与规范中的限制条件不一致,请确保存在可反映该差异的待解决问题。
  3. 解释器测试中:

    1. 添加一个名为 <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 lit 宏开头。
    4. 使用 xyz_cn_im_... 格式选择测试函数的函数名称,以便针对操作 XyzOp 测试约束条件 CnIm 等。如果建议的格式不适用,请保留现有名称。
    5. 完成上述步骤后,根据函数名称的字母顺序对与被测操作相关的所有测试进行排序。
    6. 继续添加测试,直到 ccov 显示操作的覆盖率大于等于 90%。
  6. infer_stablehlo.mlir 中:

    1. 确保此文件中包含与形状推理测试相关的所有约束条件,并遵循上述命名准则。
    2. ops_stablehlo.mlir 文件中的所有形状推理测试移至此文件中。
  7. spec.md 中:

    1. 在“示例”部分(例如更多示例)中添加指向 stablehlo/tests/interpret/<op_mnemonic>.mlir 的链接。
    2. 请确保规范中仅包含 1 个示例。
    3. 请确保规范示例符合测试准则
    4. 确保规范示例测试可解读。
    5. 请确保规范示例与 ODS 中的示例相同。
  8. status.md 中:

    1. 将“解释器”列更新为 yes