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
enableProfilingin den Sitzungsoptionen anconst 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.profilingmit einer Funktion setzen, um die Profiling-Daten zu verarbeitenort.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.