StableHLO 통역사 체크리스트

이 문서에서는 인터프리터의 연산을 구현하고 검토하기 위한 가이드라인을 요약합니다. 인터프리터 구현과 함께 이러한 영역에서 진전을 이루기 위해 검증자 및 유형 추론과 관련된 몇 가지 보조 작업 항목을 의도적으로 포함했습니다.

연산을 구현하는 동안

  1. 확인 및 유형 추론 메서드와 해당 테스트를 검토할 때 참조로 사용할 수 있도록 와 유사한 테스트 전략을 명시적으로 작성하여 PR 설명에 제공합니다. 검토자는 설명이 포괄적인지 다시 확인합니다.
  2. 까다로운 구현 세부정보와 잠재적인 기능 격차를 확인하려면 hlo_evaluator를 참고하세요.
  3. 버그나 누락된 기능을 발견하면 해당 소프트웨어 구성요소의 티켓을 제출합니다.

작업 구현 후

  1. StablehloOps.td에서:

    1. 작업의 ODS에 있는 summary가 표준 형식을 따르는지 확인합니다. (관련 티켓)
    2. ODS의 제약 조건과 사양 간의 대응 관계를 식별하기 위해 op XyzOp의 경우 사양의 제약 조건 라벨(예: Cn 또는 In)을 참조하는 주석을 xyz_cn 또는 xyz_in 형식으로 추가합니다. 다음 예는 제약 조건 라벨을 mlir TraitsTypeConstraints와 함께 주석으로 추가하는 방법을 보여줍니다. xyz_c4StableHLO_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*/
            ....
         );
      );
      
  2. TypeInference.cppStablehloOps.cpp에서:

    1. '다음 속성을 확인하세요.'와 같은 주석을 삭제합니다.
    2. op XyzOp의 경우 사양의 제약 조건 라벨(예: Cn 또는 In)을 참조하는 주석을 xyz_cn 또는 xyz_in 형식으로 추가하여 검증자와 도형 함수의 어떤 부분이 사양의 어떤 제약 조건에 해당하는지 식별합니다.
      1. 제약 조건 라벨이 여러 개 있는 주석이나 동일한 제약 조건 라벨이 있는 주석이 여러 개 있어도 됩니다. 이는 모두 제약 조건이 구현된 방식에 따라 달라집니다. 연속된 제약 조건이 있으면 xyz_cn...xyz_cm, xyz_in...xyz_jn로 압축합니다.
      2. 구현 VS의 제약조건과 사양의 제약조건이 일치하지 않는 경우 이러한 불일치를 반영하는 미해결 문제가 있는지 확인합니다.
  3. 해석기 테스트:

    1. <op_mnemonic>.mlir라는 파일을 추가합니다.
    2. 테스트 가이드라인에 따라 테스트를 작성합니다.
  4. testdata 디렉터리에서 다음을 실행합니다.

    1. 새로 추가된 작업이 적용되는 사용 중지된 테스트를 실행합니다.
    2. 테스트를 통과하면 RUN-DISABLEDRUN로 변환하여 테스트를 사용 설정합니다.
    3. 정밀도 불일치 이외의 이유로 테스트가 실패하면 구현/테스트를 수정합니다.
    4. 정밀도 불일치의 경우 테스트에 RUN-DISABLED(#1278) 태그를 지정합니다 (아직 실행되지 않은 경우).
  5. ops_stablehlo.mlir:

    1. 검사기 및 유형 추론 메서드에 각 제약 조건에 대해 테스트(양수 또는 음수)가 하나 이상 있는지 확인합니다. ODS에 포함된 제약 조건은 테스트되지 않습니다. 이러한 테스트는 대부분 부정적이어서 제약 조건이 충족되지 않거나 양성이 아닌지 테스트하고 추론된 모양이 올바른지 테스트합니다.
    2. 테스트 중인 작업과 관련된 모든 테스트가 함께 배치되었는지 확인합니다.
    3. 테스트 중인 작업과 관련된 모든 테스트 앞에 CHECK-LABEL lit 매크로가 추가되었는지 확인합니다.
    4. op XyzOp의 제약 조건 Cn, Im 등을 테스트하는 함수의 경우 xyz_cn_im_... 형식을 사용하여 테스트의 함수 이름을 선택합니다. 제안된 형식이 적용되지 않는 경우에는 기존 이름을 유지합니다.
    5. 위 단계가 완료되면 테스트 중인 연산자와 관련된 모든 테스트를 함수 이름을 기준으로 알파벳순으로 정렬합니다.
    6. ccov에서 작업의 90% 이상이 적용될 때까지 테스트를 계속 추가합니다.
  6. infer_stablehlo.mlir:

    1. 형태 추론 테스트와 관련된 모든 제약 조건이 위에 언급된 동일한 이름 지정 가이드라인에 따라 이 파일에 있는지 확인하세요.
    2. ops_stablehlo.mlir 파일에서 도형 추론 테스트를 이 파일로 이동합니다.
  7. spec.md에서:

    1. stablehlo/tests/interpret/<op_mnemonic>.mlir 링크를 '예시' 섹션에 추가합니다(예: 예시 더보기).
    2. 사양에 예시가 하나만 있는지 확인합니다.
    3. 사양 예시가 테스트 가이드라인을 따르는지 확인합니다.
    4. 사양 예시 테스트를 해석할 수 있는지 확인합니다.
    5. 사양 예시가 ODS에 있는 예시와 동일한지 확인합니다.
  8. status.md:

    1. '해석기' 열을 yes로 업데이트합니다.