Kode error: E1200

Kategori: Waktu Kompilasi: Ketidakcocokan Output Host Offload

Error ini terjadi saat tensor yang secara eksplisit di-offload ke memori host ditampilkan sebagai output program, tetapi tanda tangan output program tidak dikonfigurasi untuk mengharapkan memori host.

Contoh Pesan Error:

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

Ringkasan

Saat compiler menemukan anotasi untuk memindahkan tensor ke host (CPU), compiler akan melacak lokasi tensor tersebut melalui grafik komputasi hingga salah satu dari tiga peristiwa berikut terjadi:

  1. Pindah ke Perangkat: Anotasi yang cocok memindahkan tensor kembali ke akselerator.
  2. Komputasi Host: Tensor digunakan oleh operasi sisi host.
  3. Akhir Program: Tensor mencapai akhir program dan menjadi output.

Error ini dipicu dalam skenario #3. Tensor secara fisik berada di memori host di akhir eksekusi, tetapi tanda tangan komputasi entri program XLA menentukan bahwa output tertentu tersebut berada di Memori Perangkat. Karena compiler tidak dapat mengubah antarmuka komputasi entri secara implisit, compiler akan memunculkan error.

Proses debug

Untuk mengatasi error ini, tentukan apakah Anda ingin tensor ini menjadi output di Host atau apakah tensor ini seharusnya dipindahkan kembali ke Perangkat sebelum dikembalikan.

  • Ditujukan untuk dikembalikan di Host: Jika Anda secara eksplisit ingin tensor ini dikembalikan dalam memori host (menghindari transfer kembali ke perangkat), Anda harus secara eksplisit menyetel ruang memori output komputasi entri ke Memori Host untuk output tertentu ini.

  • Dimaksudkan untuk ditampilkan di Perangkat: Jika tensor dimaksudkan untuk tetap berada di perangkat atau ditampilkan kembali ke perangkat sebelum program berakhir, kemungkinan Anda melewatkan anotasi. Masukkan anotasi yang cocok untuk memindahkan tensor kembali ke perangkat.

Jika sumber tensor yang di-offload tidak jelas, atau Anda tidak dapat menemukan tempat anotasi "pindahkan ke perangkat" tidak ada, gunakan logging XLA untuk melacak instruksi.

  • Aktifkan logging: Jika Anda menggunakan Google Cloud TPU, jalankan ulang program dengan flag berikut: --vmodule=host_offloader=1.
  • Menganalisis Log: Cari output "rekaman aktivitas" dalam log. Hal ini akan menampilkan jalur tensor yang dimulai dari petunjuk pelepasan. Gunakan ini untuk menentukan dengan tepat di mana tensor mencapai batas program tanpa dipindahkan kembali ke perangkat.