Zephyrnet-Logo

Gradient macht LLM-Benchmarking mit AWS Inferentia | kostengünstig und mühelos Amazon Web Services

Datum:

Dies ist ein Gastbeitrag, der gemeinsam mit Michael Feil bei Gradient verfasst wurde.

Die Bewertung der Leistung großer Sprachmodelle (LLMs) ist ein wichtiger Schritt des Vorschulungs- und Feinabstimmungsprozesses vor der Bereitstellung. Je schneller und häufiger Sie die Leistung validieren können, desto höher sind die Chancen, dass Sie die Leistung des Modells verbessern können.

At GradientWir arbeiten an der kundenspezifischen LLM-Entwicklung und haben erst kürzlich unsere gestartet KI-Entwicklungslaborund bietet Unternehmensorganisationen einen personalisierten End-to-End-Entwicklungsservice zum Aufbau privater, benutzerdefinierter LLMs und Co-Piloten für künstliche Intelligenz (KI). Im Rahmen dieses Prozesses bewerten wir regelmäßig die Leistung unserer Modelle (optimiert, trainiert und offen) anhand offener und proprietärer Benchmarks. Während wir mit dem AWS-Team zusammenarbeiten, um unsere Modelle zu trainieren AWS-Training, stellten wir fest, dass wir sowohl auf VRAM als auch auf die Verfügbarkeit von GPU-Instanzen beschränkt waren, wenn es um das Mainstream-Tool für die LLM-Bewertung ging. lm-evaluation-harness. Mit diesem Open-Source-Framework können Sie verschiedene generative Sprachmodelle für verschiedene Bewertungsaufgaben und Benchmarks bewerten. Es wird von Bestenlisten wie verwendet Gesicht umarmen für öffentliches Benchmarking.

Um diese Herausforderungen zu meistern, haben wir uns entschieden, unsere Lösung zu entwickeln und als Open Source bereitzustellen – die Integration AWS-Neuron, die Bibliothek dahinter AWS-Inferenz und Trainium, in lm-evaluation-harness. Diese Integration ermöglichte ein Benchmarking v-alpha-tross, eine frühe Version unseres Albatross-Modells, gegen andere öffentliche Modelle während des Trainingsprozesses und danach.

Im Kontext läuft diese Integration als neue Modellklasse innerhalb von lm-evaluation-harness und abstrahiert die Inferenz von Token und die Log-Likelihood-Schätzung von Sequenzen, ohne die eigentliche Bewertungsaufgabe zu beeinträchtigen. Die Entscheidung, unsere interne Testpipeline nach zu verschieben Amazon Elastic Compute-Cloud (Amazon EC2) Inf2-Instanzen (unterstützt von AWS Inferentia2) ermöglichte uns den Zugriff auf bis zu 384 GB gemeinsam genutzten Beschleunigerspeicher und passte problemlos in alle unsere aktuellen öffentlichen Architekturen. Durch den Einsatz von AWS Spot Instances konnten wir ungenutzte EC2-Kapazität in der AWS Cloud nutzen und so Kosteneinsparungen von bis zu 90 % gegenüber den On-Demand-Preisen erzielen. Dies minimierte die Testzeit und ermöglichte es uns, häufiger zu testen, da wir mehrere Instanzen testen konnten, die sofort verfügbar waren, und die Instanzen freigeben konnten, wenn wir fertig waren.

In diesem Beitrag geben wir eine detaillierte Aufschlüsselung unserer Tests, der Herausforderungen, denen wir begegnet sind, und ein Beispiel für die Verwendung des Testsystems auf AWS Inferentia.

Benchmarking auf AWS Inferentia2

Das Ziel dieses Projekts bestand darin, identische Ergebnisse zu generieren, wie in der Abbildung gezeigt Öffnen Sie die LLM-Bestenliste (für viele auf Hugging Face verfügbare CausalLM-Modelle) und behält gleichzeitig die Flexibilität, es mit privaten Benchmarks zu vergleichen. Weitere Beispiele verfügbarer Modelle finden Sie unter AWS Inferentia und Trainium auf Hugging Face.

Die Codeänderungen, die erforderlich sind, um ein Modell von Hugging Face-Transformatoren auf Hugging Face zu portieren Optimales Neuron Die Python-Bibliothek war ziemlich niedrig. Weil lm-evaluation-harness verwendet wird AutoModelForCausalLM, es gibt einen Rückgang bei der Ersatzverwendung NeuronModelForCausalLM. Ohne ein vorkompiliertes Modell wird das Modell sofort automatisch kompiliert, was einen Job um 15–60 Minuten verlängern kann. Dies gab uns die Flexibilität, Tests für jede AWS Inferentia2-Instanz und jedes unterstützte CausalLM-Modell bereitzustellen.

