Code d'erreur : E3001

Catégorie : CompileTime : SparseCore No Viable Logical Replica Count

Cette erreur se produit lorsque le compilateur XLA:SparseCore ne parvient pas à déterminer une configuration valide du nombre de répliques logiques permettant à la charge de travail de s'adapter à la mémoire scratchpad locale (Tilespmem) de SparseCore.

Exemples de messages d'erreur :

XLA:TPU compile permanent error. Compilation failure: No viable logical replica count for the embedding table with metadata: max_nz_per_row = 141352, max_unique_nz_per_row = 8, feature_width = 8, sample_count = 204800 (last tried split factor for vector splitting = 1, last tried split factor for sample dimension splitting = 1, fixed_size_allocation_bytes = 410880, row_dependent_size_allocation_bytes = 1696224, total_spmem_size_bytes = 524288) ...

Backends XLA : TPU

Présentation

Cette erreur est spécifique aux cas d'utilisation de SparseCore, en particulier pour les grands modèles d'embedding (LEM).

Le nombre de répliques logiques est un paramètre de compilation interne qui détermine la manière dont les lots d'entrée sont partitionnés pour gérer la pression d'allocation du bloc-notes. Le compilateur tente de diviser la charge de travail en blocs plus petits (répliques) afin que les tampons intermédiaires requis pour chaque bloc tiennent dans la mémoire scratchpad limitée de SparseCore. En règle générale, un nombre de répliques logiques plus élevé réduit la pression d'allocation en traitant des lots de données plus petits à la fois.

Cette erreur indique que même après avoir essayé différentes configurations de fractionnement, le compilateur n'a pas pu trouver de configuration dans laquelle les tampons requis tiennent dans la mémoire Tilespmem. La taille de l'allocation est déterminée par une combinaison des éléments suivants :

  • sample_count : nombre d'ID de recherche d'embedding attribués à chaque SparseCore (dérivé de la taille du lot).
  • feature_width : taille de la dimension d'embedding.
  • max_nz_per_row : nombre maximal d'ID de recherche d'embedding non uniques dans tous les SparseCores.
  • max_unique_nz_per_row : nombre maximal d'ID de recherche d'embedding uniques.

Débogage

Pour résoudre cette erreur, vous devez réduire la pression sur la mémoire du bloc-notes SparseCore.

1. Améliorer les estimations des métadonnées

Le compilateur alloue de la mémoire en fonction de max_nz_per_row et max_unique_nz_per_row. Si ces valeurs sont estimées de manière conservatrice (c'est-à-dire définies beaucoup plus haut que ce que les données réelles nécessitent), le compilateur réserve un espace inutile, ce qui provoque cette erreur. Assurez-vous que ces paramètres reflètent précisément la distribution réelle des ID de votre ensemble de données.

Vous pouvez envisager d'appliquer l'optimisation dirigée par les commentaires (FDO) pour déterminer les valeurs optimales de ces paramètres.

2. Réduire la taille du lot

La valeur sample_count est directement dérivée de la taille de votre lot global. La réduction de la taille du lot diminue la quantité de données que chaque SparseCore doit traiter par étape, ce qui réduit la taille des tampons de bloc-notes requis.