Lista de tareas del intérprete de StableHLO

En este documento, resumimos los lineamientos para implementar y revisar un op para el intérprete. Incluimos intencionalmente algunas acciones auxiliares elementos relacionados con el verificador y la inferencia de tipo, con la idea de progresar en esos aspectos junto con la implementación de intérpretes.

Durante la implementación de la op

  1. Proporcionar una estrategia de prueba escrita explícitamente (en una descripción de RR.PP.) similares a esto para usar como referencia mientras revisas la verificación y la inferencia de tipo métodos y las pruebas correspondientes. El revisor comprobará descripción completa.
  2. Consulta hlo_evaluator para identificar detalles de implementación engañosos y posibles brechas en la funcionalidad.
  3. Envía tickets para los componentes de software correspondientes si encuentras errores o funciones faltantes.

Después de implementar la op

  1. En StablehloOps.td:

    1. Asegúrate de que summary en el ODS de la operación siga el formato estándar. (entrada relacionada)
    2. Agrega comentarios que hagan referencia a etiquetas de restricciones (p.ej., Cn o In) de la en el formato xyz_cn o xyz_in, para la op XyzOp, con el objetivo de identificar y la correspondencia entre las restricciones de ODS y la especificación. El El siguiente ejemplo muestra cómo agregar las etiquetas de restricción como comentarios. junto con los archivos Traits y TypeConstraints. Nota que xyz_c4 hace referencia a definidas en la clase StableHLO_FooOp (p.ej., StableHLO_ShapedInterfaceOp, StableHLO_UnaryElementwiseOp StableHLO_Op, etcétera).

       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. En TypeInference.cpp y StablehloOps.cpp:

    1. Borra comentarios que digan cosas como “Verifica las siguientes propiedades: ...
    2. Agrega comentarios que hagan referencia a etiquetas de restricciones (p.ej., Cn o In) de la en el formato xyz_cn o xyz_in, para la op XyzOp, para identificar qué partes de los verificadores y las funciones de forma corresponden a cuáles restricciones en la especificación.
      1. Está bien tener un comentario con varias etiquetas de restricción o tener varios comentarios con la misma etiqueta de restricción. Todo depende de cómo se implementan las restricciones. Si hay restricciones consecutivas, condensarlos como xyz_cn...xyz_cm, xyz_in...xyz_jn.
      2. En caso de que haya una discrepancia entre las restricciones implementación y los de la especificación, asegúrate de que un problema abierto que refleje esa discrepancia.
  3. En las pruebas de intérprete:

    1. Agrega un archivo llamado <op_mnemonic>.mlir.
    2. Escribe pruebas de acuerdo con los lineamientos para realizar pruebas.
  4. En el directorio de datos de prueba:

    1. Ejecuta las pruebas inhabilitadas que estén cubiertas por la operación agregada recientemente.
    2. Si las pruebas son exitosas, habilítalas convirtiendo RUN-DISABLED en RUN.
    3. Si una prueba falla por algún motivo que no sean las faltas de coincidencia de precisión, corrige el error implementación y prueba.
    4. Para las discrepancias de precisión, etiqueta la prueba con RUN-DISABLED(#1278) (si aún no está hecho).
  5. En ops_stablehlo.mlir:

    1. Asegúrate de que haya al menos una prueba (positiva o negativa) para cada una Restricción en los métodos de inferencia de tipo y verificador; restricciones cubiertos en la ODS no se evaluarán. La mayoría de las pruebas serán negativas, prueba que las restricciones no se cumplen o son positivas, lo que prueba que la forma inferida es correcta.
    2. Asegúrate de realizar todas las pruebas relacionadas con la operación a prueba. entre sí.
    3. Asegúrate de que todas las pruebas relacionadas con la operación a prueba precedido por una macro iluminada CHECK-LABEL.
    4. Elige el nombre de la función de las pruebas con el siguiente formato: xyz_cn_im_... para las restricciones de prueba de funciones Cn, Im, etc. para la op XyzOp. En los casos en que el formato propuesto no cumpla apply, conserva el nombre existente.
    5. Cuando completes el paso anterior, ordena todas las pruebas relacionadas con la operación. se somete a prueba alfabéticamente según el nombre de la función.
    6. Seguir agregando pruebas hasta que aparezca ccov muestra una cobertura de más del 90% para la operación.
  6. En infer_stablehlo.mlir:

    1. Asegúrate de que estén presentes todas las restricciones relacionadas con las pruebas de inferencia de forma de este archivo, siguiendo las mismas pautas de nomenclatura mencionadas anteriormente.
    2. Mover las pruebas de inferencia de forma desde ops_stablehlo.mlir en este archivo.
  7. En spec.md:

    1. Agregar un vínculo a stablehlo/tests/interpret/<op_mnemonic>.mlir a la sección "Ejemplos" sección (p.ej., Más ejemplos).
    2. Asegúrate de que la especificación tenga solo 1 ejemplo.
    3. Asegúrate de que el ejemplo de especificaciones cumpla con los lineamientos de pruebas.
    4. Asegúrate de que la prueba de ejemplo de especificaciones se pueda interpretar.
    5. Asegúrate de que el ejemplo de la especificación sea el mismo que el de la ODS.
  8. En status.md:

    1. Cómo actualizar el "Intérprete" columna a yes.