Die Ergebnisse

Aufgrund der Art und Weise, wie die Benchmarks und Modelle funktionieren, haben wir nicht erwartet, dass die Ergebnisse bei verschiedenen Durchläufen genau übereinstimmen. Basierend auf der Standardabweichung sollten sie jedoch sehr nahe beieinander liegen, und das haben wir immer wieder gesehen, wie in der folgenden Tabelle gezeigt. Die ersten Benchmarks, die wir auf AWS Inferentia2 durchgeführt haben, wurden alle durch die Bestenliste von Hugging Face bestätigt.

In lm-evaluation-harnessEs gibt zwei Hauptströme, die von verschiedenen Tests verwendet werden: generate_until und loglikelihood. Der GSM8K-Test verwendet hauptsächlich generate_until um Antworten zu generieren, genau wie bei der Inferenz. Loglikelihood wird hauptsächlich beim Benchmarking und Testen verwendet und untersucht die Wahrscheinlichkeit, dass unterschiedliche Ergebnisse erzielt werden. Beide funktionieren in Neuron, aber das loglikelihood Die Methode in SDK 2.16 verwendet zusätzliche Schritte zur Bestimmung der Wahrscheinlichkeiten und kann zusätzliche Zeit in Anspruch nehmen.

Lm-evaluation-harness Ergebnisse
Hardwarekonfiguration Originalsystem AWS Inferentia inf2.48xlarge
Zeit mit „batch_size=1“, um mistralai/Mistral-7B-Instruct-v0.1 auf gsm8k auszuwerten 103 Мinuten 32 Мinuten
Ergebnis auf gsm8k (Get-Answer – Exact_Match mit Standard) 0.3813 – 0.3874 (± 0.0134) 0.3806 – 0.3844 (± 0.0134)

Beginnen Sie mit Neuron und lm-evaluation-harness

Der Code in diesem Abschnitt kann Ihnen bei der Verwendung helfen lm-evaluation-harness und führen Sie es gegen unterstützte Modelle auf Hugging Face aus. Um einige verfügbare Modelle zu sehen, besuchen Sie AWS Inferentia und Trainium auf Hugging Face.

Wenn Sie mit der Ausführung von Modellen auf AWS Inferentia2 vertraut sind, stellen Sie möglicherweise fest, dass dies nicht der Fall ist num_cores Einstellung übergeben. Unser Code erkennt, wie viele Kerne verfügbar sind und übergibt diese Zahl automatisch als Parameter. Dadurch können Sie den Test unabhängig von der verwendeten Instanzgröße mit demselben Code ausführen. Möglicherweise stellen Sie auch fest, dass wir uns auf das Originalmodell beziehen und nicht auf eine von Neuron kompilierte Version. Der Harness stellt das Modell bei Bedarf automatisch für Sie zusammen.

