Heim Technologie-Peripheriegeräte KI Mit weniger als 1.000 Codezeilen hat das PyTorch-Team Llama 7B zehnmal schneller gemacht

Mit weniger als 1.000 Codezeilen hat das PyTorch-Team Llama 7B zehnmal schneller gemacht

Dec 05, 2023 pm 03:14 PM
入门 pytorch

Das PyTorch-Team bringt Ihnen persönlich bei, wie Sie die Inferenz großer Modelle beschleunigen können.

Generative KI hat sich im vergangenen Jahr rasant entwickelt. Darunter war die Textgenerierung immer ein besonders beliebtes Feld. In vielen Open-Source-Projekten Um bessere Ergebnisse zu erzielen, wird eine kontinuierliche Optimierung durchgeführt.

Als eines der beliebtesten Frameworks in der Machine-Learning-Community hat PyTorch diese neue Chance natürlich genutzt und kontinuierlich optimiert. Damit jeder diese Innovationen besser verstehen kann, hat das PyTorch-Team speziell eine Reihe von Blogs eingerichtet, die sich mit der Verwendung von reinem nativem PyTorch zur Beschleunigung generativer KI-Modelle befassen.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Codeadresse: https://github.com/pytorch-labs/gpt-fast

Im ersten Blog zeigte das PyTorch-Team, wie man „Segment Anything“ nur mit reinem nativen PyTorch (SAM) umschreibt )-Modell, das achtmal schneller ist als die ursprüngliche Implementierung . In diesem Blog bringen sie uns etwas Neues, nämlich wie man die LLM-Inferenz beschleunigt.

Werfen wir zunächst einen Blick auf die Ergebnisse. Das Team hat LLM neu geschrieben und die Inferenzgeschwindigkeit war zehnmal schneller als die Basislinie, ohne an Genauigkeit zu verlieren, wobei weniger als 1000 Zeilen reiner nativer PyTorch-Code verwendet wurden!

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Alle Benchmarks werden auf A100-80GB ausgeführt, die Leistung ist auf 330W begrenzt.

Diese Optimierungen umfassen:

  • Torch.compile: PyTorch-Modell-Compiler. PyTorch 2.0 fügt eine neue Funktion namens Torch.compile () hinzu, mit der vorhandene Modelle mit einer Codezeile beschleunigt werden können das Modell;
  • GPU-Quantisierung: Beschleunigen Sie das Modell durch Reduzierung der Rechengenauigkeit;
  • Spekulative Dekodierung: eine große Modellinferenzbeschleunigungsmethode, die ein kleines „Entwurfs“-Modell verwendet, um große „Ziele“ vorherzusagen ;
  • Tensor Parallel: Beschleunigen Sie die Modellinferenz, indem Sie das Modell auf mehreren Geräten ausführen.

Als nächstes wollen wir sehen, wie jeder Schritt umgesetzt wird.

6 Schritte zur Beschleunigung der Inferenz großer Modelle

Die Studie zeigt, dass die Inferenzleistung des großen Modells vor der Optimierung 25,5 tok/s beträgt, was nicht sehr gut ist:

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Nach einigem Nachforschen habe ich endlich den Grund gefunden: übermäßiger CPU-Overhead. Dann gibt es den folgenden 6-stufigen Optimierungsprozess.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Schritt 1: Reduzieren Sie den CPU-Overhead mit Torch.compile und statischem KV-Cache, um 107,0 TOK/S zu erreichen.

torch.compile ermöglicht es Benutzern, größere Bereiche in einem einzigen Kompilierungsbereich zu erfassen, insbesondere im Modus ="reduce-overhead" (siehe Code unten), diese Funktion ist sehr effektiv bei der Reduzierung des CPU-Overheads. Darüber hinaus wird in diesem Artikel auch fullgraph=True angegeben, um zu überprüfen, ob im Modell keine „Grafikunterbrechung“ vorliegt ( Das heißt , der Teil, den Torch.compile nicht kompilieren kann).

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Aber selbst mit dem Segen von Torch.compile gibt es immer noch einige Hindernisse.

Die erste Hürde ist der KV-Cache. Das heißt, wenn der Benutzer mehr Token generiert, wächst die „logische Länge“ des KV-Cache. Dieses Problem tritt aus zwei Gründen auf: Erstens ist es sehr teuer, den KV-Cache jedes Mal neu zuzuweisen (und zu kopieren), wenn der Cache wächst. Zweitens macht es diese dynamische Zuweisung schwieriger, den Overhead zu reduzieren.

