Il dialetto VHLO

Consulta la sezione vhlo_checklist.md per la procedura da seguire quando crei a VHLO.

Che cos'è il dialetto VHLO?

Il dialetto VHLO (Versioned StableHLO) viene utilizzato per la serializzazione e la stabilità. Fornisce un'istantanea del dialetto StableHLO in un determinato momento i singoli elementi del programma.

VHLO è un dialetto di sola aggiunta con operazioni, tipi e attributi con controllo delle versioni, Ciò significa che una volta aggiunta un elemento al dialetto, non può essere modificato in alcun modo che influisca sulla semantica.

Qualsiasi modifica a un'operazione, un tipo o un attributo richiede l'aggiunta di una nuova versione il dialetto. Ad esempio, se è stato aggiunto un valore my_op ipotetico al test StableHLO in 0.9.0, ma è stato modificato in 0.11.0, in VHLO avremmo il seguente codice:

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

Il dialetto StableHLO ha solo la versione più recente delle operazioni. In corso Ad esempio, il dialetto StableHLO alla versione v0.11.0 avrebbe solo il valore StableHLO_MyOp con operand e attr, mentre VHLO acquisisce ogni fase del processo dell'IA.

Perché VHLO è utile?

Il dialetto per il controllo delle versioni ci consente di scegliere come target le versioni precedenti Componente aggiuntivo StableHLO. Questo incapsula la compatibilità avanti e indietro conversioni tra le operazioni nel dialetto VHLO.

Compatibilità con l'inoltro. La compatibilità con l'inoltro viene fornita convertendo a VHLO ed eseguire il downgrade delle operazioni a una versione di destinazione. Se ogni operazione/tipo/attributo in una È possibile eseguire il downgrade del programma VHLO alla versione di destinazione; è garantito che deserializzabile e convertibile in StableHLO su un consumer che esegue una versione maggiore o uguale alla versione di destinazione, poiché VHLO ha uno snapshot della in quel momento.

Immagine della compatibilità dell&#39;inoltro

Questa conversione del downgrade non riuscirà se operazioni o funzionalità non esistono nel dell'opset in uso. Ciò significa che la compatibilità con viene rilevata nel producer, anziché in fase di runtime.

Compatibilità con le versioni precedenti:la compatibilità con le versioni precedenti viene fornita eseguendo l'upgrade. Operazioni VHLO alla loro versione più recente (se necessario), quindi riconvertindo un'operazione in StableHLO. Tutti i programmi VHLO all'interno della finestra di compatibilità sono aggiornabili a StableHLO, il che significa che versioni diverse dei consumatori possono deserializzare lo stesso Payload VHLO da una versione precedente.

Immagine per la compatibilità con le versioni precedenti

Ma soprattutto, VHLO è basato sulla serializzazione. Ciò significa che l'ML (producer) devono scegliere come target solo le operazioni StableHLO e il compilatore i backend (consumer) devono supportare solo la versione più recente, ovvero Set operativo StableHLO. Le conversioni da e verso VHLO vengono gestite tramite macchinari nel repository StableHLO.

Versioni formato bytecode MLIR

Per mantenere la compatibilità con le versioni future, le versioni StableHLO hanno un la versione del bytecode MLIR associata. Inoltre, l'ultima versione StableHLO utilizzerà la versione più recente del formato bytecode MLIR. Quando la versione del formato bytecode MLIR viene incrementata, la prossima release di StableHLO incrementa la versione secondaria e aggiorna Version.cpp la versione più recente del formato bytecode MLIR.

Per maggiori dettagli sul formato bytecode MLIR e sulla motivazione per il suo utilizzo in StableHLO, vedi bytecode.md.