Dialekt VHLO

Instrukcje tworzenia znajdziesz w vhlo_checklist.md. zmian w VHLO.

Co to jest dialekt VHLO?

Dialekt VHLO (Versioned StableHLO) jest używany do serializacji i stabilności. Udostępnia obraz dialektu StableHLO w danym momencie, obsługi wersji poszczególnych elementów programu.

VHLO to dialekt dostępny tylko do dodania z werscjonowanymi operacjami, typami i atrybutami. co oznacza, że po dodaniu obiektu do dialektu nie można go modyfikować. w żaden sposób, który wpływa na semantykę.

Wszelkie zmiany operacji, typu lub atrybutu wymagają dodania nowej wersji do danego dialektu. Jeśli na przykład hipotetyczna wartość my_op została dodana do StableHLO w 0.9.0, ale została zmieniona w wersji 0.11.0, w VHLO wyglądałby tak:

// 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);
}

Dialekt StableHLO obejmuje tylko najnowszą wersję operacji. W toku na przykład dialekt StableHLO w wersji 0.11.0 miałby tylko StableHLO_MyOp z operand i attr, podczas gdy VHLO przechwytuje każdą fazę ewolucji.

Do czego przydaje się VHLO?

Dzięki wersjonowanemu dialektowi możemy kierować reklamy na poprzednie wersje Opset StableHLO. Obejmuje to zgodność do przodu i do tyłu w konwersji między operacjami w dialekcie VHLO.

Zgodność wychodząca: zgodność jest zapewniana przez konwersję. na VHLO i przez zmianę wersji operacji na wersję docelową. Jeśli wszystkie operacje, typy i atrybuty w Program VHLO można zdegradować do wersji docelowej. jest poddawana deserializacji i konwertowana na format StableHLO na konsumenta z wersją co najmniej od wersji docelowej, ponieważ VHLO ma zrzut w tej chwili.

Przekaż obraz zgodności

Ta konwersja na niższą wersję zakończy się niepowodzeniem, jeśli operacje lub funkcje, których nie ma w używana jest poprzednia wersja opset. Oznacza to, że jest wykrywane u producenta, a nie w czasie działania.

Zgodność wsteczna: zgodność wsteczna jest zapewniana przez uaktualnienie. Operacje VHLO do najnowszej wersji (w razie potrzeby), a następnie konwertowanie operacji z powrotem na Stabilny HLO. Wszystkie programy VHLO w oknie zgodności można uaktualniać na StableHLO, co oznacza, że różne wersje konsumentów mogą deserializować ten sam Ładunek VHLO z poprzedniej wersji.

Obraz zgodności wstecznej

Co ważniejsze, VHLO jest ściśle blokowany przez serializację. Oznacza to, że systemy uczące się platformy (producenci) muszą być kierowane tylko na operacje StableHLO i kompilator backendy (klienci) muszą obsługiwać tylko najnowszą wersję, Ustawiono operacje StableHLO. Konwersje z i do VHLO są obsługiwane za pomocą sprzętu i przechowywane w repozytorium StableHLO.

Wersje formatu bajtowego kodu MLIR

Aby zachować zgodność ze standardami, wersje StableHLO mają wersji w formacie bajtowym MLIR. Ponadto najnowsza wersja StableHLO będzie używać najnowszej wersji formatu bajtowego kodu MLIR. Gdy Wersja formatu bajtowego kodu MLIR zostanie zwiększona, następna wersja StableHLO będzie zwiększ wersję podrzędną i zaktualizuj Version.cpp aby użyć najnowszej wersji formatu bajtowego kodu MLIR.

Szczegółowe informacje na temat formatu bajtowego kodu MLIR oraz uzasadnienia użycia go w modelu StableHLO Więcej informacji: bytecode.md.