Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Aliasing in XLA

In diesem Dokument wird die Aliasing-API für XLA beschrieben: Beim Erstellen eines XLA-Programms können Sie das gewünschte Aliasing zwischen den Eingabe- und Ausgabepuffern angeben.

Definieren des Aliasing zur Kompilierungszeit

Stellen Sie sich zum Beispiel ein triviales HLO-Modul vor, das seiner Eingabe einfach 1 hinzufügt:

 HloModule increment

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

Dieses Modul weist zwei 4-Byte-Puffer zu: einen für den Eingang %p und einen für den Ausgang %out .

Es ist jedoch häufig wünschenswert, die Aktualisierung direkt durchzuführen (z. B. wenn im Frontend, das den Ausdruck generiert, die Eingabevariable nach der Berechnung nicht mehr aktiv ist, wie im Inkrement p++ ).

Um ein solches Update effizient durchzuführen, können Sie das Eingabe-Aliasing angeben:

 HloModule increment, input_output_alias={ {}: 0 }

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

Das Format gibt an, dass die gesamte Ausgabe (markiert mit {} ) auf den Eingabeparameter 0 .

XlaBuilder::SetUpAlias zum programmgesteuerten XlaBuilder::SetUpAlias des Aliasing finden Sie in der XlaBuilder::SetUpAlias API.

Aliasing zur Laufzeit definieren

Das im vorherigen Schritt definierte Aliasing wird während der Kompilierung angegeben . Während der Ausführung können Sie mithilfe der LocalClient::RunAsync API auswählen, ob der Puffer LocalClient::RunAsync .

Eingabepuffer für das Programm werden in ExecutionInput , die wiederum einen Baum von MaybeOwningDeviceMemory . Wenn der Speicher als besitzend angegeben wird (der Besitz des Puffers wird an die XLA-Laufzeit übergeben), wird der Puffer tatsächlich gespendet und das Update wird direkt ausgeführt, wie von der Aliasing-API zur Kompilierungszeit angefordert.

Wenn jedoch der zur Kompilierungszeit mit einem Alias ​​versehene Puffer zur Laufzeit nicht gespendet wird, wird der Kopierschutz aktiviert: Ein zusätzlicher Ausgabepuffer O wird zugewiesen, und der Inhalt des Eingabepuffers P der als Aliasing vorgesehen war, wird in O kopiert (So ​​effektiv kann das Programm ausgeführt werden, als ob der Puffer O zur Laufzeit gespendet worden wäre).

Frontend Interop

TF / XLA

In Clustern des TensorFlow-Programms, die mit XLA kompiliert wurden, werden alle Aktualisierungen der Ressourcenvariablen zur Kompilierungszeit aliasiert (das Aliasing zur Laufzeit hängt davon ab, ob irgendetwas anderes einen Verweis auf den Tensor der Ressourcenvariablen enthält).