[PYTHON] Essayez de profiler avec ONNX Runtime

Ceci est une continuation de Accélérer l'apprentissage profond avec le processeur Rasperry Pi 4.

Afin d'accélérer le Deep Learning, il est nécessaire d'examiner quel processus prend combien de temps et de réduire le temps de traitement réel. Par conséquent, premier profil utilisant la fonction de profil d'ONNX Runtime.

Vous trouverez comment activer la fonction de profilage dans le didacticiel officiel ONNX (https://microsoft.github.io/onnxruntime/python/auto_examples/plot_profiling.html "").

sample.py


import onnxruntime

options = onnxruntime.SessionOptions()
options.enable_profiling = True          # <-Fonction de profil activée
session = onnxruntime.InferenceSession(path_to_model, options)

[Cible du profil]

prof_file = session.end_profiling()
print(prof_file)

Les résultats du profil sont enregistrés au format JSON. En outre, les résultats de profil peuvent être visualisés avec l'outil de traçage intégré à Chrome. (Entrez ** chrome: // tracing / ** dans l'URL de Chrome pour lancer l'outil.)

Cette fois, prenons un profil dans le cas de l'exécution de la classification d'images avec ** MobileNetV1 depth 1.0 224x224 **. Chaque modèle utilise le modèle avec ONNX Runrime Graph Optimization.

Résultat du profil

mobilenetv1_prof1.png Le processus est le suivant: chargement du modèle, initialisation de session et exécution du modèle. mobilenetv1_prof3.png Si vous développez la partie d'exécution du modèle, le processus de convolution, qui est une fusion du processus de normalisation par lots, est exécuté plusieurs fois. (La normalisation par lots doit être gérée indépendamment, mais ONNX Runrime Graph Optimization En conséquence, il est intégré dans le processus de Convolution.)

Le tableau ci-dessous résume les résultats du profil.

article temps de traitement(ms) Pourcentage(%)
Tout traitement 157.19 -
Convolution 148.017 94.2
gemm 6.053 3.9
Autre 3.12 1.9

Il s'avère que nous devons faire quelque chose concernant le traitement par convolution afin de réduire le temps de traitement global. Je voudrais examiner le type d’approche nécessaire à partir de la prochaine fois.

Recommended Posts

Essayez de profiler avec ONNX Runtime
Essayez de défier le sol par récursif
Essayez d'exploiter Facebook avec Python
Essayez de produire de l'audio avec M5 STACK
Essayez de reproduire un film couleur avec Python
Essayez de prédire les fleurs de cerisier avec XG Boost
Essayez de convertir en données ordonnées avec les pandas
Essayez rapidement de visualiser votre ensemble de données avec des pandas
Premier YDK à essayer avec Cisco IOS-XE
Essayez de générer une image avec aliénation
Essayez de créer votre propre AWS-SDK avec bash
Essayez de résoudre le problème du fizzbuzz avec Keras
Essayez d'agréger les données de musique doujin avec des pandas
Essayez de résoudre le diagramme homme-machine avec Python
Essayez d'extraire le document Azure document DB avec pydocumentdb
Essayez de dessiner une courbe de vie avec python
Essayez de communiquer avec EV3 et PC! (MQTT)
Comment essayer l'algorithme des amis d'amis avec pyfof
Comment gérer les erreurs d'exécution dans subprocess.call
Essayez de créer un code de "décryptage" en Python
Essayez de générer automatiquement des documents Python avec Sphinx
Essayez de créer un groupe de dièdre avec Python
Essayez de rendre le client FTP le plus rapide avec Pythonista
Essayez de détecter les poissons avec python + OpenCV2.4 (inachevé)
Essayez de gratter avec Python.
Essayez de résoudre le livre des défis de programmation avec python3
Convertir 202003 en 2020-03 avec les pandas
Faisons un outil de veille de commande avec python
Essayez de créer un Checkbutton dynamiquement avec Tkinter en Python
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Convertir keras-yolo3 en ONNX
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
Développement basé sur les schémas avec Responder: essayez d'afficher l'interface utilisateur Swagger
Essayez d'obtenir le contenu de Word avec Golang
Essayez d'implémenter yolact
[Neo4J] ④ Essayez de gérer la structure du graphe avec Cypher
Essayez SNN avec BindsNET
Un échantillon pour essayer rapidement les machines de factorisation avec fastFM
Essayez de falsifier les demandes de l'iPhone avec Burp Suite
Essayez la régression avec TensorFlow
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
Essayez de jouer avec l'uprobe qui prend directement en charge Systemtap
[Evangelion] Essayez de générer automatiquement des lignes de type Asuka avec Deep Learning
[Test automatique] Comment commencer à créer un test automatique pendant l'exécution avec Airtest
Essayez d'afficher diverses informations utiles pour le débogage avec python
Quand j'essaye de pousser avec heroku, ça ne marche pas
Essayez Fortran avec VS Code pour déboguer les paramètres. [Win10]
Essayez de lier iTunes et Hue of Collection Case avec MQTT
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Essayez d'extraire la table de données d'Azure SQL Server avec pyodbc
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (Append)
Essayez d'acquérir des données lors de la redirection de port vers RDS avec anaconda.
C'est Halloween donc je vais essayer de le cacher avec Python