Benchmark Lokale LLM Modelle

GitHub-Repo des Projekts

Hintergrundgeschichte

Ich habe LLM Speed Benchmark (LLMSB) während meiner Zeit als Teilzeit-Ingenieurpraktikant bei Anarchy (YC W23) entwickelt. LLMSB ist ein Benchmarking-Tool zur Bewertung der Leistung eines LLM-Modells. Es verwendet die transformers Bibliothek von HuggingFace zum Laden und Ausführen eines LLM-Modells und misst:

  • Gesamtlaufzeit
  • Tokens pro Sekunde
  • Allgemeine Hardware-Spezifikationen
  • CPU-Nutzung (aktuelle Frequenz & Nutzung der Kerne % über die Zeit)
  • RAM-Nutzung (RAM & Swap über die Zeit)
  • GPU-Nutzung (Last, Speicherauslastung & Temperatur über die Zeit)

HIER ist ein Beispiel für einen Benchmark-Lauf für das codellama-13b-oasst-sft-v10 Modell, das auf einem H100 läuft. Ich besitze persönlich eine Nvidia RTX 2070 Ti, die 8 GB VRAM hat. Leider reicht 8 GB VRAM für die meisten modernen LLM-Modelle nicht aus, um mit einem Modell zu interagieren. Aus diesem Grund habe ich RunPod verwendet, um GPU(s) zu “mieten” und meine Benchmarks auf bestimmten Modellen auszuführen.

Dies war die Hintergrundgeschichte/Entstehungsgeschichte von LLMSB. Da das Projekt Open Source ist, können Sie den Code HIER einsehen. Unten habe ich die README aus dem Repo eingefügt, falls Sie sie sich ansehen möchten.

Über

🚧 LLM Speed Benchmark (LLMSB) befindet sich derzeit in der Beta (v0). Bitte verwenden Sie dies nicht in der Produktion oder verwenden Sie es auf eigenes Risiko. Wir beheben noch einige Probleme und verbessern die Funktionalität. Wenn Sie auf Fehler stoßen oder Vorschläge haben, melden Sie diese bitte unter ISSUES. Ihr Feedback ist von unschätzbarem Wert!

LLM Speed Benchmark (LLMSB) ist ein Benchmarking-Tool zur Bewertung der Leistung von LLM-Modellen auf verschiedenen Hardware-Plattformen. Das ultimative Ziel ist es, einen umfassenden Datensatz zusammenzustellen, der die Leistung von LLM-Modellen auf verschiedenen Systemen detailliert beschreibt, damit die Benutzer effektiver das richtige LLM-Modell(e) für ihre Projekte auswählen können.

Einschränkungen

LLMSB ist auf v0, daher hat es Einschränkungen:

  • Nur für den Betrieb auf debian-basierten Betriebssystemen konzipiert, d.h. es ist nicht für Windows konzipiert. Dies liegt daran, dass LLMSB neofetch und nvidia-smi verwendet, um Metriken im Hintergrund zu sammeln, und die Dateipfadlogik auf Unix-Betriebssystemen basiert.
  • Aufgrund der Art und Weise, wie Metriken aufgezeichnet werden, kann es bis zu 1 Sekunde dauern, bis der Metrik-Sammler eine Sammlung durchführt. Das bedeutet, dass wir im besten Fall Hardwaremetriken alle 1 Sekunde sammeln können.
  • LLMSB verwendet nur HuggingFace, um Modelle zu laden und auszuführen. Das funktioniert derzeit, aber das Ziel ist es, LLMSB mehrere Frameworks zu unterstützen, nicht nur HuggingFace.
  • Derzeit werden alle Modelle durch die Logik in der Funktion run_llm() ausgeführt, die sich in src/hf.py befindet, wo die Funktionen AutoTokenizer() und AutoModelForCausalLM() verwendet werden, um ein Modell zu laden und auszuführen. Das funktioniert, schränkt jedoch ein, wie wir spezifische Modelle konfigurieren/optimieren können. In Anbetracht dessen ist das Ziel, separate Klassen für jedes beliebte Modell zu erstellen und die modell-spezifischen Klassen von HuggingFace, wie LlamaTokenizer & LlamaForCausalLM, zu nutzen.
  • LLMSB sammelt nur allgemeine, hochrangige Metriken. In Zukunft möchten wir niedrigere Metriken sammeln. Wir denken, dass dies teilweise mit Pytorchs Profiler-Wrapper möglich ist.

Beispielausgaben

22. November 2023

LLMSB wurde auf einer L40 und H100 GPU über RunPod getestet. In diesen Benchmarks wurden die Modelle llama-2-7b-hf, codellama-13b-oasst-sft-v10 und mpt-7b getestet. Überprüfen Sie die Ergebnisse HIER. Wenn Fehler/Probleme festgestellt werden, melden Sie diese bitte unter ISSUES.

