Kod błędu: E1200

Kategoria: czas kompilowania: niezgodność danych wyjściowych odciążenia hosta

Ten błąd występuje, gdy tensor jawnie przeniesiony do pamięci hosta jest zwracany jako dane wyjściowe programu, ale sygnatura wyjściowa programu nie jest skonfigurowana tak, aby oczekiwać pamięci hosta.

Przykładowe komunikaty o błędach:

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.

Backendy XLA: TPU, GPU

Przegląd

Gdy kompilator napotka adnotację oznaczającą przeniesienie tensora na hosta (procesor), śledzi jego lokalizację w grafie obliczeniowym, dopóki nie nastąpi jedno z 3 zdarzeń:

  1. Przenieś na urządzenie: pasująca adnotacja przenosi tensor z powrotem na akcelerator.
  2. Obliczenia na hoście: tensor jest używany przez operację po stronie hosta.
  3. Koniec programu: tensor dociera do końca programu i staje się danymi wyjściowymi.

Ten błąd występuje w scenariuszu 3. Tensor znajduje się fizycznie w pamięci hosta po zakończeniu wykonywania, ale sygnatura obliczeń wejściowych programu XLA określa, że ten konkretny wynik znajduje się w pamięci urządzenia. Ponieważ kompilator nie może niejawnie zmienić interfejsu obliczeń wpisu, zgłasza błąd.

Debugowanie

Aby rozwiązać ten problem, sprawdź, czy tensor miał być danymi wyjściowymi na hoście, czy też przed zwróceniem powinien zostać przeniesiony z powrotem na urządzenie.

  • Przeznaczone do zwrócenia na hoście: jeśli chcesz, aby ten tensor był zwracany w pamięci hosta (aby uniknąć przesyłania go z powrotem na urządzenie), musisz jawnie ustawić przestrzeń pamięci wyjściowej obliczeń wejściowych na pamięć hosta dla tego konkretnego wyjścia.

  • Przeznaczone do zwrotu na urządzenie: jeśli tensor miał pozostać na urządzeniu lub wrócić na nie przed zakończeniem programu, prawdopodobnie brakuje adnotacji. Wstaw odpowiednią adnotację, aby przenieść tensor z powrotem na urządzenie.

Jeśli źródło przeniesionego tensora jest niejasne lub nie możesz znaleźć miejsca, w którym brakuje adnotacji „przenieś na urządzenie”, użyj logowania XLA, aby śledzić instrukcje.

  • Włącz logowanie: jeśli korzystasz z Cloud TPU od Google, uruchom ponownie program z tym flagą: --vmodule=host_offloader=1.
  • Analizuj logi: w logach poszukaj danych wyjściowych „trace”. Wyświetli to ścieżkę tensora, zaczynając od instrukcji przeniesienia. Użyj tej opcji, aby precyzyjnie określić, gdzie tensor osiąga granicę programu, nie wracając na urządzenie.