Outil de lecteur de mémoire

Vous pouvez utiliser le lecteur de mémoire pour visualiser l'utilisation de la mémoire pendant toute la durée de vie du programme. Vous pouvez examiner en détail le contenu de la mémoire au moment du pic d'utilisation de la mémoire, y compris pour déboguer les situations de mémoire saturée (OOM, Out Of Memory). Le lecteur de mémoire peut vous aider à voir l'utilisation globale de la mémoire et à savoir si le calcul est proche de manquer de mémoire.

Toutes les informations affichées dans le visualiseur de mémoire sont purement statiques, obtenues à partir du compilateur XLA. Les informations d'exécution dynamiques sont présentées dans l'outil de profil de mémoire.

Plates-formes compatibles

TPU: compatible

GPU: compatible

Composants du lecteur de mémoire

Le visionneuse de mémoire se compose de plusieurs composants clés:

  1. Des menus déroulants de contrôle utilisateur qui vous permettent de personnaliser les données que vous visualisez :
    • Types de mémoire: les types de mémoire compatibles dépendent de l'accélérateur. Pour les GPU, l'accent est mis sur la mémoire à haut débit (HBM), tandis que pour les TPU, vous pouvez également afficher l'utilisation des mémoires sur puce, y compris VMEM, SMEM, CMEM, Sync Flags (SFlag), Sparsecore et la mémoire hôte.
    • Modules: il s'agit des programmes XLA qui ont été exécutés. Un bon point de départ est souvent un module de niveau supérieur, intitulé "jit_train_step" ou "jit_generate", par exemple.
  2. La section "Vue d'ensemble textuelle" fournit des informations générales telles que l'allocation de mémoire maximale requise pour le programme, la répartition entre les arguments et les variables temporaires, etc. Des frais généraux sont imposés par le remplissage, qui est nécessaire en raison des restrictions sur les formes de tenseurs compatibles sur les accélérateurs. Si cette marge intérieure représente une grande partie de l'allocation totale, cela peut indiquer une opportunité d'optimisation.
  3. Le graphique linéaire "Taille d'allocation de mémoire par rapport à l'ordre du programme" représente l'utilisation de la mémoire par rapport aux points de programme (séquence HLO) tels que planifiés par le compilateur.
    • Notez que l'axe des x ne représente pas le temps.
    • Le graphique met en évidence le point du programme où l'utilisation maximale de la mémoire du module choisi est atteinte. Le profileur et les outils ne sont pas conscients de la co-résidence des modules sur une puce/une mémoire donnée. Lorsque chaque module est compilé, le compilateur annote le profil avec le point de départ "de référence" de la mémoire allouée totale (par les modules compilés avant celui-ci), puis compte à la hausse et à la baisse à partir de là à mesure que d'autres allocations et désallocations se produisent. Toutefois, les futures allocations par d'autres modules compilés avant l'exécution ne sont pas capturées. Gardez cela à l'esprit lorsque vous déboguez des situations d'erreur OOM.
  4. Les graphiques sur les tampons en bas de la page décomposent l'utilisation de la mémoire au moment du pic d'utilisation du programme (indiqué par la ligne verticale dans le graphique linéaire sur l'utilisation de la mémoire). Trois graphiques sont affichés, tous montrant l'ensemble des tampons alloués par le programme, mais triés de trois manières différentes:

    • Par ordre de programme: ordre dans lequel ils ont été créés pendant l'exécution du programme, les plus anciens étant affichés à gauche.
    • Par taille: les éléments ayant le plus d'impact sur le pic d'utilisation de la mémoire se trouvent à gauche.
    • Par le coût supplémentaire qu'ils imposent: les plus "inefficaces" d'un point de vue matériel apparaissent à gauche.

      Notez que les couleurs des tampons n'ont aucune signification particulière.

  5. Lorsque vous pointez sur un tampon dans l'un des trois graphiques, deux affichages supplémentaires s'affichent:

    • Superposition sur le graphique linéaire de l'utilisation de la mémoire dans une couleur correspondant à la fiche de tampon, indiquant la durée de vie de ce tampon. Il s'agit d'une barre horizontale dont les bords gauche et droit indiquent les points d'allocation et de désallocation, dans l'ordre du programme. La hauteur de la barre horizontale représente la taille relative de la mémoire tampon sélectionnée par rapport à l'allocation maximale.
    • Une fiche de détails de tampon distincte, généralement sur le côté gauche, avec des informations sur l'opération spécifique, le cas échéant. Une fiche type comprend les informations suivantes :
      • Nom: nom de l'opération XLA, que vous pouvez rechercher dans le lecteur de graphiques ou le lecteur de traces.
      • Taille: taille de l'allocation de tampon, avec et sans remplissage.
      • Forme: décrit le rang, la taille et le type de données du tableau à n dimensions.
      • Nom de l'opération du framework: affiche le nom de l'opération du framework associé à cette allocation.
      • Type d'allocation: catégorise les allocations de tampons en fonction des types suivants : "Paramètre", "Sortie", "Thread local" et "Temporaire" (par exemple, allocation de tampon dans une fusion).