Profilage des gestionnaires de fonctions définies par l’utilisateur de Snowpark Python¶
Vous pouvez découvrir combien de temps ou de mémoire a été consacré à l’exécution du code de votre gestionnaire en utilisant le profileur de code intégré. Le profilage génère des informations décrivant le temps ou la mémoire consacrés à l’exécution de chaque ligne du gestionnaire.
À l’aide du profileur, vous pouvez générer des rapports axés sur l’un des éléments suivants à la fois :
Quantité de temps par ligne, qui indique le nombre de fois qu’une ligne a été exécutée, la durée de l’exécution, etc.
Utilisation de la mémoire par ligne, qui indique la quantité de mémoire consommée par ligne.
Le profileur enregistre le rapport généré dans un tableau des événements interne. Vous pouvez récupérer les résultats en utilisant une fonction conçue pour accéder à la table.
Note
Le profilage introduit une surcharge de performance lors de l’exécution de Python et peut affecter les performances de la requête. Il est destiné au développement et aux tests et ne doit pas être activé sur des charges de travail de production continue.
Privilèges requis¶
Pour gérer et utiliser les données des résultats du profileur, qui sont stockées dans le tableau des événements SNOWFLAKE.LOCAL.PROFILER_EVENTS_RAW, vous devez utiliser les rôles suivants :
Rôle de l’application |
Remarques |
|---|---|
PROFILER_EVENTS_ADMIN |
Nécessaire pour gérer les données du tableau des événements dans lequel sont stockées les données du profileur, y compris pour sélectionner, tronquer ou détruire des enregistrements. |
PROFILER_USER |
Nécessaire pour lire les résultats du profileur à partir du tableau des événements. |
Pour plus d’informations sur l’attribution d’un rôle d’application, consultez GRANT APPLICATION ROLE. L’exemple suivant utilise le rôle ACCOUNTADMIN pour accorder le rôle d’application PROFILER_USER à un utilisateur.
Limitations¶
Il peut s’écouler 15 à 20 secondes après l’exécution de la requête pour que les résultats du profileur soient prêts.
La sortie du profileur n’est pas enregistrée si l’exécution de la UDF échoue.
Le profilage récursif n’est pas pris en charge. Seules les fonctions de haut niveau des modules spécifiés sont profilées. Les fonctions définies à l’intérieur de fonctions ne le sont pas.
Le profilage des modules tiers n’est pas pris en charge.
La prise en charge des UDFs de profilage créées côté client via l’API
snowflake.snowparkn’est pas disponible.Les fonctions Python exécutées en parallèle sur
joblibne sont pas profilées.UDTFs ne sont pas pris en charge.
Le temps est mesuré en durée chronométrée, et non en temps de CPU.
Utilisation¶
Une fois le profileur configuré, vous pouvez l’utiliser simplement en exécutant la UDF pour générer la sortie du profileur. Une fois que la UDF a fini de s’exécuter, la sortie du profileur est écrite dans un tableau des événements interne. Vous pouvez récupérer la sortie du profileur à l’aide d’une fonction système.
Suivez les étapes suivantes pour configurer et utiliser le profileur dans votre code :
Activez le profileur et définissez le rapport de profil.
Exécutez la UDF.
Affichez la sortie du profilage.
Activer le profileur en spécifiant son focus¶
Pour activer le profileur, définissez l’un des paramètres de session suivants :
Note
Le profilage introduit une surcharge de performance lors de l’exécution de Python. Vous devez profiler votre code lors du développement et des tests. N’activez pas le profilage sur des charges de travail de production continue.
Spécifier le code à profiler¶
Par défaut, le profileur profile les méthodes définies en ligne avec la déclaration de la UDF. En d’autres termes, le profileur profilera toutes les méthodes définies dans le gestionnaire.
Pour la UDF d’exemple suivante, le profileur profilera la méthode handler et la méthode helper.
Spécifier le code externe à profiler¶
Vous pouvez spécifier que le profileur doit profiler le code du gestionnaire défini en dehors de la UDF, comme un code importé à partir d’une zone de préparation.
Pour spécifier le code externe pour le profilage, définissez la valeur du paramètre de session PYTHON_UDF_PROFILER_MODULES sur une liste des modules contenant le code, séparés par des virgules.
Le profileur inclura les modules spécifiés dans sa sortie de profilage lorsque vous exécuterez une UDF qu’ils importent.
Le code dans l’exemple suivant montre une UDF qui importe le code des modules spécifiés :
Exécuter la fonction définie par l’utilisateur¶
Après avoir activé le profileur, exécutez votre fonction définie par l’utilisateur (UDF) pour commencer le profilage.
Par défaut, le profileur profile les méthodes définies dans votre module. Pour plus d’informations sur l’enregistrement d’autres modules à partir de fichiers importés à profiler, consultez Spécifier le code à profiler.
Voir la sortie du profilage¶
Pour voir la sortie du profilage, interrogez un tableau des événements interne.
Les résultats du profilage sont généralement disponibles dans le tableau des événements 15 à 20 secondes après la fin de l’exécution de la UDF. Vous pouvez accéder à la sortie en utilisant la fonction système de la table, GET_PYTHON_UDF_PROFILER_OUTPUT.
Le code dans l’exemple suivant montre une requête sur le tableau des événements pour les résultats du profileur. L’query_id spécifié comme argument est l’ID de requête de la requête d’UDF pour lequel le profilage a été activé.
Résultats du profil¶
Lorsque vous afficherez les résultats du profileur, vous verrez un rapport qui diffère selon que vous avez spécifié le profilage pour un rapport de ligne ou un rapport de mémoire.
La sortie du profileur de mémoire se présente comme suit :
La sortie du profil de ligne ressemblera à ceci :