Consulta vhlo_checklist.md
para ver los pasos que debes seguir cuando realices
cambios a VHLO.
¿Qué es el dialecto VHLO?
El dialecto VHLO (Versioned StableHLO) se usa para la serialización y la estabilidad. Proporciona una instantánea del dialecto StableHLO en un momento determinado. control de versiones de elementos individuales del programa.
VHLO es un dialecto de solo agregar con operaciones, tipos y atributos con control de versiones. lo que significa que una vez que se agrega un atributo al dialecto, no se puede modificar de ninguna manera que afecte la semántica.
Cualquier cambio en una operación, tipo o atributo requiere que se agregue una nueva versión a
el dialecto. Por ejemplo, si se agregó un my_op
hipotético a StableHLO en
0.9.0, pero se modificó en 0.11.0, tendríamos lo siguiente en 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);
}
El dialecto StableHLO solo tiene la última versión de las operaciones. En ejecución
Por ejemplo, el dialecto StableHLO en v0.11.0 solo tendría el StableHLO_MyOp
que tiene operand
y attr
, mientras que VHLO captura cada fase de la operación
de evolución.
¿Por qué es útil VHLO?
Tener un dialecto con control de versiones nos permite orientarnos a versiones anteriores del StableHLO. Esto encapsula la retrocompatibilidad en conversiones entre ops en el dialecto VHLO.
Compatibilidad con versiones posteriores: La compatibilidad con versiones posteriores se proporciona mediante la conversión a VHLO y pasar las operaciones a una versión inferior. Si cada op/type/attr en una el programa VHLO puede cambiarse a la versión objetivo, se garantiza que deserializable y convertible a StableHLO en un consumidor que ejecute una versión mayor o igual que la versión de destino, ya que el VHLO tiene una instantánea del de operaciones en ese momento.
Esta conversión a una versión inferior fallará si hay operaciones o funciones que no existen en el una versión anterior del conjunto de operaciones. Esto significa que la compatibilidad con versiones descubra en el productor, en lugar del entorno de ejecución.
Retrocompatibilidad: La actualización proporciona retrocompatibilidad. Las operaciones de VHLO a su versión más reciente (si es necesario) y, luego, convierten una operación en StableHLO. Se pueden actualizar todos los programas de VHLO que se encuentran en la ventana de compatibilidad a StableHLO, lo que significa que diferentes versiones de consumidores pueden deserializar la misma de una versión anterior.
Lo más importante es que el VHLO se abstrae detrás de la serialización. Esto significa que el AA los frameworks (productores) solo deben dirigirse a operaciones de StableHLO, y el compilador los backends (los consumidores) solo deben admitir la última versión, que es Conjunto de operaciones StableHLO. Las conversiones desde y hacia VHLO se cuidan con maquinaria. se mantienen en el repositorio StableHLO.
Versiones del formato de código de bytes de MLIR
Para mantener la compatibilidad con versiones futuras, las versiones de StableHLO tienen un versión asociada del formato de código de bytes MLIR. Además, la última versión de StableHLO usará la versión más reciente del formato de código de bytes MLIR. Cuando Aumenta la versión del formato de código de bytes de MLIR; la próxima versión de StableHLO Aumenta la versión secundaria y actualiza Version.cpp para usar la versión más reciente del formato de bytes de MLIR.
Para obtener detalles sobre el formato de código de bytes de MLIR y la razón para usarlo en StableHLO, consulta bytecode.md.