Leistungsdiagnose

ONNX Runtime Web wurde für Geschwindigkeit und Effizienz entwickelt, aber es gibt eine Reihe von Faktoren, die die Leistung Ihrer Anwendung beeinflussen können. Dieses Dokument bietet einige Hinweise zur Diagnose von Leistungsproblemen in ONNX Runtime Web.

Stellen Sie vor Beginn sicher, dass ONNX Runtime Web Ihr Modell erfolgreich lädt und ausführt. Wenn Sie auf Probleme stoßen, konsultieren Sie zuerst die Fehlerbehebungsanleitung.

Inhalt

Allgemeine Leistungstipps

Hier sind einige allgemeine Tipps zur Verbesserung der Leistung Ihrer Anwendung

Verwenden Sie das richtige Modell

Wählen Sie ein Modell, das für Web-Szenarien geeignet ist. Ein zu großes oder zu komplexes Modell läuft auf weniger leistungsfähiger Hardware möglicherweise nicht effizient. Typischerweise werden „tiny“- oder „small“-Versionen von Modellen häufiger in Webanwendungen verwendet. Das bedeutet nicht, dass Sie keine größeren Modelle verwenden können, aber Sie sollten sich der potenziellen Auswirkungen auf die Benutzererfahrung durch längere Ladezeiten und langsamere Inferenz bewusst sein.

Verwenden Sie den richtigen Ausführungsanbieter

Wählen Sie den richtigen Ausführungsanbieter für Ihr Szenario.

  • WebAssembly (wasm): Dies ist der Standard-CPU-Ausführungsanbieter für ONNX Runtime Web. Verwenden Sie ihn für sehr kleine Modelle oder Umgebungen, in denen keine GPU verfügbar ist.

  • WebGPU (webgpu): Dies ist der Standard-GPU-Ausführungsanbieter. Verwenden Sie ihn, wenn das Gerät über eine anständige GPU verfügt, die WebGPU unterstützt.

  • WebNN (webnn): Dies ist die Option, die potenziell nahezu native Leistung im Web bietet. Sie wird derzeit nicht standardmäßig in Browsern unterstützt, aber Sie können die WebNN-Funktion manuell in den Browsereinstellungen aktivieren.

  • WebGL (webgl): Dieser Ausführungsanbieter wurde entwickelt, um Modelle mit GPUs auf älteren Geräten auszuführen, die WebGPU nicht unterstützen.

Nutzen Sie die Diagnosefunktionen

Nutzen Sie die Diagnosefunktionen, um detaillierte Informationen über die Ausführung des Modells zu erhalten. Dies kann hilfreich sein, um die Leistungseigenschaften des Modells zu verstehen und potenzielle Probleme oder Engpässe zu identifizieren.

CPU-Tipps

Wenn Sie den WebAssembly (wasm)-Ausführungsanbieter verwenden, können Sie die folgenden Tipps zur Verbesserung der Leistung Ihrer Anwendung nutzen

Multi-Threading aktivieren

Aktivieren Sie immer Multi-Threading, wenn die Umgebung dies unterstützt. Multi-Threading kann die Leistung Ihrer Anwendung erheblich verbessern, indem mehrere CPU-Kerne genutzt werden.

Diese Funktion ist standardmäßig in ONNX Runtime Web aktiviert, funktioniert jedoch nur, wenn der Modus crossOriginIsolated aktiviert ist. Weitere Informationen finden Sie unter https://web.dev/cross-origin-isolation-guide/.

Sie können auch das Flag ort.env.wasm.numThreads verwenden, um die Anzahl der zu verwendenden Threads festzulegen.

// Set the number of threads to 4
ort.env.wasm.numThreads = 4;

// Disable multi-threading
ort.env.wasm.numThreads = 1;

// Let ONNX Runtime Web decide the number of threads to use
ort.env.wasm.numThreads = 0;

Weitere Details finden Sie in der API-Referenz: env.wasm.numThreads.

Bevorzugen Sie uint8-quantisierte Modelle

Wenn Sie ein quantisiertes Modell verwenden, bevorzugen Sie uint8-quantisierte Modelle. Vermeiden Sie nach Möglichkeit float16-Modelle, da float16 nicht nativ von der CPU unterstützt wird und langsam ist.

Proxy Worker aktivieren

Der Proxy Worker ist eine Funktion, die es ONNX Runtime Web ermöglicht, rechenintensive Aufgaben an einen separaten Web Worker auszulagern. Die Verwendung des Proxy Workers kann die Leistung des Modells nicht verbessern, aber die Reaktionsfähigkeit der Benutzeroberfläche verbessern und somit die Benutzererfahrung optimieren.

Wenn Sie ONNX Runtime Web nicht in einem Web Worker importiert haben und die Inferenz des Modells einige Zeit in Anspruch nimmt, wird die Aktivierung des Proxy Workers empfohlen.

// Enable proxy worker
ort.env.wasm.proxy = true;

Weitere Details finden Sie in der API-Referenz: env.wasm.proxy.