Die folgenden Schritte zeigen Ihnen, wie Sie den Farbverlauf bereitstellen gradientai/v-alpha-tross Modell, das wir getestet haben. Wenn Sie mit einem kleineren Beispiel auf einer kleineren Instanz testen möchten, können Sie das verwenden mistralai/Mistral-7B-v0.1 Modell.

  1. Das Standardkontingent für die Ausführung von On-Demand-Inf-Instanzen ist 0, daher sollten Sie eine Erhöhung über Servicekontingente beantragen. Fügen Sie eine weitere Anfrage für alle Inf-Spot-Instance-Anfragen hinzu, damit Sie mit Spot-Instances testen können. Für dieses Beispiel benötigen Sie ein Kontingent von 192 vCPUs mit einer inf2.48xlarge-Instanz oder ein Kontingent von 4 vCPUs für eine einfache inf2.xlarge-Instanz (wenn Sie das Mistral-Modell bereitstellen). Kontingente sind AWS-regionsspezifisch, also stellen Sie sicher, dass Sie eine Anfrage stellen us-east-1 or us-west-2.
  2. Entscheiden Sie sich für Ihre Instanz basierend auf Ihrem Modell. Weil v-alpha-tross Da es sich um eine 70B-Architektur handelt, haben wir uns für die Verwendung einer inf2.48xlarge-Instanz entschieden. Stellen Sie eine inf2.xlarge bereit (für das 7B Mistral-Modell). Wenn Sie ein anderes Modell testen, müssen Sie möglicherweise Ihre Instanz je nach Größe Ihres Modells anpassen.
  3. Stellen Sie die Instanz mit bereit Hugging Face DLAMI-Version 20240123, damit alle notwendigen Treiber installiert sind. (Der angezeigte Preis beinhaltet die Instanzkosten und es fallen keine zusätzlichen Softwaregebühren an.)
  4. Passen Sie die Laufwerksgröße auf 600 GB an (100 GB für Mistral 7B).
  5. Klonen und installieren lm-evaluation-harness auf der Instanz. Wir geben einen Build an, damit wir wissen, dass etwaige Abweichungen auf Modelländerungen und nicht auf Test- oder Codeänderungen zurückzuführen sind.
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
# optional: pick specific revision from the main branch version to reproduce the exact results
git checkout 756eeb6f0aee59fc624c81dcb0e334c1263d80e3
# install the repository without overwriting the existing torch and torch-neuronx installation
pip install --no-deps -e . 
pip install peft evaluate jsonlines numexpr pybind11 pytablewriter rouge-score sacrebleu sqlitedict tqdm-multiprocess zstandard hf_transfer

  1. Führen Sie lm_eval mit dem Modelltyp hf-neuron und stellen Sie sicher, dass Sie einen Link zum Pfad zurück zum Modell auf Hugging Face haben:
# e.g use mistralai/Mistral-7B-v0.1 if you are on inf2.xlarge
MODEL_ID=gradientai/v-alpha-tross

python -m lm_eval --model "neuronx" --model_args "pretrained=$MODEL_ID,dtype=bfloat16" --batch_size 1 --tasks gsm8k

Wenn Sie das vorherige Beispiel mit Mistral ausführen, sollten Sie die folgende Ausgabe erhalten (auf der kleineren inf2.xlarge könnte die Ausführung 250 Minuten dauern):

███████████████████████| 1319/1319 [32:52<00:00,  1.50s/it]
neuronx (pretrained=mistralai/Mistral-7B-v0.1,dtype=bfloat16), gen_kwargs: (None), limit: None, num_fewshot: None, batch_size: 1
|Tasks|Version|  Filter  |n-shot|  Metric   |Value |   |Stderr|
|-----|------:|----------|-----:|-----------|-----:|---|-----:|
|gsm8k|      2|get-answer|     5|exact_match|0.3806|±  |0.0134|

Aufräumen

Wenn Sie fertig sind, stoppen Sie unbedingt die EC2-Instances über die Amazon EC2-Konsole.

Zusammenfassung

Die Teams von Gradient und Neuron freuen sich, mit dieser Version eine breitere Akzeptanz der LLM-Bewertung zu sehen. Probieren Sie es selbst aus und führen Sie das beliebteste Evaluierungsframework auf AWS Inferentia2-Instanzen aus. Sie können jetzt bei der Nutzung von der On-Demand-Verfügbarkeit von AWS Inferentia2 profitieren maßgeschneiderte LLM-Entwicklung von Gradient. Beginnen Sie damit mit dem Hosten von Modellen auf AWS Inferentia Tutorials.


Über die Autoren

Michael Feil ist KI-Ingenieur bei Gradient und arbeitete zuvor als ML-Ingenieur bei Rodhe & Schwarz und als Forscher am Max-Planck-Institut für Intelligente Systeme und bei Bosch Rexroth. Michael ist ein führender Mitwirkender an verschiedenen Open-Source-Inferenzbibliotheken für LLMs und Open-Source-Projekte wie StarCoder. Michael hat einen Bachelor-Abschluss in Mechatronik und Informatik vom KIT und einen Master-Abschluss in Robotik von der Technischen Universität München.

Jim Burtoft ist Senior Startup Solutions Architect bei AWS und arbeitet direkt mit Startups wie Gradient zusammen. Jim ist CISSP, Teil der AWS AI/ML Technical Field Community, Neuron-Botschafter und arbeitet mit der Open-Source-Community zusammen, um die Nutzung von Inferentia und Trainium zu ermöglichen. Jim hat einen Bachelor-Abschluss in Mathematik von der Carnegie Mellon University und einen Master-Abschluss in Wirtschaftswissenschaften von der University of Virginia.

spot_img

Neueste Intelligenz

spot_img