Einrichtung

  1. Erstellen und aktivieren Sie die Python-Umgebung:

    python3 -m venv env
    source env/bin/activate
    
  2. Installieren Sie die Paketabhängigkeiten (mit APT):

    apt -y update
    apt install -y vim
    apt install -y neofetch
    
  3. Installieren Sie die Python-Abhängigkeiten:

    pip3 install transformers
    pip3 install psutil
    pip3 install gputil
    pip3 install tabulate
    pip3 install sentencepiece
    pip3 install protobuf
    
  4. Installieren Sie Pytorch

    # installiere die stabile Pytorch-Version für Linux mit CUDA 12.1:
    pip3 install torch torchvision torchaudio
    
  5. Installieren Sie LLM-VM:

    pip install llm-vm
    
  6. (optional) Wenn Sie Modelle wie LLAMA verwenden, benötigen Sie ein HuggingFace-Zugriffstoken. Richten Sie Ihr Zugriffstoken HIER ein und speichern Sie Ihr Token in Ihrer Konsole, indem Sie den folgenden Befehl ausführen:

    huggingface-cli login
    

So führen Sie es aus

  1. Führen Sie die Schritte im Abschnitt Einrichtung aus.

  2. Um Ihr Set zu konfigurieren, müssen Sie eine JSON-Datei mit den folgenden Parametern erstellen (hier ist ein Beispiel):

    • HINWEIS: Nicht jedes Framework unterstützt die gleichen Parameter
    {
      "model": "bigscience/bloom-560m",   # der Pfad/Repo des Modells auf HuggingFace (https://huggingface.co/models)
      "prompt": "Hallo Welt!",             # der Prompt, den Sie in das LLM-Modell eingeben möchten
      "device": "cuda:0",                   # das Gerät, auf dem Sie das LLM-Modell ausführen möchten (GPU/CPU)
      "max_length": 50,                     # die maximale Länge der generierten Tokens
      "temperature": 0.9,                   # Temperaturwert für das LLM-Modell
      "top_k": 50,                          # Top-k-Wert für das LLM-Modell
      "top_p": 0.9,                         # Top-p-Wert für das LLM-Modell
      "num_return_sequences": 1,            # die Anzahl der unabhängig ausgeführten Instanzen des Modells
      "time_delay": 0,                      # die Zeitverzögerung (Sekunden), die der Metrik-Sammler pro Iteration warten wird
      "model_start_pause": 1,               # die Zeit (Sekunden), die der Test WARTEN wird, BEVOR das LLM-Modell ausgeführt wird
      "model_end_pause": 1                  # die Zeit (Sekunden), die der Test WARTEN wird, NACHDEM das LLM-Modell fertig ist,
      "framework": "llm-vm"                 # der Name des Frameworks/Bibliothek, das Sie verwenden möchten, um das Modell auszuführen
    }
    
  3. Verwenden Sie den Pfad zur Konfigurationsdatei, die Sie im vorherigen Schritt erstellt haben, und führen Sie Folgendes aus, um den Benchmark zu starten (wählen Sie eine Option):

    # führe einen Benchmark aus
    python3 run.py --config ./configs/llmvm_test.json
    
    # führe mehr als einen Benchmark aus (in diesem Fall 3)
    python3 run.py --config ./configs/llmvm_test.json --loops 3
    
  4. Nachdem der Benchmark abgeschlossen ist, überprüfen Sie die endgültigen Ergebnisse in einer Datei, die ungefähr so aussehen sollte:

    report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
    

Einrichtung von RunPod:

  1. Richten Sie RunPod ein, richten Sie Ihr SSH-Zertifikat/-Schlüssel ein und starten Sie einen Pod. Sie können auf Ihre Pod(s) auf RunPods Konsole-Seite zugreifen.

  2. Klicken Sie auf die Schaltfläche “Verbinden”, um die SSH-Verbindungsinformationen zu erhalten. Diese Informationen sollten ungefähr so aussehen:

    ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example
    
    • Dieser Befehl wird wie folgt formatiert:

      ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
      
  3. Mit dem Befehl in Schritt #2 sollten Sie in der Lage sein, sich in den Pod einzuloggen und die GPU zu verwenden, die Sie in diesem RunPod-Pod ausgewählt haben.

  4. Wenn Sie eine Datei vom Pod auf Ihren lokalen Computer kopieren möchten, führen Sie den Befehl in diesem Format aus (dies bezieht sich auf die Variablen, die in Schritt #2 gezeigt werden):

    scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>
    
    • Hier ist ein Beispiel für einen solchen Befehl:

      scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
      
  5. Nachdem Sie mit dem Pod fertig sind, schalten Sie ihn aus oder pausieren Sie ihn. Aber Vorsicht, wenn Sie ihn pausieren, werden Sie trotzdem belastet, nur viel weniger.

Tolle Quellen: