HyperAI
Back to Headlines

Leitfaden zur Leistungsoptimierung von LLM-Inferenz mit TensorRT-LLM

vor 2 Tagen

LLM Inferenz Benchmarking: Leistungsoptimierung mit TensorRT-LLM Dies ist der dritte Beitrag in unserer Serie zum Benchmarking von großen Sprachmodellen (LLMs). Der Fokus hier liegt darauf, Entwicklern zu zeigen, wie sie die Inferenz von LLMs mit TensorRT-LLM benchmarken und optimieren können. Für grundlegende Kenntnisse zu gängigen Benchmark-Metriken und Parametern sei auf den ersten Beitrag der Serie, "LLM Inferenz Benchmarking: Grundlegende Konzepte", verwiesen. Außerdem bieten wir Tipps zur Verwendung von GenAI-Perf und NVIDIA NIM in unserem zweiten Beitrag, "LLM Inferenz Benchmarking Guide: NVIDIA GenAI-Perf und NIM". Es ist entscheidend, die Inferenzleistung zu berücksichtigen, wenn Sie LLM-Frameworks bereitstellen, integrieren oder benchmarken. Sie müssen sicherstellen, dass das ausgewählte Framework und seine Funktionen so eingestellt sind, dass sie die für Ihre Anwendung relevanten Leistungsindikatoren erfüllen. TensorRT-LLM ist die quelloffene AI-Inferenz-Engine von NVIDIA, die es Ihnen ermöglicht, Modelle mit ihren nativen Benchmarking- und Serving-Tools bereitzustellen. In diesem Beitrag stellen wir einen praktischen Leitfaden zur Optimierung eines Modells mit trtllm-bench und anschließenden Deployment mit trtllm-serve vor. Wie man mit trtllm-bench benchmarkt trtllm-bench ist ein Python-basiertes Werkzeug von TensorRT-LLM, das es ermöglicht, Modelle direkt zu benchmarken, ohne die Overhead-Kosten einer vollständigen Inferenz-Bereitstellung. Es vereinfacht die schnelle Erstellung von Einblicke in die Modellleistung. trtllm-bench konfiguriert intern die Engine mit optimalen Einstellungen, die im Allgemeinen eine gute Leistung bieten. GPU-Umgebung einrichten Das Benchmarking beginnt mit einer ordnungsgemäß konfigurierten GPU-Umgebung. Um Ihre GPUs auf ihre Standard-Einstellungen zurückzusetzen, führen Sie folgenden Befehl aus: Um die maximale Nutzung Ihrer GPU abzufragen, verwenden Sie: Wenn Sie einen bestimmten Leistungsrahmen setzen möchten (oder den Maximalwert), führen Sie: Für weitere Details siehe die trtllm-bench-Dokumentation. Datensatz vorbereiten Sie können einen synthetischen Datensatz durch die Verwendung von prepare_dataset erstellen oder Ihren eigenen Datensatz im Format angeben, das in unserer Dokumentation beschrieben wird. Für einen benutzerdefinierten Datensatz können Sie eine JSON Lines (jsonl)-Datei mit einer Payload pro Zeile formatieren. Ein Beispiel für einen einzelnen Datensatz-Eintrag lautet: Für diesen Beitrag stellen wir Beispielergebnisse basierend auf einem synthetischen Datensatz mit ISL/OSL von 128/128 zur Verfügung. Benchmarks durchführen Um Benchmarks mit trtllm-bench durchzuführen, verwenden Sie den Durchsatz-Subkommando von trtllm-bench. Wenn Sie das Benchmarking mit dem PyTorch-Workflow durchführen möchten, führen Sie folgenden Befehl in einer Umgebung aus, in der TensorRT-LLM installiert ist: Das Durchsatz-Subkommando lädt das Checkpoint automatisch von HuggingFace herunter (falls nicht zwischengespeichert) und initialisiert TRT-LLM mit dem PyTorch-Workflow. Die Ergebnisse werden in der Datei results.json gespeichert und im Terminal angezeigt, sobald die Ausführung abgeschlossen ist: Hinweis: Dies ist nur ein Beispielausschnitt der Ausgabe und stellt keine Leistungsversprechen dar. Leistungsresultate analysieren Wenn Sie den obigen Befehl ausführen, werden die wichtigsten Statistiken im Abschnitt PERFORMANCE OVERVIEW angezeigt. Hier einige nützliche Begriffe: Weitere detaillierte Erklärungen finden Sie im ersten Beitrag der Serie, "LLM Inferenz Benchmarking: Grundlegende Konzepte". Sie werden außerdem bemerken, dass trtllm-bench die maximale Anzahl von Tokens und die Batch-Größe meldet: Diese haben in TensorRT-LLM eine besondere Bedeutung: Beim Analysieren der Ergebnisse ist es hilfreich, Ihre Prioritäten zu kennen. Einige häufig gestellte Fragen sind: Die von Ihnen gewählte Optimierung hängt stark von dem Szenario ab, das Sie priorisieren möchten. In diesem Beitrag konzentrieren wir uns auf die Optimierung der Benutzererfahrung. Wir wollen die Metrik "Per User Output Speed" oder die Geschwindigkeit, mit der Tokens nach der Kontextphase an den Benutzer zurückgegeben werden, priorisieren. Mit trtllm-bench können Sie die maximale Anzahl gleichzeitiger Anfragen mit --concurrency angeben, was Ihnen hilft, die Anzahl der Benutzer einzuschränken, die Ihr System unterstützen kann. Diese Option ist nützlich, um verschiedene Kurven zu erstellen, die bei der Suche nach Latenz- und Durchsatzzielen entscheidend sind. Abbildung 1 zeigt einen Vergleich der Benutzer-Ausgabe-Geschwindigkeit und der GPU-Ausgabedurchsatz basierend auf den Modellen NVIDIA’s Llama-3.1 8B FP8 und Meta’s Llama-3.1 8B FP16, die für ein 128/128 ISL/OSL-Szenario generiert wurden. Angenommen, wir möchten die Systemnutzung maximieren, aber dennoch eine Benutzererfahrung von etwa 50 Tokens/Sekunde (ungefähr 20 ms zwischen Tokens) gewährleisten. Um den Handel zwischen GPU-Leistung und Benutzererfahrung zu bewerten, können Sie den GPU-Ausgabedurchsatz gegen die Benutzer-Ausgabe-Geschwindigkeit auftragen. In Abbildung 1 sehen wir, dass Llama-3.1 8B FP16 nur etwa 256 gleichzeitige Benutzer bei etwa 72 Tokens/Sekunde/Benutzer unterstützt, bevor unsere 50 Tokens/Sekunde/Benutzer-Einschränkung verletzt wird. Wenn wir jedoch den Llama-3.1 8B FP8 optimierten Checkpoint betrachten, sehen wir, dass TensorRT-LLM 512 gleichzeitige Benutzer bei etwa 66 Tokens/Sekunde/Benutzer unterstützen kann. Wir können schlussfolgern, dass das quantisierte Modell innerhalb des gleichen Budgets mehr Benutzer bedienen kann, indem beide Modelle mit trtllm-bench getestet werden. Mit diesen Daten können Sie Folgendes berücksichtigen: Wenn Sie die Engine auf 512 Einträge zwingen möchten, können Sie die maximale Batch-Größe auf 512 setzen. Dies birgt jedoch das Risiko, die Zeit bis zum ersten Token (TTFT) zu erhöhen, falls der Traffic diesen Wert überschreitet (jede Anfrage über 512 wird in der Warteschlange gehalten). Sie können Service-Szenarien und Modelle mit anderen Datensätzen mit trtllm-bench bewerten und verschiedene Metriken auftragen. Das Tool ermöglicht es Ihnen, auf einfache Weise Wertbewertungen basierend auf Ihren Prioritäten durchzuführen, indem Sie die Kommandozeile anpassen. Hinweis: In diesem Szenario betrachten wir nur ein Ein-GPU-Modell. Wenn Sie ein Modell haben, das mehrere GPUs erfordert, können Sie trtllm-bench mit den Optionen --tp, --pp und --ep konfigurieren, um die beste shardierte/datenparallele Konfiguration zu finden. Außerdem können Entwickler fortgeschrittene Funktionen mit dem Argument --extra_llm_api_options nutzen. Wie man ein großes Sprachmodell mit trtllm-serve bereitstellt TensorRT-LLM bietet die Möglichkeit, eine OpenAI-kompatible Endpunkt einfach bereitzustellen, indem Sie den Befehl trtllm-serve verwenden. Sie können die oben durchgeführte Optimierung zur Initialisierung eines optimierten Servers nutzen. Im Gegensatz zum Benchmarking macht trtllm-serve keine Annahmen hinsichtlich der Konfiguration, abgesehen von allgemeinen Einstellungen. Um den Server basierend auf den obigen maximalen Durchsatz-Ergebnissen zu optimieren, müssen Sie folgenden Befehl verwenden: Das Argument --extra_llm_api_options ermöglicht es Ihnen, die Einstellungen auf der LLM-API-Ebene direkt zu ändern. Um die Einstellungen vom Benchmark zu übernehmen, benötigen Sie Folgendes in Ihrer llm_api_options.yml: Sobald konfiguriert und ausgeführt, sehen Sie eine Statusmeldung, dass der Server läuft: Mit dem laufenden Server können Sie das Modell nun mithilfe von GenAI-Perf (ähnlich wie im zweiten Blog-Beitrag dieser Serie) oder unserer angepassten Version von benchmark_serving.py benchmarken. Dies hilft Ihnen, die Leistung Ihrer optimierten Server-Konfiguration zu überprüfen. In zukünftigen Releases planen wir, trtllm-bench zu erweitern, um einen optimierten Server für das Benchmarking zu starten. Loslegen mit dem Benchmarking und der Leistungsoptimierung von LLMs Mit trtllm-bench bietet TensorRT-LLM eine einfache Methode, um eine Vielzahl von Konfigurationen, Optimierungen, Konkurrenz und Funktionen zu benchmarken. Die Einstellungen von trtllm-bench lassen sich direkt in die native Serving-Lösung von TensorRT-LLM, trtllm-serve, übertragen. Dadurch können Sie die Leistungsoptimierung nahtlos in eine OpenAI-kompatible Bereitstellung überführen. Für detailliertere Informationen über Leistung, modellspezifische Optimierungen und das Tuning/Benchmarking von TensorRT-LLM, seien Sie auf folgende Ressourcen verwiesen: TensorRT-LLM Documentation NVIDIA Developer Forum NVIDIA Deep Learning Examples Diese Ressourcen bieten umfassende Anleitungen und Beispiele, um Ihnen den Einstieg ins Benchmarking und die Leistungsoptimierung von LLMs zu erleichtern.

Related Links