Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Aliasing en XLA

Este documento describe la API de aliasing para XLA: al crear un programa XLA, puede especificar el aliasing deseado entre los búferes de entrada y salida.

Definición de alias en tiempo de compilación

Por ejemplo, considere un módulo HLO trivial que simplemente agrega 1 a su entrada:

HloModule increment

ENTRY entry {
  %p = f32[] parameter(0)
  %c = f32[] constant(1)
  ROOT %out = f32[] add(%p, %c)
}

Este módulo asignará dos búferes de 4 bytes: uno para la entrada %p otro para la salida %out .

Sin embargo, a menudo es deseable realizar la actualización en el lugar (por ejemplo, si en la interfaz que genera la expresión, la variable de entrada ya no está viva después del cálculo, como en el incremento p++ ).

Para realizar una actualización de este tipo de manera eficiente, puede especificar el alias de entrada:

HloModule increment, input_output_alias={ {}: 0 }

ENTRY entry {
  %p = f32[] parameter(0)
  %c = f32[] constant(1)
  ROOT %out = f32[] add(%p, %c)
}

El formato especifica que toda la salida (marcada con {} ) tiene como alias el parámetro de entrada 0 .

Consulte la API XlaBuilder::SetUpAlias para especificar el alias mediante programación.

Definición de alias en tiempo de ejecución

El alias definido en el paso anterior se especifica durante la compilación . Durante la ejecución, puede elegir si donar el búfer utilizando la API LocalClient::RunAsync .

Los búferes de entrada al programa están empaquetados en ExecutionInput , que a su vez contiene un árbol de MaybeOwningDeviceMemory . Si la memoria se especifica como propietaria (la propiedad del búfer se pasa al tiempo de ejecución de XLA), el búfer en realidad se dona y la actualización se ejecuta en el lugar, según lo solicite la API de alias en tiempo de compilación.

Sin embargo, si el búfer que tiene un alias en tiempo de compilación no se dona en tiempo de ejecución, se activa la protección contra copia : se asigna un búfer de salida adicional O , y el contenido del búfer de entrada P que estaba destinado a ser alias se copia en O (de manera que el programa puede ejecutarse efectivamente como si el búfer O fuera donado en tiempo de ejecución).

Interoperabilidad frontend

TF / XLA

En los clústeres del programa TensorFlow compilados con XLA, todas las actualizaciones de las variables de recursos tienen un alias en el tiempo de compilación (el alias en el tiempo de ejecución depende de si algo más tiene una referencia al tensor de la variable del recurso).