Um dieses Problem zu lösen, verwendet dieser Artikel einen statischen KV-Cache, weist die Größe des KV-Cache statisch zu und maskiert dann nicht verwendete Werte im Aufmerksamkeitsmechanismus.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Das zweite Hindernis ist die Vorfüllphase. Die Textgenerierung mit Transformer kann als zweistufiger Prozess betrachtet werden: 1. Vorabfüllungsphase zur Verarbeitung der gesamten Eingabeaufforderung 2. Dekodierung des Tokens.

Obwohl der KV-Cache aufgrund der variablen Länge von statisch eingestellt ist Die Eingabeaufforderung und die Vorabfüllung der Stufen benötigen noch mehr Dynamik. Daher müssen zum Kompilieren dieser beiden Phasen separate Kompilierungsstrategien verwendet werden.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Obwohl diese Details etwas knifflig sind, sind sie nicht schwer umzusetzen und die Leistungsverbesserungen sind enorm. Nach diesem Vorgang stieg die Leistung um mehr als das Vierfache, von 25 tok/s auf 107 tok/s.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Schritt 2: Beseitigen Sie den Speicherbandbreitenengpass durch int8-Gewichtsquantisierung und erreichen Sie 157,4 tok/s

Durch das Obige haben wir die Auswirkungen gesehen, die durch die Anwendung von Torch.compile, statischem KV-Cache, usw. Riesige Beschleunigung, aber das PyTorch-Team war damit nicht zufrieden und fand andere Optimierungspunkte.

Sie glauben, dass der größte Engpass bei der Beschleunigung des generativen KI-Trainings die Kosten für das Laden von Gewichten aus dem globalen GPU-Speicher in Register sind. Mit anderen Worten: Jeder Vorwärtsdurchlauf muss jeden Parameter auf der GPU „berühren“. Wie schnell können wir also theoretisch auf jeden Parameter im Modell „zugreifen“?

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Um dies zu messen, verwendet dieser Artikel die Model Bandwidth Utilization (MBU). Die Berechnung erfolgt ganz einfach wie folgt:

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Bei einem 7B-Parametermodell wird beispielsweise jeder Parameter in fp16 (2) gespeichert Bytes pro Parameter) können 107 Token/s erreicht werden. Der A100-80GB verfügt über eine theoretische Speicherbandbreite von 2 TB/s.

Wie in der Abbildung unten gezeigt, können Sie durch Umsetzen der obigen Formel in bestimmte Werte eine MBU von 72 % erhalten! Dieses Ergebnis ist recht gut, da viele Studien Schwierigkeiten haben, die 85 % zu durchbrechen.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Aber auch diesen Wert möchte das PyTorch-Team steigern. Sie stellten fest, dass sie weder die Anzahl der Parameter im Modell noch die Speicherbandbreite der GPU ändern konnten. Sie entdeckten jedoch, dass sie die Anzahl der für jeden Parameter gespeicherten Bytes ändern konnten!

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Also werden sie die int8-Quantisierung verwenden.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Bitte beachten Sie, dass es sich hierbei nur um die quantisierten Gewichte handelt, die Berechnung selbst erfolgt weiterhin in bf16. Darüber hinaus ist es mit Torch.compile einfach, effizienten Code für die int8-Quantisierung zu generieren.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Wie in der Abbildung oben gezeigt, ist aus der dunkelblauen Linie (torch.compile + int8) ersichtlich, dass die Leistung erheblich verbessert wird, wenn nur die Gewichtsquantisierung von Torch.compile + int8 verwendet wird.

Die Anwendung der int8-Quantisierung auf das Llama-7B-Modell verbessert die Leistung um etwa 50 % auf 157,4 Token/s.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Schritt 3: Spekulative Dekodierung verwenden

