Code d'erreur : E1200

Catégorie : Temps de compilation : non-concordance de la sortie du déchargement de l'hôte

Cette erreur se produit lorsqu'un Tensor explicitement déchargé dans la mémoire hôte est renvoyé en tant que sortie de programme, mais que la signature de sortie du programme n'est pas configurée pour s'attendre à la mémoire hôte.

Exemples de messages d'erreur :

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.

Backends XLA : TPU, GPU

Présentation

Lorsque le compilateur rencontre une annotation pour décharger un Tensor sur l'hôte (CPU), il suit l'emplacement de ce Tensor dans le graphe de calcul jusqu'à ce que l'un des trois événements suivants se produise :

  1. Move to Device : une annotation correspondante renvoie le Tensor à l'accélérateur.
  2. Calcul de l'hôte : le Tensor est utilisé par une opération côté hôte.
  3. Fin du programme : le Tensor atteint la fin du programme et devient une sortie.

Cette erreur se produit dans le scénario 3. Le Tensor est physiquement situé dans la mémoire hôte à la fin de l'exécution, mais la signature de calcul d'entrée du programme XLA définit cette sortie spécifique comme résidant dans la mémoire de l'appareil. Étant donné que le compilateur ne peut pas modifier implicitement l'interface du calcul d'entrée, il génère une erreur.

Débogage

Pour résoudre cette erreur, déterminez si ce Tensor était censé être une sortie sur l'hôte ou s'il aurait dû être renvoyé à l'appareil avant d'être renvoyé.

  • Retour prévu sur l'hôte : si vous souhaitez explicitement que ce Tensor soit renvoyé dans la mémoire de l'hôte (en évitant un transfert vers l'appareil), vous devez définir explicitement l'espace mémoire de sortie du calcul d'entrée sur Mémoire de l'hôte pour cette sortie spécifique.

  • Tensor destiné à revenir sur l'appareil : si le Tensor était censé rester sur l'appareil ou y revenir avant la fin du programme, vous avez probablement oublié une annotation. Insérez une annotation correspondante pour renvoyer le Tensor sur l'appareil.

Si la source du Tensor déchargé n'est pas claire ou si vous ne trouvez pas où l'annotation "move to device" (déplacer vers l'appareil) est manquante, utilisez la journalisation XLA pour suivre les instructions.

  • Activez la journalisation : si vous utilisez Google Cloud TPU, réexécutez votre programme avec l'indicateur suivant : --vmodule=host_offloader=1.
  • Analyser les journaux : recherchez la sortie "trace" dans les journaux. Le chemin d'accès du Tensor s'affiche à partir de l'instruction de déchargement. Utilisez cette option pour identifier précisément l'endroit où le Tensor atteint la limite du programme sans être renvoyé à l'appareil.