Kategorie:Kompilierungszeit: Host-Offload-Ausgabe stimmt nicht überein
Dieser Fehler tritt auf, wenn ein Tensor, der explizit in den Hostspeicher ausgelagert wurde, als Programmausgabe zurückgegeben wird, die Ausgabesignatur des Programms jedoch nicht für den Hostspeicher konfiguriert ist.
Beispiele für Fehlermeldungen:
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.
XLA-Back-Ends:TPU, GPU
Übersicht
Wenn der Compiler auf eine Annotation trifft, mit der ein Tensor auf den Host (CPU) ausgelagert werden soll, verfolgt er den Speicherort dieses Tensors im Berechnungsgraphen, bis eines von drei Ereignissen eintritt:
- Move to Device (Auf Gerät verschieben): Durch eine entsprechende Anmerkung wird der Tensor zurück zum Beschleuniger verschoben.
- Host-Berechnung:Der Tensor wird von einem Host-seitigen Vorgang verwendet.
- Programmende:Der Tensor erreicht das Ende des Programms und wird zu einer Ausgabe.
Dieser Fehler wird in Szenario #3 ausgelöst. Der Tensor befindet sich am Ende der Ausführung physisch im Hostspeicher, aber die Signatur der Einstiegsberechnung des XLA-Programms definiert diese bestimmte Ausgabe als im Gerätespeicher befindlich. Da der Compiler die Schnittstelle der Berechnung des Eintrags nicht implizit ändern kann, wird ein Fehler ausgegeben.
Debugging
Um diesen Fehler zu beheben, müssen Sie feststellen, ob dieser Tensor als Ausgabe auf dem Host vorgesehen war oder ob er vor der Rückgabe auf das Gerät zurückverschoben werden sollte.
Ausgabeabsicht und Ablaufpfad prüfen
Rückgabe auf dem Host vorgesehen:Wenn Sie möchten, dass dieser Tensor explizit im Hostspeicher zurückgegeben wird (um eine Rückübertragung auf das Gerät zu vermeiden), sollten Sie den Ausgabespeicherplatz der Eingabeberechnung für diese bestimmte Ausgabe explizit auf Host Memory festlegen.
Sollte auf dem Gerät zurückgegeben werden:Wenn der Tensor auf dem Gerät bleiben oder vor dem Ende des Programms dorthin zurückgegeben werden sollte, haben Sie wahrscheinlich eine Anmerkung übersehen. Fügen Sie eine passende Annotation ein, um den Tensor zurück auf das Gerät zu verschieben.
Wenn die Quelle des ausgelagerten Tensors unklar ist oder Sie nicht finden können, wo die Anmerkung „move to device“ fehlt, verwenden Sie die XLA-Protokollierung, um die Anweisungen nachzuvollziehen.
- Logging aktivieren:Wenn Sie Google Cloud TPU verwenden, führen Sie Ihr Programm mit dem folgenden Flag noch einmal aus:
--vmodule=host_offloader=1. - Logs analysieren:Suchen Sie in den Logs nach der Ausgabe „trace“. Hier wird der Pfad des Tensors ab der Offload-Anweisung angezeigt. Damit lässt sich genau feststellen, wo der Tensor die Programmgrenze erreicht, ohne dass er auf das Gerät zurückverschoben wird.