Profiling-Tools

Inhalt

In-Code-Performance-Profiling

Das Tool onnxruntime_perf_test.exe (verfügbar im Build-Drop) kann verwendet werden, um verschiedene Einstellungen zu testen. Die Anweisungen zur Verwendung finden Sie unter onnxruntime_perf_test.exe -h. Das Tool perf_view kann ebenfalls verwendet werden, um die Statistiken als zusammengefasste Ansicht im Browser darzustellen.

Sie können die Latenzprofilierung von ONNX Runtime im Code aktivieren

import onnxruntime as rt

sess_options = rt.SessionOptions()
sess_options.enable_profiling = True

Wenn Sie das Tool onnxruntime_perf_test.exe verwenden, können Sie -p [profil_file] hinzufügen, um die Performance-Profilierung zu aktivieren.

In beiden Fällen erhalten Sie eine JSON-Datei, die detaillierte Leistungsdaten (Threading, Latenz jedes Operators usw.) enthält. Diese Datei ist eine Standard-Performance-Tracing-Datei. Um sie benutzerfreundlich anzuzeigen, können Sie sie mit verschiedenen Tools öffnen.

  • (Windows) Verwenden Sie die WPA GUI, um den Trace mit dem Perfetto OSS-Plugin zu öffnen - Microsoft-Performance-Tools-Linux-Android
  • Perfetto UI - Nachfolger der Chrome-Tracing-UI
  • chrome://tracing
    • Öffnen Sie einen Chromium-basierten Browser wie Edge oder Chrome
    • Geben Sie chrome://tracing in die Adressleiste ein
    • Laden Sie die generierte JSON-Datei

Execution Provider (EP) Profiling

Seit ONNX 1.17 wurde die Unterstützung für die Profilierung von EPs oder Neural Processing Units (NPUs) hinzugefügt, sofern die jeweilige EP ihr SDK dafür unterstützt.

Qualcomm QNN EP

Wie in der QNN EP-Dokumentation erwähnt, wird die Profilierung unterstützt.

Plattformübergreifendes CSV-Tracing

Das Qualcomm AI Engine Direct SDK (QNN SDK) unterstützt die Profilierung. QNN gibt CSV im Textformat aus, wenn ein Entwickler das QNN SDK direkt außerhalb von ONNX verwendet. Um eine vergleichbare Funktionalität zu ermöglichen, imitiert ONNX diese Unterstützung und gibt das gleiche CSV-Format aus.

Wenn `profiling_level` angegeben ist, fügt ONNX einen Log im aktuellen Arbeitsverzeichnis hinzu, eine Datei namens `qnn-profiling-data.csv`

TraceLogging ETW (Windows) Profiling

Wie in Logging beschrieben, unterstützt ONNX die dynamische Aktivierung von Tracing-ETW-Anbietern. Insbesondere die folgenden Einstellungen. Wenn der Tracelogging-Anbieter aktiviert ist und `profiling_level` angegeben wurde, wird die CSV-Unterstützung automatisch deaktiviert.

  • Anbietername: Microsoft.ML.ONNXRuntime
  • Anbieter-GUID: 3a26b1ff-7484-7484-7484-15261f42614d
  • Schlüsselwörter: Profiling = 0x100 gemäß logging.h
  • Stufe
    • 5 (VERBOSE) = profiling_level=basic (gute Details ohne Leistungsverlust)
    • größer als 5 = profiling_level=detailed (einzelne Operatoren werden mit Inferenz-Performance-Hit protokolliert)
  • Ereignis: QNNProfilingEvent

GPU-Profiling

Um CUDA-Kernels zu profilieren, fügen Sie die cupti-Bibliothek zu Ihrem PATH hinzu und verwenden Sie die ONNX Runtime-Binärdatei, die aus dem Quellcode mit `--enable_cuda_profiling` erstellt wurde. Um ROCm-Kernels zu profilieren, fügen Sie die roctracer-Bibliothek zu Ihrem PATH hinzu und verwenden Sie die ONNX Runtime-Binärdatei, die aus dem Quellcode mit `--enable_rocm_profiling` erstellt wurde.

Leistungszahlen vom Gerät werden dann zu denen vom Host hinzugefügt. Zum Beispiel

{"cat":"Node", "name":"Add_1234", "dur":17, ...}
{"cat":"Kernel", "name":"ort_add_cuda_kernel", dur:33, ...}

Hier hat der „Add“-Operator vom Host einen CUDA-Kernel auf dem Gerät namens „ort_add_cuda_kernel“ ausgelöst, der 33 Mikrosekunden dauerte. Wenn ein Operator während der Ausführung mehrere Kernels aufgerufen hat, werden die Leistungszahlen dieser Kernels in der Reihenfolge des Aufrufs aufgeführt.

{"cat":"Node", "name":<name of the node>, ...}
{"cat":"Kernel", "name":<name of the kernel called first>, ...}
{"cat":"Kernel", "name":<name of the kernel called next>, ...}