Codice di errore: E1200

Categoria: Tempo di compilazione: mancata corrispondenza dell'output di offload dell'host

Questo errore si verifica quando un tensore scaricato esplicitamente nella memoria host viene restituito come output del programma, ma la firma dell'output del programma non è configurata per prevedere la memoria host.

Messaggi di errore di esempio:

INVALID_ARGUMENT: Tensor which is moved to host (starting from tuple.64) is returned from the entry computation but the layout for this output is not set to host memory.

Backend XLA: TPU, GPU

Panoramica

Quando il compilatore rileva un'annotazione per trasferire un tensore sull'host (CPU), ne monitora la posizione nel grafo di calcolo finché non si verifica uno dei tre eventi seguenti:

  1. Sposta su Dispositivo:un'annotazione corrispondente sposta il tensore di nuovo nell'acceleratore.
  2. Calcolo host:il tensore viene utilizzato da un'operazione lato host.
  3. Fine del programma: il tensore raggiunge la fine del programma e diventa un output.

Questo errore viene attivato nello scenario #3. Il tensore si trova fisicamente nella memoria host al termine dell'esecuzione, ma la firma del calcolo d'ingresso del programma XLA definisce che l'output specifico risiede nella memoria del dispositivo. Poiché il compilatore non può modificare implicitamente l'interfaccia del calcolo della voce, genera un errore.

Debug

Per risolvere questo errore, determina se questo tensore doveva essere un output sull'host o se doveva essere spostato di nuovo sul dispositivo prima di essere restituito.

  • Intended to return on Host: se vuoi esplicitamente che questo tensore venga restituito nella memoria host (evitando un trasferimento al dispositivo), devi impostare esplicitamente lo spazio di memoria di output del calcolo della voce su Memoria host per questo output specifico.

  • Intenzione di restituire il dispositivo:se il tensore doveva rimanere sul dispositivo o tornare su quest'ultimo prima della fine del programma, probabilmente hai perso un'annotazione. Inserisci un'annotazione corrispondente per spostare di nuovo il tensore sul dispositivo.

Se l'origine del tensore scaricato non è chiara o non riesci a trovare dove manca l'annotazione "Sposta sul dispositivo", utilizza la registrazione XLA per tracciare le istruzioni.

  • Abilita la registrazione:se utilizzi Google Cloud TPU, esegui di nuovo il programma con il seguente flag: --vmodule=host_offloader=1.
  • Analizza i log:cerca l'output "trace" nei log. Verrà visualizzato il percorso del tensore a partire dall'istruzione di offload. Utilizza questo valore per individuare esattamente dove il tensore raggiunge il limite del programma senza essere spostato di nuovo sul dispositivo.