Selbst nach der Verwendung von Techniken wie der int8-Quantisierung stand das Team immer noch vor einem anderen Problem: Um 100 Token zu generieren, muss das Gewicht 100 sein geladen Zweitklassig.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Auch wenn die Gewichte quantisiert sind, ist es unvermeidlich, die Gewichte immer wieder zu laden. Es stellt sich heraus, dass die Nutzung der spekulativen Dekodierung diese strikte serielle Abhängigkeit aufheben und die Geschwindigkeit steigern kann.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Diese Studie verwendet ein Entwurfsmodell, um 8 Token zu generieren, und verwendet dann ein Validierungsmodell, um sie parallel zu verarbeiten und nicht übereinstimmende Token zu verwerfen. Dieser Prozess unterbricht serielle Abhängigkeiten. Die gesamte Implementierung benötigt etwa 50 Zeilen nativen PyTorch-Code.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Schritt 4: Verwenden Sie die int4-Quantisierung und die GPTQ-Methode, um die Gewichtung weiter zu reduzieren und 202,1 tok/s zu erreichen.

In diesem Artikel wurde festgestellt, dass die Genauigkeit des Modells beginnt, wenn die Gewichtung 4 Bit beträgt verringern.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Um dieses Problem zu lösen, werden in diesem Artikel zwei Techniken verwendet: Die erste besteht darin, einen feineren Skalierungsfaktor zu verwenden, die andere darin, eine fortgeschrittenere Quantisierungsstrategie zu verwenden. Wenn wir diese Operationen miteinander kombinieren, erhalten wir Folgendes:

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Schritt 5: Wenn wir alles zusammen kombinieren, erhalten wir 244,7 Tok/s

Zuletzt kombinieren wir alle Techniken zusammen, um besser zu werden. Die Leistung beträgt 244,7 Tok /S.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Schritt sechs: Tensor-Parallelität

Bisher ging es in diesem Artikel um die Minimierung der Latenz auf einer einzelnen GPU. Tatsächlich ist es auch möglich, mehrere GPUs zu verwenden, wodurch die Latenz noch weiter verbessert wird.

Zum Glück stellt das PyTorch-Team Low-Level-Tools für Tensorparallelität bereit, die nur 150 Zeilen Code erfordern und keine Modelländerungen erfordern.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Alle zuvor genannten Optimierungen können weiterhin mit Tensorparallelität kombiniert werden, die zusammen eine int8-Quantisierung für das Llama-70B-Modell bei 55 Token/s ermöglichen.

不到1000行代码,PyTorch团队让Llama 7B提速10倍

Fassen Sie abschließend kurz den Hauptinhalt des Artikels zusammen. Auf Llama-7B verwendet dieser Artikel die Kombination aus „compile + int4 quant + speculative decoding“, um 240+ tok/s zu erreichen. Bei Llama-70B führt dieses Papier auch die Tensorparallelität ein, um etwa 80 tok/s zu erreichen, was nahe an der SOTA-Leistung liegt oder diese übertrifft.

Originallink: https://pytorch.org/blog/accelerating-generative-ai-2/

Das obige ist der detaillierte Inhalt vonMit weniger als 1.000 Codezeilen hat das PyTorch-Team Llama 7B zehnmal schneller gemacht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein Diffusionsmodell-Tutorial, das Ihre Zeit wert ist, von der Purdue University Ein Diffusionsmodell-Tutorial, das Ihre Zeit wert ist, von der Purdue University Apr 07, 2024 am 09:01 AM

Diffusion kann nicht nur besser imitieren, sondern auch „erschaffen“. Das Diffusionsmodell (DiffusionModel) ist ein Bilderzeugungsmodell. Im Vergleich zu bekannten Algorithmen wie GAN und VAE im Bereich der KI verfolgt das Diffusionsmodell einen anderen Ansatz. Seine Hauptidee besteht darin, dem Bild zunächst Rauschen hinzuzufügen und es dann schrittweise zu entrauschen. Das Entrauschen und Wiederherstellen des Originalbilds ist der Kernbestandteil des Algorithmus. Der endgültige Algorithmus ist in der Lage, aus einem zufälligen verrauschten Bild ein Bild zu erzeugen. In den letzten Jahren hat das phänomenale Wachstum der generativen KI viele spannende Anwendungen in der Text-zu-Bild-Generierung, Videogenerierung und mehr ermöglicht. Das Grundprinzip dieser generativen Werkzeuge ist das Konzept der Diffusion, ein spezieller Sampling-Mechanismus, der die Einschränkungen bisheriger Methoden überwindet.

