Consulte vhlo_checklist.md
para ver as etapas a serem seguidas ao fazer
no VHLO.
O que é o dialeto VHLO?
O dialeto VHLO (Versioned StableHLO) é usado para serialização e estabilidade. Ele fornece um instantâneo do dialeto StableHLO em um determinado momento, controle de versões de elementos individuais do programa.
VHLO é um dialeto somente de adição com operações, tipos e atributos com controle de versão, o que significa que uma vez que um atributo é adicionado ao dialeto, ele não pode ser modificado de qualquer forma que afete a semântica.
Todas as alterações em uma operação, tipo ou atributo exigem a adição de uma nova versão ao
o dialeto. Por exemplo, se um my_op
hipotético foi adicionado a StableHLO em
0.9.0, mas foi alterado na versão 0.11.0, teríamos o seguinte em 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);
}
O dialeto StableHLO tem apenas a versão mais recente do ops. Na corrida
exemplo, o dialeto StableHLO na v0.11.0 teria apenas o StableHLO_MyOp
.
com operand
e attr
, enquanto o VHLO captura cada fase da operação
evolução.
Por que o VHLO é útil?
Ter um dialeto com controle de versão nos permite segmentar versões anteriores do Opset de StableHLO. Isso engloba compatibilidade com versões anteriores e anteriores conversões entre operações no dialeto VHLO.
Compatibilidade com versões futuras:a compatibilidade com versões futuras é fornecida pela conversão para VHLO e fazendo downgrade das operações para uma versão de destino. Se cada op/type/attr em um O programa VHLO pode ser rebaixado para a versão de destino, é garantido desserializável e conversível para StableHLO em um consumidor que executa uma versão maior ou igual à versão de destino, já que o VHLO tem um resumo da oposto naquele momento.
Essa conversão de downgrade falhará se operações ou recursos que não existirem na anterior da opset são usadas. Isso significa que a compatibilidade com versões é descoberto no produtor, e não no ambiente de execução.
Compatibilidade com versões anteriores:a compatibilidade com versões anteriores é fornecida pelo upgrade As operações de VHLO para a versão mais recente (se necessário) e, em seguida, a conversão de uma operação StableHLO. É possível fazer upgrade de todos os programas VHLO na janela de compatibilidade para StableHLO, o que significa que diferentes versões dos consumidores podem desserializar o mesmo Payload VHLO de uma versão anterior.
Mais importante, o VHLO é abstraído por trás da serialização. Isso significa que o ML (produtores) só precisam ter como alvo operações StableHLO, back-ends (consumidores) só precisam oferecer suporte à versão mais recente, que é a Op StableHLO definida. As conversões de e para VHLO são processadas com máquinas são mantidos no repositório StableHLO.
Versões de formato MLIR Bytecode
Para manter a compatibilidade com versões futuras, as versões do StableHLO têm uma versão associada do formato MLIR Bytecode Format. Além disso, a versão mais recente do O StableHLO vai usar a versão mais recente do formato MLIR Bytecode. Quando o A versão do MLIR Bytecode Format foi incrementada, e a próxima versão do StableHLO incremente a versão secundária e atualize Version.cpp para usar a versão mais recente do formato MLIR Bytecode.
Para detalhes sobre o formato MLIR Bytecode e a lógica para usá-lo no StableHLO, veja bytecode.md.