VHLO 언어

제작 시 따라야 하는 단계는 vhlo_checklist.md를 참고하세요. 변경할 수 있습니다

VHLO 언어란 무엇인가요?

VHLO (버전이 지정된 StableHLO) 방언은 직렬화 및 안정성을 위해 사용됩니다. 이 파일은 특정 시점의 StableHLO 언어를 버전 관리를 제공합니다

VHLO는 버전이 지정된 작업, 유형, 속성이 포함된 추가 전용 언어입니다. 즉, 지형지물이 방언에 추가되면 수정할 수 없습니다. 어떤 방식으로든 시맨틱스에 영향을 줄 수 있습니다.

작업, 유형 또는 속성을 변경할 때마다 새 버전을 추가해야 합니다. 있습니다. 예를 들어 가상의 my_op가 다음에서 StableHLO에 추가된 경우 0.9.0이지만 0.11.0에서 변경된 경우 VHLO에는 다음과 같습니다.

// This represents the StableHLO version of the op from 0.9.0 -> 0.10.0
// Both the lower and the upper bound of versions are inclusive
def VHLO_MyOpV1 : VHLO_Op<"my_op_v1", "0.9.0", "0.10.0"> {
  let arguments = (ins
    VHLO_AnyType:$operand
  );
  let results = (outs VHLO_AnyType:$result);
}

// This represents the StableHLO version of the op from 0.11.0 -> current
def VHLO_MyOpV2 : VHLO_Op<"my_op_v2", "0.11.0", "current"> {
  let arguments = (ins
    VHLO_AnyType:$operand,
    VHLO_AnyAttr:$attr  // New attribute added to StableHLO in 0.11.0
  );
  let results = (outs VHLO_AnyType:$result);
}

StableHLO 언어에는 최신 버전의 작업만 있습니다. 러닝 예를 들어 v0.11.0의 StableHLO 언어에는 StableHLO_MyOp만 있습니다. operandattr를 포함하며 VHLO는 작업의 각 단계를 캡처합니다. 있습니다.

VHLO가 유용한 이유는 무엇인가요?

방언이 버전 관리되면 이전 버전의 StableHLO opset입니다. 이를 통해 이후 버전과 하위 호환성을 서로 다른 작업 간 변환에 사용됩니다

향후 호환성: 이후 버전과의 호환성은 작업을 대상 버전으로 다운그레이드할 수 있습니다 만약 VHLO 프로그램은 대상 버전으로 다운그레이드될 수 있으며 특정 버전을 실행하는 소비자 환경에서 StableHLO로 변환 및 역직렬화 및 변환 가능 대상 버전보다 크거나 같아야 합니다. 적대적임을 알게 되었습니다.

이후 버전과의 호환성 이미지

이전 버전의 연산 세트가 사용됩니다. 즉, 이후 버전과의 호환성은 런타임이 아닌 생산자에서 검색됩니다

이전 버전과의 호환성: 업그레이드를 통해 이전 버전과의 호환성이 제공됩니다. VHLO 오퍼레이션을 최신 버전으로 변환한 다음 (필요한 경우), 오퍼레이션을 StableHLO입니다. 호환성 기간 내의 모든 VHLO 프로그램은 업그레이드할 수 있습니다. 즉, 여러 버전의 소비자가 동일한 콘텐츠를 역직렬화할 수 있음 이전 버전의 VHLO 페이로드입니다.

이전 버전과의 호환성 이미지

무엇보다도 VHLO는 직렬화를 통해 추상화됩니다. 즉, ML은 프레임워크 (생산자)는 StableHLO 작업만 타겟팅하면 되며 컴파일러는 백엔드 (소비자)는 최신 버전인 StableHLO 작업이 설정되었습니다. VHLO를 오가는 전환은 기계를 통해 처리됩니다. StableHLO 저장소에서 확인할 수 있습니다

MLIR 바이트 코드 형식 버전

이후 버전과의 호환성을 유지하기 위해 StableHLO 버전에는 관련 MLIR 바이트 코드 형식 버전입니다. 또한 최신 버전의 StableHLO는 최신 버전의 MLIR 바이트 코드 형식을 사용합니다. 이 MLIR 바이트 코드 형식 버전이 증가하면 StableHLO의 다음 릴리스에서 부 버전을 증분하고 Version.cpp를 업데이트합니다. 최신 MLIR 바이트 코드 형식 버전을 사용하세요.

MLIR 바이트 코드 형식과 StableHLO에서 이를 사용하는 이유에 대한 자세한 내용은 bytecode.md를 참조하세요.