StableHLO 사양 체크리스트

이 문서에는 사양 변경사항을 검토하기 위한 가이드라인이 요약되어 있습니다. 현재 이러한 변경사항에는 일반적으로 여러 소스에서 여러 항목을 확인해야 하므로 이 문서에서는 검토를 간소화하기 위해 모든 항목을 요약합니다.

  1. status.md의 '사양' 열에 '예'가 표시되는지 확인하고 새 작업을 추가하는 경우 행을 추가합니다.
  2. 섹션 제목이 ODS에서 작업의 연상 기호와 일치하는지 확인합니다.
  3. '시맨틱' 섹션이 XLA의 작업 시맨틱스와 일치하는지 확인합니다.
  4. '입력' 및 '출력' 섹션이 다음 조건을 충족하는지 확인합니다.
    1. ODS와 동일한 항목을 나열합니다.
    2. HloDirection::CreateFromProto와 동일한 항목을 나열합니다.
    3. ODS와 동일하게 주문됩니다.
    4. 불일치가 있는 경우 해당 티켓이 있는지 확인합니다.
  5. 'Constraints' 섹션에서 다음 조건을 충족하는지 확인합니다.
    1. XLA의 shape_inference.cc와 일치합니다.
    2. XLA의 hlo_verifier.cc와 일치합니다.
    3. ODS와 일치합니다.
    4. StablehloOps.cpp와 일치합니다.
    5. 불일치가 있는 경우 해당 티켓이 있는지 확인합니다. 가능한 한 구체적인 위치에서 사양에 있는 모든 티켓을 연결합니다. 예를 들어 티켓이 구현되지 않은 제약 조건에 관한 경우 해당 제약조건에서 바로 티켓을 연결합니다.
    6. ODS 및 StablehloOps.cpp의 상응하는 부분이 사양과 일치하면 status.md의 'Verification' 및 'Type Inference' 열이 'yes'인지 확인합니다.
  6. '예시' 섹션에 다음 사항을 확인하세요.
    1. 예가 하나만 있습니다. (향후 StableHLO 인터프리터 테스트 모음의 더 많은 예시로 연결되는 링크를 제공할 예정입니다.)
    2. 코드 예시에서 stablehlo-opt를 실행하여 유효한 MLIR 문법을 사용합니다.
    3. stablehlo-opt -mlir-print-op-generic를 실행하여 얻을 수 있는 일반 MLIR 구문을 사용합니다. Prettyprinter 변경 시 사양을 변경할 필요가 없도록 사양의 일반 구문을 고수합니다.
  7. 작업의 ODS에서 description가 다음과 같은지 확인합니다.
    1. 사양의 첫 번째 문장이 포함됩니다.
    2. 그런 다음 사양의 해당 섹션으로 연결됩니다.
    3. 그런 다음 사양과 동일한 예를 사용하지만 stablehlo-opt를 실행하여 가져올 수 있는 Pretty 구문을 통해 사용합니다.
  8. 인증 및 유형 추론 제약조건 구현과 관련된 파일이 아래 언급된 가이드라인을 따르는지 확인합니다.
    1. StablehloOps.td 가이드라인 1을 따릅니다.
    2. TypeInference.cppStablehloOps.cpp의 경우 가이드라인 #2를 따릅니다.
    3. ops_stablehlo.mlir의 경우 가이드라인 #5를 따릅니다.
    4. infer_stablehlo.mlir의 경우 가이드라인 #6을 따릅니다.
  9. 부수 효과 및 추측 가능성에 대한 작업을 평가합니다.
    1. 작업에 부작용이 없고 항상 추측이 가능한 작업인 경우 Pure 트레잇을 제공합니다. 대부분의 작업에서 동적 셰이프를 허용하여 런타임에 셰이프 불일치가 발생하여 정의되지 않은 동작으로 이어질 수 있기 때문에 이는 드문 경우입니다. 일부 작업은 다른 상황에서도 정의되지 않은 동작을 가질 수 있습니다. 대부분의 작업에는 부작용이 없습니다 (NoMemoryEffect 특성이 있어야 함).
    2. 대부분의 작업은 HLO_SpeculatableIf* 특성 중 하나에 속합니다. 작업이 이러한 작업에 적합하지 않으면 ConditionallySpeculatable 트레잇을 제공하고 인터페이스 메서드를 구현합니다. 예측 가능성 로직을 다루는 테스트를 stablehlo/tests/ops_speculatability.mlir에 추가합니다.