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.
Der Prozess ist wie folgt: Modellladen, Sitzungsinitialisierung und Modellausführung. 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.