Generieren Sie PPT mit einem Klick! Kimi: Lassen Sie zuerst die „PPT-Wanderarbeiter' populär werden Generieren Sie PPT mit einem Klick! Kimi: Lassen Sie zuerst die „PPT-Wanderarbeiter' populär werden Aug 01, 2024 pm 03:28 PM

Kimi: In nur einem Satz, in nur zehn Sekunden ist ein PPT fertig. PPT ist so nervig! Um ein Meeting abzuhalten, benötigen Sie einen PPT; um einen wöchentlichen Bericht zu schreiben, müssen Sie einen PPT vorlegen, auch wenn Sie jemanden des Betrugs beschuldigen PPT. Das College ähnelt eher dem Studium eines PPT-Hauptfachs. Man schaut sich PPT im Unterricht an und macht PPT nach dem Unterricht. Als Dennis Austin vor 37 Jahren PPT erfand, hatte er vielleicht nicht damit gerechnet, dass PPT eines Tages so weit verbreitet sein würde. Wenn wir über unsere harte Erfahrung bei der Erstellung von PPT sprechen, treiben uns Tränen in die Augen. „Es dauerte drei Monate, ein PPT mit mehr als 20 Seiten zu erstellen, und ich habe es Dutzende Male überarbeitet. Als ich das PPT sah, musste ich mich übergeben.“ war PPT.“ Wenn Sie ein spontanes Meeting haben, sollten Sie es tun

Die perfekte Kombination aus PyCharm und PyTorch: detaillierte Installations- und Konfigurationsschritte Die perfekte Kombination aus PyCharm und PyTorch: detaillierte Installations- und Konfigurationsschritte Feb 21, 2024 pm 12:00 PM

PyCharm ist eine leistungsstarke integrierte Entwicklungsumgebung (IDE) und PyTorch ist ein beliebtes Open-Source-Framework im Bereich Deep Learning. Im Bereich maschinelles Lernen und Deep Learning kann die Verwendung von PyCharm und PyTorch für die Entwicklung die Entwicklungseffizienz und Codequalität erheblich verbessern. In diesem Artikel wird detailliert beschrieben, wie PyTorch in PyCharm installiert und konfiguriert wird, und es werden spezifische Codebeispiele angehängt, um den Lesern zu helfen, die leistungsstarken Funktionen dieser beiden besser zu nutzen. Schritt 1: Installieren Sie PyCharm und Python

Einführung in fünf Stichprobenmethoden bei Aufgaben zur Generierung natürlicher Sprache und bei der Implementierung von Pytorch-Code Einführung in fünf Stichprobenmethoden bei Aufgaben zur Generierung natürlicher Sprache und bei der Implementierung von Pytorch-Code Feb 20, 2024 am 08:50 AM

Bei Aufgaben zur Generierung natürlicher Sprache ist die Stichprobenmethode eine Technik, um eine Textausgabe aus einem generativen Modell zu erhalten. In diesem Artikel werden fünf gängige Methoden erläutert und mit PyTorch implementiert. 1. GreedyDecoding Bei der Greedy-Decodierung sagt das generative Modell die Wörter der Ausgabesequenz basierend auf der Eingabesequenz Zeit Schritt für Zeit voraus. In jedem Zeitschritt berechnet das Modell die bedingte Wahrscheinlichkeitsverteilung jedes Wortes und wählt dann das Wort mit der höchsten bedingten Wahrscheinlichkeit als Ausgabe des aktuellen Zeitschritts aus. Dieses Wort wird zur Eingabe für den nächsten Zeitschritt und der Generierungsprozess wird fortgesetzt, bis eine Abschlussbedingung erfüllt ist, beispielsweise eine Sequenz mit einer bestimmten Länge oder eine spezielle Endmarkierung. Das Merkmal von GreedyDecoding besteht darin, dass die aktuelle bedingte Wahrscheinlichkeit jedes Mal die beste ist

Tutorial zur Installation von PyCharm mit PyTorch Tutorial zur Installation von PyCharm mit PyTorch Feb 24, 2024 am 10:09 AM

