Profiler votre modèle avec les outils Cloud TPU
Le profilage vous permet d'optimiser les performances d'entraînement de votre modèle sur des Cloud TPU. Vous allez utiliser TensorBoard et le plug-in Cloud TPU TensorBoard pour profiler votre modèle.
Pour en savoir plus sur l'utilisation de TensorBoard avec l'un des frameworks compatibles, consultez les documents suivants:
Conditions préalables au profilage d'un script d'entraînement
Avant d'utiliser les outils de profilage TPU, vous devez:
Démarrer une session d'entraînement de modèle
- Configurez un TPU v4-8 pour entraîner un modèle. La procédure de profilage décrite dans ce document utilise un modèle ResNet, mais vous pouvez en utiliser un autre à condition qu'il effectue l'entraînement sur un TPU v4.
Dans votre VM TPU, ajoutez une ligne pour démarrer le serveur du profileur dans le script d'entraînement.
Pour l'entraînement ResNET, le script d'entraînement est :
/usr/share/tpu/tensorflow/resnet50_keras/resnet50.py
.Insérez les lignes en surbrillance dans resnet50.py. En haut du fichier, ajoutez l'importation suivante:
import tensorflow.compat.v2 as tf2
Juste avant le début des scripts de boucle d'entraînement, ajoutez la ligne en surbrillance:
if name == 'main': tf.logging.set_verbosity(tf.logging.INFO) tf2.profiler.experimental.server.start(6000) app.run(main)
Le serveur de profileur TensorFlow démarre sur votre VM TPU lorsque vous exécutez le script.
Démarrer l'entraînement du modèle
Exécutez votre script d'entraînement et attendez que la sortie indiquant que votre modèle s'entraîne activement s'affiche. La sortie dépend de votre code et de votre modèle. Recherchez un résultat semblable à
Epoch 1/100
. Vous pouvez également accéder à la page Cloud TPU dans la console Google Cloud, sélectionner votre TPU et afficher le graphique d'utilisation du processeur. Bien que le graphique d'utilisation du processeur n'affiche pas l'utilisation du TPU, il indique que le TPU entraîne votre modèle.
Démarrer le profilage de l'entraînement du modèle
Pendant l'entraînement du modèle, ouvrez une fenêtre de terminal distincte ou Cloud Shell. Pour commencer à profiler l'entraînement du modèle, procédez comme suit :
Dans la nouvelle fenêtre ou interface système, connectez-vous à votre VM TPU avec transfert de port.
gcloud compute tpus tpu-vm ssh your-vm --zone=us-central2-b --ssh-flag="-4 -L 9001:localhost:9001"
Le transfert de port permet à votre navigateur local de communiquer avec le serveur TensorBoard exécuté sur votre VM TPU.
Installez la configuration requise de TensorFlow {: id="install-tensorboard"}.
TensorBoard est installé par défaut sur votre VM TPU. Vous pouvez également installer TensorFlow manuellement. Dans tous les cas, des dépendances supplémentaires peuvent être requises. Installez les dépendances suivantes sur votre VM TPU en exécutant la commande suivante:
pip3 install -r /usr/share/tpu/models/official/requirements.txt
Installez le plug-in Cloud TPU TensorBoard {: id="install-plugin"}.
À partir de la VM TPU, exécutez les commandes suivantes:
pip3 install --upgrade "cloud-tpu-profiler>=2.3.0" pip3 install tensorflow pip3 install tensorboard_plugin_profile
Démarrer le serveur TensorBoard
Exécutez TensorBoard et créez un répertoire de journaux (
logdir
) sur la VM TPU où TensorBoard peut écrire des données de profilage. Spécifiez le répertoire des journaux à l'aide de l'indicateur--logdir
. Exemple :mkdir log-directory TPU_LOAD_LIBRARY=0 tensorboard --logdir log-directory --port 9001
TensorBoard démarre un serveur Web et affiche son URL:
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all TensorBoard 2.3.0 at http://localhost:9001 (Press CTRL+C to quit)
Ouvrez un navigateur Web et accédez à l'URL affichée dans le résultat de TensorBoard. Sélectionnez Profil dans le menu déroulant en haut à droite de la page de TensorBoard. La liste des outils de profilage disponibles s'affiche dans le menu déroulant tools (outils) de la barre latérale gauche.
Capturer un profil sur les VM TPU
- Sélectionnez le bouton CAPTURE PROFILE (CAPTER LE PROFIL).
- Sélectionnez la case d'option Adresse IP.
- Saisissez HostNAME:6000 dans le champ
Profile Service URL
. - Sélectionnez le bouton CAPTURE (Capturer).
Afficher les données de profil avec TensorBoard
Une fois le profil capturé, TensorBoard affiche overview_page. La liste des outils de profilage que vous pouvez utiliser s'affiche dans le volet de gauche.
Profil
L'onglet Profil s'affiche une fois que vous avez collecté certaines données du modèle. Vous devrez peut-être cliquer sur le bouton d'actualisation sur la page TensorBoard. Une fois les données disponibles, cliquez sur l'onglet Profil pour afficher une sélection d'outils d'aide à l'analyse des performances. Vous pouvez utiliser l'un des outils suivants pour profiler votre modèle.
- Page de présentation
- Analyseur du pipeline d'entrée
- Profil d'opération XLA
- Lecteur de traces (navigateur Chrome uniquement)
- Lecteur de mémoire
Page de présentation du profil
La page de présentation (overview_page), disponible sur la page Profil, fournit une vue d'ensemble des performances de votre modèle pendant une exécution de capture. La page affiche une vue d'ensemble de tous vos TPU et une analyse globale du pipeline d'entrée. Une option permet de sélectionner des TPU individuels dans la liste déroulante Hôte.
La page affiche les données dans les panneaux suivants :
Performance summary (Résumé des performances)
- Utilisation de FLOPS : pourcentage d'utilisation des unités matricielles du TPU
Le top des opérations TensorFlow sur TPU affiche les opérations TensorFlow qui ont pris le plus de temps:
Chaque ligne affiche le temps propre d'une opération (sous forme de pourcentage de temps pris par toutes les opérations), le temps cumulé, la catégorie, le nom et le taux de FLOPS atteint.
Run Environment (Environnement d'exécution)
- Nombre d'hôtes utilisés
- Type de TPU utilisé
- Nombre de cœurs de TPU
Analyseur du pipeline d'entrée
L'analyseur du pipeline d'entrée fournit des insights sur les résultats de vos performances. L'outil vous indique immédiatement si votre programme est subordonné aux entrées, et peut vous aider à analyser l'appareil et l'hôte pour déboguer l'étape du pipeline qui crée des goulots d'étranglement.
Consultez les conseils en matière de performances du pipeline d'entrée pour obtenir des informations plus détaillées sur leur optimisation.
Pipeline d'entrée
Lorsqu'un programme TensorFlow lit les données d'un fichier, le processus de lecture est divisé en plusieurs étapes de traitement des données connectées en série. La sortie d'une étape correspond à l'entrée de l'étape suivante. Ce système de lecture se nomme pipeline d'entrée.
Pour lire des enregistrements à partir de fichiers, un pipeline type comprend les étapes suivantes :
- Lecture des fichiers
- Prétraitement des fichiers (facultatif)
- Transfert des fichiers de la machine hôte vers l'appareil
Un pipeline d'entrée inefficace peut considérablement ralentir votre application. Une application est considérée comme subordonnée aux entrées lorsqu'elle passe une part importante de son temps dans le pipeline d'entrée. Utilisez l'analyseur du pipeline d'entrée pour comprendre où le pipeline d'entrée est inefficace.
Tableau de bord du pipeline d'entrée
Pour ouvrir l'analyseur du pipeline d'entrée, sélectionnez Profil, puis input_pipeline_analyzer dans la liste déroulante Outils.
Le tableau de bord affiche les détails de l'analyse côté appareil et côté hôte.
Analyse côté appareil : affiche le détail des heures de pas des appareils.
- Statistiques du temps de pas de l'appareil
- % du temps de pas des appareils en attente des données d'entrée
Analyse côté hôte
Cette section présente les détails d'une analyse côté hôte divisée en plusieurs catégories:
- Mise en file d'attente des données à transférer sur l'appareil. Temps passé à placer des données dans une file d'attente d'alimentation avant de les transférer sur l'appareil.
- Prétraitement des données : temps consacré aux opérations de prétraitement, telles que la décompression d'images.
- Lecture des données de fichiers à l'avance : temps consacré à la lecture de fichiers, y compris la mise en cache, le préchargement et l'entrelacement.
- Lecture des données de fichiers à la demande : temps consacré à la lecture des données de fichiers sans mise en cache, préchargement et entrelacement.
- Autres lectures ou traitements des données : temps consacré aux autres opérations d'entrée n'utilisant pas
tf.data
.
Pour afficher les statistiques d'opérations d'entrée individuelles et leurs catégories ventilées par temps d'exécution, développez la section Show Input Op statistics
.
Une table de données source de ce type s'affiche :
Chaque entrée de la table contient les informations suivantes :
- Input Op (Opération d'entrée) : affiche le nom de l'opération d'entrée TensorFlow.
- Count indique le nombre total d'instances de l'opération exécutées pendant la période de profilage.
- Durée totale (en ms) Affiche la durée cumulée passée sur chacune des instances d'opération.
- Total Time % (Temps total (%)) : temps total passé sur une opération sous la forme d'une fraction du temps total consacré au traitement des entrées.
- Le temps total total (en ms) indique le temps cumulé sur toutes les instances de la fonction. Le temps propre mesure le temps passé dans le corps de la fonction, à l'exclusion du temps passé dans toutes les fonctions qu'il appelle.
Par exemple,
Iterator::PaddedBatch::Filter::ForeverRepeat::Map
est appelé parIterator::PaddedBatch::Filter
. Par conséquent, son temps propre total est exclu du temps propre total de ce dernier. - Pourcentage de temps réel total : affiche le temps réel total sous la forme d'une fraction du temps total consacré au traitement des entrées.
- Category indique la catégorie de traitement de l'opération d'entrée.
Profil d'opération
Le profil d'opération est un outil Cloud TPU qui affiche les statistiques de performances des opérations XLA exécutées au cours d'une période de profilage. Le profil de l'opération affiche les éléments suivants:
- Le degré d'utilisation de la ressource Cloud TPU par l'application, sous la forme d'un pourcentage du temps consacré aux opérations par catégorie et de l'utilisation des FLOPS TPU.
- Les opérations les plus longues (qui constituent des cibles potentielles d'optimisation).
- Des détails sur les opérations individuelles, y compris la forme, le remplissage et les expressions utilisant ces opérations.
Vous pouvez utiliser le profil d'opération pour identifier les cibles d'optimisation. Par exemple, vous pouvez utiliser le profil d'opération pour identifier les opérations XLA dont l'exécution prend le plus de temps et le nombre de FLOPS TPU qu'elles consomment.
Utiliser un profil d'opération
L'outil Profil d'opération contient les statistiques de performances des opérations XLA. Vous pouvez afficher les données de profil d'opération dans TensorBoard en cliquant sur l'onglet Profile (Profil) en haut de l'écran, puis en sélectionnant op_profile dans la liste déroulante Tools (Outils). Un écran semblable à celui-ci s'affiche:
- La section Présentation montre l'utilisation de Cloud TPU et fournit des suggestions d'optimisation.
- Le panneau de configuration contient des commandes qui vous permettent de définir le nombre d'opérations affichées dans la table, ainsi que les opérations affichées et leur tri.
- Table d'opérations : répertorie les principales catégories d'opérations TensorFlow associées aux opérations XLA. Ces opérations sont triées en fonction du pourcentage d'utilisation de Cloud TPU.
- Fiches d'informations sur l'opération : affichent les détails des opérations qui apparaissent lorsque vous pointez sur une opération dans le tableau. Ces détails incluent l'utilisation des FLOPS, l'expression dans laquelle l'opération est utilisée et la mise en page de l'opération (ajustement).
Table d'opérations XLA
Le tableau des opérations répertorie les catégories d'opérations XLA, du plus élevé au plus faible pourcentage d'utilisation de Cloud TPU. Le tableau indique le pourcentage de temps pris, le nom de la catégorie d'opération, le nom d'opération TensorFlow associé et le pourcentage d'utilisation de FLOPS pour la catégorie. Pour afficher (ou masquer) les 10 opérations XLA les plus longues d'une catégorie, cliquez sur le triangle situé à côté du nom de la catégorie dans le tableau.
- Temps affiche le pourcentage total de temps passé par toutes les opérations de cette catégorie. Vous pouvez cliquer pour développer l'entrée et voir la répartition du temps passé par opération.
- Top 10 : le bouton d'activation à côté d'un nom de catégorie affiche/masque les dix opérations les plus chronophages dans la catégorie. Si une entrée d'opération de fusion est affichée dans la liste des opérations, vous pouvez la développer pour afficher les opérations non fusionnées au niveau des éléments qu'elle contient.
- TensorFlow Op (Opération TensorFlow) indique le nom de l'opération TensorFlow associé à l'opération XLA.
- FLOPS indique l'utilisation des FLOPS. Celle-ci correspond au nombre mesuré de FLOPS, exprimé en pourcentage du pic de FLOPS Cloud TPU. Plus le pourcentage d'utilisation de FLOPS est élevé, plus les opérations sont rapides. Les cellules de cette colonne incluent un code couleur : vert en cas d'utilisation élevée des FLOPS (bonne) et rouge en cas de faible utilisation des FLOPS (mauvaise).
Cartes de détails de l'opération
Lorsque vous sélectionnez une entrée de table, une carte s'affiche avec des détails sur l'opération XLA ou la catégorie d'opération. Une carte type se présente comme suit :
- Les champs Nom et Catégorie indiquent le nom et la catégorie de l'opération XLA en surbrillance.
- Utilisation des FLOPS Affiche l'utilisation des FLOPS sous forme de pourcentage du total de FLOPS possible.
- Expression : affiche l'expression XLA contenant l'opération.
- Utilisation de la mémoire : affiche le pourcentage d'utilisation maximale de la mémoire par votre programme.
- Mise en page (opérations de convolution uniquement) Affiche la forme et la mise en page d'un Tensor, y compris une description de toute marge intérieure effectuée par le compilateur XLA.
Interpréter les résultats
Pour les opérations de convolution, une faible utilisation des FLOPS TPU peut être due à l'une des raisons suivantes, ou aux deux:
- Remplissage (les unités matricielles sont partiellement utilisées)
- l'opération de convolution est liée à la mémoire
Cette section interprète certaines métriques de performances d'un modèle utilisant peu les FLOPs. Dans cet exemple, la fusion de la sortie et la convolution ont dominé le temps d'exécution. De nombreuses opérations scalaires ou vectorielles ont eu une faible utilisation des FLOPs.
Une stratégie d'optimisation pour ce type de profil consiste à transformer les opérations vectorielles ou scalaires en opérations de convolution.
Dans l'exemple suivant, %convolution.399 affiche une utilisation des FLOPS et de la mémoire inférieure à celle de %convolution.340 dans l'exemple précédent.
Dans cet exemple, la taille de lot est définie sur 128, et la taille de caractéristiques est sur 8. Dans ce cas, seules 5% des unités matricielles sont utilisées efficacement. L'utilisation est calculée par ((batch_time * num_of_features) / padding_size ) / num_of_cores. Comparez les FLOPS de cet exemple à %convolution.340 dans l'exemple précédent, qui n'utilise pas de marge intérieure.
Lecteur de traces
Le lecteur de traces est un outil d'analyse des performances Cloud TPU disponible sur la page Profil. Comme il utilise le lecteur de profilage d'événements de trace Chrome, il ne fonctionne que dans le navigateur Chrome.
Le lecteur de traces affiche une chronologie indiquant :
- la durée des opérations exécutées par le modèle TensorFlow ;
- la partie du système (TPU ou machine hôte) qui a exécuté une opération. En règle générale, la machine hôte exécute les opérations d'alimentation, qui prétraitent les données d'entraînement et les transfèrent au TPU, tandis que ce dernier exécute l'entraînement réel du modèle.
Le lecteur de traces vous permet d'identifier les problèmes de performances dans votre modèle, puis de prendre des mesures pour les résoudre. Par exemple, de manière générale, vous pouvez déterminer si l'entraînement du modèle (flux d'alimentation ou modèle) prend le plus de temps. En affichant le détail, vous pouvez identifier les opérations TensorFlow dont l'exécution est la plus longue.
Le lecteur de traces est limité à un million d'événements pour chaque Cloud TPU. Si vous devez évaluer plus d'événements, utilisez plutôt le lecteur de traces en flux continu.
Interface du lecteur de traces
Pour ouvrir le lecteur de traces, accédez à TensorBoard, cliquez sur l'onglet Profile (Profil) en haut de l'écran, puis sélectionnez trace_viewer dans le menu déroulant Tools (Outils). Le lecteur affiche l'exécution la plus récente :
Cet écran contient les éléments principaux suivants (identifiés par des chiffres dans la capture d'écran précédente):
- La liste déroulante Exécutions contient toutes les exécutions pour lesquelles vous avez capturé des informations de trace. L'affichage par défaut est l'exécution la plus récente, mais vous pouvez ouvrir la liste déroulante pour sélectionner une autre exécution.
- Menu déroulant "Outils" : permet de sélectionner différents outils de profilage.
- La liste déroulante Hôte sélectionne un hôte contenant un ensemble Cloud TPU.
- Volet de chronologie Affiche les opérations que Cloud TPU et la machine hôte ont exécutées au fil du temps.
- Volet "Détails" Affiche des informations supplémentaires sur les opérations sélectionnées dans le volet de chronologie.
Examinez de plus près le volet de chronologie :
Ce volet contient les éléments suivants :
- Barre supérieure : contient différentes commandes auxiliaires.
- Axe du temps : affiche l'heure par rapport au début de la trace.
- Libellés de section et de piste Chaque section contient plusieurs pistes et comporte un triangle sur la gauche que vous pouvez cliquer pour développer et réduire la section. Il y a une section pour chaque élément de traitement du système.
- Sélecteur d'outils : contient différents outils permettant d'interagir avec le lecteur de traces.
- Événements : indique la durée d'exécution d'une opération ou la durée de méta-événements, tels que les étapes d'entraînement.
- Barre d'onglets verticale : cette barre n'a pas d'utilité pour Cloud TPU. La barre fait partie de l'outil de lecture de traces à usage général fourni par Chrome et utilisé pour diverses tâches d'analyse des performances.
Sections et pistes
Le lecteur de traces comporte les sections suivantes :
- Une section pour chaque nœud TPU, étiquetée avec le numéro de la puce TPU et du nœud TPU que celle-ci contient (par exemple, "Chip 2 : TPU Core 1" [Puce 2 : Cœur de TPU 1]). Chaque section de nœud TPU contient les pistes suivantes :
- Étape : affiche la durée des étapes d'entraînement exécutées sur le TPU.
- TensorFlow Ops (Opérations TensorFlow) : affiche les opérations TensorFlow exécutées sur le TPU.
- XLA Ops (Opérations XLA) affiche les opérations XLA exécutées sur le TPU. (Chaque opération est traduite en une ou plusieurs opérations XLA. Le compilateur XLA traduit les opérations XLA en code qui s'exécute sur le TPU.)
- Une section pour les threads s'exécutant sur le processeur hôte,avec l'étiquette Threads hôtes. La section contient une piste pour chaque thread du processeur. Remarque : Vous pouvez ignorer les informations affichées à côté des étiquettes de section.
Sélecteur d'outils de chronologie
Vous pouvez interagir avec la vue de chronologie à l'aide du sélecteur d'outils de chronologie inclus dans TensorBoard. Vous pouvez cliquer sur un outil de chronologie ou utiliser les raccourcis clavier suivants pour activer et mettre en surbrillance un outil. Pour déplacer le sélecteur d'outils de chronologie, cliquez dans la zone en pointillés en haut, puis faites-le glisser à l'emplacement souhaité.
Utilisez les outils de chronologie comme suit :
Outil de sélection Cliquez sur un événement pour le sélectionner ou faites glisser pour sélectionner plusieurs événements. Des informations supplémentaires sur les événements sélectionnés (nom, heure de début et durée) s'affichent dans le volet de détails. |
|
Outil de panorama Faites glisser pour effectuer un panoramique de la chronologie horizontalement et verticalement. |
|
Outil de zoom Faites glisser vers le haut pour effectuer un zoom avant ou vers le bas pour effectuer un zoom arrière le long de l'axe horizontal (temps). La position horizontale du curseur de la souris détermine le centre autour duquel le zoom est effectué. Remarque:Si l'outil de zoom reste actif après avoir relâché le bouton de la souris, cliquez sur la vue chronologique pour le désactiver. |
|
Outil de synchronisation Faites glisser horizontalement pour marquer un intervalle de temps. Sa longueur apparaît sur l'axe de temps. Pour ajuster l'intervalle, faites glisser ses extrémités. Pour l'effacer, cliquez n'importe où dans la vue de chronologie. Si vous sélectionnez un autre outil, l'intervalle reste marqué. |
Lecteur de mémoire
Le lecteur de mémoire vous permet de visualiser les pics d'utilisation de la mémoire et les tendances d'utilisation de la mémoire de votre programme.
L'interface utilisateur du lecteur de mémoire se présente comme suit:
- Menu déroulant Host (Hôte) : permet de sélectionner un hôte TPU et des modules HLO (High Level Accelerator) XLA à visualiser.
- Aperçu de la mémoire : affiche l'allocation et la taille maximales de la mémoire sans marge intérieure.
- Graphique de l'espace de travail : affiche l'utilisation maximale de la mémoire et un graphique des tendances d'utilisation de la mémoire de votre programme. Pointez sur un tampon dans l'un des graphiques de tampons pour afficher des informations supplémentaires dans la fiche d'allocation de tampon.
- Graphiques de tampons Deux graphiques affichant l'allocation de tampons à l'utilisation maximale de la mémoire. Pointez sur un tampon dans l'un des graphiques de tampons pour afficher des informations supplémentaires dans la fiche de détails du tampon.
- Fiche d'informations sur l'allocation de tampon : affiche les détails de l'allocation pour un tampon.
Panneau d'informations générales sur la mémoire
Le panneau d'informations générales sur la mémoire (en haut) affiche le nom du module et le pic d'allocation de mémoire défini lorsque la taille totale d'allocation du tampon atteint son maximum. La taille maximale d'allocation sans remplissage est également indiquée à titre de comparaison.
Graphique de l'espace de travail
Ce graphique affiche les pics d'utilisation de la mémoire et un graphique des tendances d'utilisation de la mémoire de votre programme. La ligne verticale indique l'utilisation maximale de la mémoire pour le programme. Ce graphique montre si votre programme peut s'adapter à l'espace mémoire global disponible.
Chaque point du graphique représente un "point de programme" du programme HLO de XLA. La ligne montre l'évolution de l'utilisation de la mémoire de votre programme au fil du temps.
Interaction avec les éléments des graphiques de tampons
Lorsque vous placez le curseur sur un tampon dans un graphique de tampon, une ligne horizontale indiquant la durée de vie du tampon apparaît dans le graphique de l'espace de travail.
L'épaisseur de la ligne horizontale indique l'amplitude relative de la taille de la mémoire tampon par rapport à l'allocation de mémoire maximale. La longueur de la ligne indique la durée de vie du tampon.
Graphiques de tampons
Deux graphiques montrent la répartition de l'utilisation de la mémoire au pic d'utilisation.
By Program Order (Par ordre de programme) : affiche les tampons de gauche à droite dans l'ordre dans lequel ils étaient actifs lors de l'exécution du programme.
Par taille : affiche les tampons actifs pendant l'exécution du programme par ordre décroissant de taille.
Carte de détails d'allocation de tampon
Lorsque vous placez le curseur sur un tampon affiché dans l'un des graphiques de tampons, une fiche détaillée sur l'allocation de tampon s'affiche. Une carte de détails type se présente comme suit :
- Nom : nom de l'opération XLA.
- Catégorie : catégorie de l'opération.
- Taille : taille de l'allocation du tampon (y compris la marge intérieure).
- Taille sans remplissage : taille de l'allocation de la mémoire tampon sans marge intérieure.
- Expansion : grandeur relative de la taille de la mémoire tampon avec marge intérieure par rapport à la taille sans remplissage.
- Mémoire supplémentaire : indique la quantité de mémoire supplémentaire utilisée pour la marge intérieure.
- Forme : décrit le rang, la taille et le type de données du tableau à N dimensions.
- TensorFlow op name (Nom de l'opération TensorFlow) : affiche le nom de l'opération TensorFlow associée à l'allocation de tampon.
- Allocation type (Type d'allocation) : indique la catégorie d'allocation du tampon : paramètre, sortie, thread local et temporaire (par exemple, allocation de tampon dans une fusion).
Mémoire insuffisante
Si vous exécutez un modèle et que vous obtenez une erreur de "mémoire insuffisante", suivez les consignes de ce document pour capturer un profil. Attendez que votre script entraîne votre modèle avant de démarrer le profileur. La sortie du profilage peut vous aider à comprendre la cause de l'erreur.