WebGPU-Tipps

Wenn Sie den WebGPU-Ausführungsanbieter verwenden, können Sie die folgenden Tipps zur Verbesserung der Leistung Ihrer Anwendung nutzen

Versuchen Sie die Graphenerfassung

Informationen zur Funktion finden Sie unter Graphenerfassung.

Wenn Ihr Modell statische Formen hat und alle seine Rechenkerne auf dem WebGPU EP laufen, können Sie versuchen, die Graphenerfassungsfunktion zu aktivieren, es sei denn, Sie müssen Eingabedaten mit dynamischer Form bereitstellen (z. B. Transformer-basierte Decoder-Modelle). Auch bei Eingaben mit statischer Form funktioniert diese Funktion nicht immer für alle Modelle. Sie können sie ausprobieren und sehen, ob sie für Ihr Modell funktioniert. Wenn sie nicht funktioniert, schlägt die Modellinitialisierung fehl, und Sie können diese Funktion für dieses Modell deaktivieren.

Versuchen Sie die Überschreibung von freien Dimensionen

Informationen zur Funktion finden Sie unter Überschreibung von freien Dimensionen.

Die Verwendung der Überschreibung von freien Dimensionen verbessert die Leistung nicht unbedingt. Das hängt stark vom jeweiligen Modell ab. Sie können es ausprobieren und sehen, ob es für Ihr Modell funktioniert. Wenn Sie eine Leistungsverschlechterung oder eine erhöhte Speichernutzung feststellen, können Sie diese Funktion deaktivieren.

Versuchen Sie, Tensordaten auf der GPU zu halten

Informationen zur Funktion finden Sie unter Tensordaten auf der GPU halten (IO-Binding).

Das Beibehalten von Tensordaten auf der GPU kann unnötige Datenübertragungen zwischen CPU und GPU vermeiden, was die Leistung verbessern kann. Versuchen Sie, den besten Weg zu finden, diese Funktion für Ihr Modell zu nutzen.

Seien Sie vorsichtig mit der Verwaltung des Lebenszyklus von GPU-Tensoren, wenn Sie diese Funktion nutzen.

Diagnosefunktionen

Profiling

Sie können das Profiling aktivieren, um detaillierte Informationen über die Ausführung des Modells zu erhalten. Dies kann hilfreich sein, um die Leistungseigenschaften des Modells zu verstehen und potenzielle Engpässe zu identifizieren.

CPU-Profiling

Um das CPU-Profiling zu aktivieren

  • Schritt 1: Geben Sie die Option enableProfiling in den Sitzungsoptionen an
    const mySessionOptions = {
      ...,
      enableProfiling: true
    };
    

    Durch die Angabe dieser Option sammelt ONNX Runtime Web CPU-Profiling-Daten für jeden Durchlauf.

  • Schritt 2: Rufen Sie die Profiling-Daten nach der Inferenz ab
    mySession.endProfiling();
    

    Nach dem Aufruf von endProfiling() werden die Profiling-Daten in der Konsole ausgegeben.

    Informationen zur Verwendung der Profiling-Daten finden Sie unter In-Code-Performance-Profiling.

WebGPU-Profiling

Um das WebGPU-Profiling zu aktivieren

  • Setzen Sie ort.env.webgpu.profiling = { mode: 'default' }, um das WebGPU-Profiling zu aktivieren. Die GPU-Profiling-Daten werden mit dem Präfix [profiling] in der Konsole ausgegeben.
  • Alternativ können Sie ort.env.webgpu.profiling mit einer Funktion setzen, um die Profiling-Daten zu verarbeiten
     ort.env.webgpu.profiling = {
         mode: 'default',
         ondata: (data) => {
             // handle the profiling data
         }
     };
    

    Weitere Details finden Sie in der API-Referenz: env.webgpu.profiling.

Trace

Sie können den Trace aktivieren, indem Sie das folgende Flag angeben

ort.env.trace = true;

Diese Funktion verwendet console.timeStamp, um die Trace-Daten zu protokollieren. Sie können die Performance-Tools des Browsers verwenden, um die Trace-Daten zu analysieren.

Weitere Details finden Sie in der API-Referenz: env.trace.

Protokollierungsstufe „verbose“

Sie können die Protokollierungsstufe auf „verbose“ setzen, um detailliertere Protokolle zu erhalten

ort.env.logLevel = 'verbose';

Weitere Details finden Sie in der API-Referenz: env.logLevel.

Debug-Modus aktivieren

Sie können den Debug-Modus aktivieren, indem Sie das folgende Flag angeben

ort.env.debug = true;

Im Debug-Modus protokolliert ONNX Runtime Web detaillierte Informationen über die Ausführung des Modells und führt zusätzliche Prüfungen durch. Normalerweise müssen Sie die verbose-Protokollierungsstufe verwenden, um die Debug-Protokolle zu sehen.

Weitere Details finden Sie in der API-Referenz: env.debug.

Profiling-Daten analysieren

Dieser Teil wird gerade erstellt.