Als leistungsstarkes Deep-Learning-Framework wird PyTorch häufig in verschiedenen maschinellen Lernprojekten eingesetzt. Als leistungsstarke integrierte Python-Entwicklungsumgebung kann PyCharm auch bei der Umsetzung von Deep-Learning-Aufgaben eine gute Unterstützung bieten. In diesem Artikel wird die Installation von PyTorch in PyCharm ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern den schnellen Einstieg in die Verwendung von PyTorch für Deep-Learning-Aufgaben zu erleichtern. Schritt 1: Installieren Sie PyCharm. Zuerst müssen wir sicherstellen, dass wir es haben

Alle CVPR 2024-Auszeichnungen bekannt gegeben! Fast 10.000 Menschen nahmen offline an der Konferenz teil und ein chinesischer Forscher von Google gewann den Preis für den besten Beitrag Alle CVPR 2024-Auszeichnungen bekannt gegeben! Fast 10.000 Menschen nahmen offline an der Konferenz teil und ein chinesischer Forscher von Google gewann den Preis für den besten Beitrag Jun 20, 2024 pm 05:43 PM

Am frühen Morgen des 20. Juni (Pekinger Zeit) gab CVPR2024, die wichtigste internationale Computer-Vision-Konferenz in Seattle, offiziell die besten Beiträge und andere Auszeichnungen bekannt. In diesem Jahr wurden insgesamt 10 Arbeiten ausgezeichnet, darunter zwei beste Arbeiten und zwei beste studentische Arbeiten. Darüber hinaus gab es zwei Nominierungen für die beste Arbeit und vier Nominierungen für die beste studentische Arbeit. Die Top-Konferenz im Bereich Computer Vision (CV) ist die CVPR, die jedes Jahr zahlreiche Forschungseinrichtungen und Universitäten anzieht. Laut Statistik wurden in diesem Jahr insgesamt 11.532 Arbeiten eingereicht, von denen 2.719 angenommen wurden, was einer Annahmequote von 23,6 % entspricht. Laut der statistischen Analyse der CVPR2024-Daten des Georgia Institute of Technology befassen sich die meisten Arbeiten aus Sicht der Forschungsthemen mit der Bild- und Videosynthese und -generierung (Imageandvideosyn

Fünf Programmiersoftware für den Einstieg in das Erlernen der C-Sprache Fünf Programmiersoftware für den Einstieg in das Erlernen der C-Sprache Feb 19, 2024 pm 04:51 PM

Als weit verbreitete Programmiersprache ist die C-Sprache eine der grundlegenden Sprachen, die für diejenigen erlernt werden müssen, die sich mit Computerprogrammierung befassen möchten. Für Anfänger kann das Erlernen einer neuen Programmiersprache jedoch etwas schwierig sein, insbesondere aufgrund des Mangels an entsprechenden Lernwerkzeugen und Lehrmaterialien. In diesem Artikel werde ich fünf Programmiersoftware vorstellen, die Anfängern den Einstieg in die C-Sprache erleichtert und Ihnen einen schnellen Einstieg ermöglicht. Die erste Programmiersoftware war Code::Blocks. Code::Blocks ist eine kostenlose integrierte Open-Source-Entwicklungsumgebung (IDE) für

Von Bare-Metal bis hin zu einem großen Modell mit 70 Milliarden Parametern finden Sie hier ein Tutorial und gebrauchsfertige Skripte Von Bare-Metal bis hin zu einem großen Modell mit 70 Milliarden Parametern finden Sie hier ein Tutorial und gebrauchsfertige Skripte Jul 24, 2024 pm 08:13 PM

Wir wissen, dass LLM auf großen Computerclustern unter Verwendung umfangreicher Daten trainiert wird. Auf dieser Website wurden viele Methoden und Technologien vorgestellt, die den LLM-Trainingsprozess unterstützen und verbessern. Was wir heute teilen möchten, ist ein Artikel, der tief in die zugrunde liegende Technologie eintaucht und vorstellt, wie man einen Haufen „Bare-Metals“ ohne Betriebssystem in einen Computercluster für das LLM-Training verwandelt. Dieser Artikel stammt von Imbue, einem KI-Startup, das allgemeine Intelligenz durch das Verständnis der Denkweise von Maschinen erreichen möchte. Natürlich ist es kein einfacher Prozess, einen Haufen „Bare Metal“ ohne Betriebssystem in einen Computercluster für das Training von LLM zu verwandeln, aber Imbue hat schließlich erfolgreich ein LLM mit 70 Milliarden Parametern trainiert der Prozess akkumuliert

See all articles