[PYTHON] Versuchen Sie, sich mit ONNX Runtime zu profilieren

Dies ist eine Fortsetzung von Beschleunigen des tiefen Lernens mit Rasperry Pi 4-CPU.

Um Deep Learning zu beschleunigen, muss untersucht werden, welche Verarbeitung wie viel Zeit in Anspruch nimmt, und die tatsächliche Verarbeitungszeit verkürzt werden. Daher erstes Profil mit der Profilfunktion von ONNX Runtime.

Informationen zum Aktivieren der Profilfunktion finden Sie in ONNX Official Tutorial.

sample.py


import onnxruntime

options = onnxruntime.SessionOptions()
options.enable_profiling = True          # <-Profilfunktion aktiviert
session = onnxruntime.InferenceSession(path_to_model, options)

[Profilziel]

prof_file = session.end_profiling()
print(prof_file)

Profilergebnisse werden im JSON-Format gespeichert. Darüber hinaus können Profilergebnisse mit dem in Chrome integrierten Tracing-Tool visualisiert werden. (Geben Sie ** chrome: // tracing / ** in die Chrome-URL ein, um das Tool zu starten.)

Nehmen wir dieses Mal ein Profil für die Ausführung der Bildklassifizierung mit ** MobileNetV1-Tiefe 1.0 224x224 **. Jedes Modell verwendet das Modell mit ONNX Runrime Graph Optimization.

Profilergebnis

mobilenetv1_prof1.png Der Prozess ist wie folgt: Modellladen, Sitzungsinitialisierung und Modellausführung. mobilenetv1_prof3.png Wenn Sie den Modellausführungsteil erweitern, wird der Faltungsprozess, bei dem es sich um eine Fusion des Batch-Normalisierungsprozesses handelt, mehrmals ausgeführt. (Die Stapelnormalisierung sollte unabhängig erfolgen, jedoch ONNX Runrime Graph Optimization Infolgedessen wird es in den Faltungsprozess integriert.)

Die folgende Tabelle fasst die Profilergebnisse zusammen.

Artikel Verarbeitungszeit(ms) Prozentsatz(%)
Alle Verarbeitung 157.19 -
Convolution 148.017 94.2
gemm 6.053 3.9
Andere 3.12 1.9

Es stellt sich heraus, dass wir etwas gegen die Faltungsverarbeitung unternehmen müssen, um die Gesamtverarbeitungszeit zu verkürzen. Ich möchte überlegen, welche Vorgehensweise ab dem nächsten Mal erforderlich ist.

Recommended Posts

Versuchen Sie, sich mit ONNX Runtime zu profilieren
Versuchen Sie, den Boden durch Rekursion herauszufordern
Versuchen Sie, Facebook mit Python zu betreiben
Versuchen Sie, Audio mit M5 STACK auszugeben
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen
Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
Erster Versuch von YDK mit Cisco IOS-XE
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Versuchen Sie, Doujin-Musikdaten mit Pandas zu aggregieren
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Versuchen Sie, das Dokument der Azure-Dokumentdatenbank mit pydocumentdb zu extrahieren
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Versuche mit EV3 und PC zu kommunizieren! (MQTT)
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
Umgang mit Laufzeitfehlern in subprocess.call
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Versuchen Sie, Python-Dokumente automatisch mit Sphinx zu generieren
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Versuchen Sie, Client-FTP mit Pythonista am schnellsten zu machen
Versuchen Sie, Fische mit Python + OpenCV2.4 (unvollendet) zu erkennen.
Versuchen Sie es mit Python.
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Konvertiere keras-yolo3 in onnx
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen
Schemagesteuerte Entwicklung mit Responder: Versuchen Sie, die Swagger-Benutzeroberfläche anzuzeigen
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
Versuchen Sie, yolact zu implementieren
[Neo4J] ④ Versuchen Sie, die Diagrammstruktur mit Cypher zu handhaben
Versuchen Sie SNN mit BindsNET
Ein Beispiel, um Faktorisierungsmaschinen schnell mit fastFM auszuprobieren
Versuchen Sie, Anfragen von iPhone mit Burp Suite zu manipulieren
Versuchen Sie eine Regression mit TensorFlow
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen
Versuchen Sie, mit dem Uprobe zu spielen, der Systemtap direkt unterstützt
[Evangelion] Versuchen Sie, mit Deep Learning automatisch Asuka-ähnliche Linien zu erzeugen
[Automatischer Test] So erstellen Sie zur Laufzeit mit Airtest einen automatischen Test
Versuchen Sie, verschiedene Informationen anzuzeigen, die für das Debuggen mit Python nützlich sind
Wenn ich versuche, mit Heroku zu pushen, funktioniert es nicht
Probieren Sie Fortran mit VS-Code aus, um Einstellungen zu debuggen. [Win10]
Versuchen Sie, iTunes und Hue of Collection Case mit MQTT zu verknüpfen
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Versuchen Sie, die Datentabelle von Azure SQL Server mit pyodbc zu extrahieren
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Anhängen) zu verarbeiten.
Versuchen Sie, Daten zu erfassen, während Sie mit anaconda eine Portweiterleitung an RDS durchführen.
Es ist Halloween, also werde ich versuchen, es mit Python zu verstecken