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 de nombre de répliques logiques valide qui permet à la charge de travail de s'adapter à la mémoire locale de bloc-notes de SparseCore (Tilespmem).
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 SparseCore, en particulier pour les grands modèles d'embedding (LEM).
Le nombre de répliques logiques est un paramètre de compilateur interne qui détermine comment 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 plus petits blocs (répliques) afin que les tampons intermédiaires requis pour chaque bloc s'adaptent à la mémoire de bloc-notes 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 tenté différentes configurations de division, le compilateur n'a pas pu trouver de configuration dans laquelle les tampons requis s'adaptent à 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 de l'embedding.max_nz_per_row: nombre maximal d'ID de recherche d'embedding non uniques sur 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 de la mémoire sur le 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 sur une valeur beaucoup plus élevée que celle requise par les données réelles), le compilateur réserve un espace inutile, ce qui provoque cette erreur. Assurez-vous que ces paramètres reflètent avec précision la distribution réelle des ID de votre ensemble de données.
Vous pouvez envisager d'appliquer l'optimisation basée sur les commentaires (FDO) pour déterminer les valeurs optimales de ces paramètres.
2. Réduire la taille du lot
sample_count est directement dérivé de la taille globale de votre lot. 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.