Esta página foi traduzida pela API Cloud Translation.
Switch to English

Alias ​​no XLA

Este documento descreve a API de aliasing para XLA: ao criar um programa XLA, você pode especificar o aliasing desejado entre os buffers de entrada e saída.

Definindo alias no tempo de compilação

Por exemplo, considere um módulo HLO trivial que simplesmente adiciona 1 à sua entrada:

 HloModule increment

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

Este módulo alocará dois buffers de 4 bytes: um para a entrada %p e um para a saída %out .

No entanto, muitas vezes é desejável executar a atualização no local (por exemplo, se no frontend que gera a expressão a variável de entrada não estiver mais ativa após o cálculo, como no incremento p++ ).

Para executar essa atualização com eficiência, você pode especificar o 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)
}
 

O formato especifica que toda a saída (marcada com {} ) é aliasizada ao parâmetro de entrada 0 .

Consulte a API XlaBuilder::SetUpAlias para especificar o aliasing programaticamente.

Definindo alias no tempo de execução

O aliasing definido na etapa anterior é especificado durante a compilação . Durante a execução, você pode escolher se deseja doar o buffer usando a API LocalClient::RunAsync .

Buffers de entrada para o programa são agrupados em ExecutionInput , que por sua vez contém uma árvore de MaybeOwningDeviceMemory . Se a memória for especificada como proprietária (a propriedade do buffer é passada para o tempo de execução XLA), o buffer é realmente doado e a atualização é executada no local, conforme solicitado pela API de aliasing em tempo de compilação.

Se, no entanto, o buffer com alias no tempo de compilação não for doado em tempo de execução, a proteção contra cópia será ativada: um buffer de saída extra O será alocado e o conteúdo do buffer de entrada P que deveria ser alias será copiado em O (tão efetivamente o programa pode executar como se o buffer O fosse doado em tempo de execução).

Interoperabilidade de front-end

TF / XLA

Nos clusters do programa TensorFlow compilado com o XLA, todas as atualizações de variáveis ​​de recursos têm um alias no tempo de compilação (o alias no tempo de execução depende se algo mais mantém uma referência ao tensor da variável de recursos).