XLA でのエイリアス設定

このドキュメントでは、XLA エイリアス API について説明します。この API を使用すると、 XLA プログラムを作成する際には、入力バッファと出力バッファの間のエイリアス設定を使用します。

コンパイル時のエイリアス設定の定義

たとえば、単純に 1 を入力に追加する簡単な HLO モジュールについて考えてみましょう。

HloModule increment

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

このモジュールは、2 つの 4 バイトバッファを割り当てます。1 つは入力 %p 用、もう 1 つは入力 %p 用です。 (出力 %out)。

ただし、更新はインプレースで実行することをおすすめします(たとえば、 入力変数が存在せず、式を生成するフロントエンドで (p++ の増分で表したもの)。

このような更新を効率的に行うために、入力エイリアスを指定します。

HloModule increment, input_output_alias={ {}: 0 }

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

この形式は、出力全体({} でマーク)を 入力パラメータ 0

プログラムでエイリアスを指定する方法については、 XlaBuilder::SetUpAlias API

実行時のエイリアス設定の定義

前の手順で定義したエイリアスは、コンパイル時に指定します。 実行中、 LocalClient::RunAsync バッファを提供するかどうかを選択する API。

プログラムへの入力バッファは、 ExecutionInput 秒、 このツリーには MaybeOwningDeviceMemory のツリーが含まれます。メモリが owning として指定されている(バッファの所有権が XLA ランタイムに渡されます) バッファが実際に提供され、その時点で更新が コンパイル時エイリアス API のリクエスト。

ただし、コンパイル時にエイリアスが設定されたバッファが、 追加の出力バッファ O が割り当てられ、コピー保護が開始されます。 そして、エイリアスとなるはずの入力バッファ P の内容がコピーされます。 O に書き込まれます(これにより、Oバッファが 。