Methodik für konsistentes Benchmarking von lokalen vs. Cloud-LLMs

✍️ OpenClawRadar📅 Veröffentlicht: 14. April 2026🔗 Source
Methodik für konsistentes Benchmarking von lokalen vs. Cloud-LLMs
Ad

Ein Entwickler auf r/LocalLLaMA hat eine Methodik beschrieben, um konsistente Benchmark-Zahlen beim Vergleich lokaler LLMs mit Cloud-APIs zu erhalten. Damit werden häufige Frustrationen aufgrund von Äpfel-mit-Birnen-Vergleichen durch unterschiedliche Latenzen, Bewertungen und Methodiken angegangen.

Das Kernproblem beim Benchmarking

Naive Vergleiche, die Anfragen sowohl an lokale als auch Cloud-Modelle senden, messen unterschiedliche Dinge. Cloud-APIs beinhalten Warteschlangen, Lastverteilung und Routing. Lokale Modelle beinhalten Aufwärmphase, Batching und GPU-Konkurrenz. Die umgesetzte Lösung besteht darin, ausschließlich sequenzielle Anfragen zu verwenden. Obwohl langsamer – ein 60-Aufrufe-Benchmark dauert ~3 Minuten statt 45 Sekunden – stellt dies sicher, dass jede Messung sauber ist und die Inferenzzeit von der Wartezeit isoliert.

Der Messaufbau

Der Aufbau nutzt ZenMux als einheitlichen Endpunkt, der eine Basis-URL für vier Modelle bereitstellt: GPT-5.4, Claude Sonnet 4.6, Gemini 3.1 Pro und ein lokales Llama 4 quant. Der Ansatz funktioniert mit jedem OpenAI-kompatiblen Endpunkt, wie zum Beispiel:

  • llama.cpp server: curl http://localhost:8080/v1/chat/completions ...
  • vLLM: curl http://localhost:8000/v1/chat/completions ...
  • Ollama: curl http://localhost:11434/v1/chat/completions ...

Der Schlüssel liegt darin, denselben Client-Code, dieselben Timeout-Einstellungen und dieselbe Wiederholungslogik für alles zu verwenden.

Ad

Wie die Messung funktioniert

Das System ist in fünf Module strukturiert: YAML-Konfiguration → BenchRunner → AIClient → Analyzer → Reporter.

Die YAML-Konfiguration definiert Aufgaben und Modelle. Beispiel:

suite: coding-benchmark
models:
  - gpt-5.4
  - claude-sonnet-4.6
  - gemini-3.1-pro
  - llama-4
runs_per_model: 3
tasks:
  - name: fizzbuzz
    prompt: "Write a Python function that prints FizzBuzz for numbers 1-100"
  - name: refactor-suggestion
    prompt: "Given this code, suggest improvements:\n\ndef calc(x):\n if x == 0: return 0\n if x == 1: return 1\n return calc(x-1) + calc(x-2)"

Der BenchRunner nimmt das kartesische Produkt von Aufgaben × Modelle × Durchläufe und ruft die API sequenziell auf, wobei Latenz, Prompt-Tokens und Completion-Tokens aufgezeichnet werden.

Der Bewertungsteil

Die Qualitätsbewertung ist regelbasiert, nicht LLM-als-Richter, um Selbstpräferenz-Bias zu vermeiden und Reproduzierbarkeit sicherzustellen. Die Funktion _quality_score nutzt drei Signale:

  • Antwortlänge: 50–3000 Zeichen ergeben 4.0 Punkte, kürzere Antworten 1.0, längere 3.0.
  • Formatierung: Das Vorhandensein von Aufzählungspunkten fügt bis zu 3.0 Punkte hinzu.
  • Code-Präsenz: Das Erkennen von Codeblöcken oder Funktionsdefinitionen fügt 2.0 Punkte hinzu.

Die maximale Punktzahl beträgt 9.0. Dies trennt zuverlässig „gute strukturierte Antwort“ von „Müll/leer/halluziniert“ für die relative Rangfolge. Für die Latenz wird auch die 95. Perzentil-Antwortzeit (P95) berechnet.

📖 Read the full source: r/LocalLLaMA

Ad

👀 Siehe auch