Optimierung von Qwen3.5-9B auf RTX 3070 Mobile mit ik_llama.cpp: Konfigurationsanpassungen und Benchmarks

✍️ OpenClawRadar📅 Veröffentlicht: 25. März 2026🔗 Source
Optimierung von Qwen3.5-9B auf RTX 3070 Mobile mit ik_llama.cpp: Konfigurationsanpassungen und Benchmarks
Ad

Hardware- und Software-Einrichtung

Ein Entwickler dokumentierte seine Erfahrungen bei der Optimierung lokaler Inferenz auf einem Laptop mit einer RTX 3070 Mobile GPU (8GB VRAM, effektiv ~7,7GB nutzbar). Das System läuft unter CachyOS (Arch-basiertes Linux 6.19) mit 32GB RAM und einem Intel i7-10750H CPU. Er verwendete ik_llama.cpp (ikawrakows optimierter Fork von llama.cpp) mit dem Qwen3.5-9B Q4_K_M Modell von Jackrong/Qwen3.5-9B-Claude-4.6-Opus-Reasoning-Distilled-v2-GGUF.

Anfängliche Konfigurationsprobleme

Die anfängliche naive Konfiguration umfasste mehrere Probleme:

  • MoE-spezifische Flags (--n-cpu-moe, -ger, -ser) wurden fälschlicherweise auf ein Nicht-MoE-Modell angewendet (n_expert = 0)
  • --mlock schlug aufgrund von Speicherzuweisungslimits stillschweigend fehl (erfordert ulimit -l unlimited oder limits.conf-Eintrag)
  • Die Batch-Größe -b 4096 verbrauchte übermäßig viel VRAM (2004 MiB Compute-Puffer), fast 2GB auf einer 8GB-Karte

Diese Konfiguration erzielte ~47,8 t/s Generierungsgeschwindigkeit und ~82 t/s Prompt-Auswertung bei ~97% VRAM-Auslastung.

Optimierungsergebnisse

Nach der Behebung der Konfigurationsprobleme und der Anpassung der Batch-Größen auf -b 2048 -ub 512 (Reduzierung des Compute-Puffers auf 501 MiB) testete der Entwickler verschiedene KV-Cache-Konfigurationen:

  • Original (q4_0/q4_0, b4096): 47,8 t/s Gen, 82,6 t/s Prompt, ~97% VRAM
  • Korrigierte Flags + b2048/ub512, q8_0K/q4_0V: 48,4 t/s Gen, 189,9 t/s Prompt, ~80% VRAM
  • q8_0K/q8_0V: 50,0 t/s Gen, 213,0 t/s Prompt, ~84% VRAM

Die Prompt-Auswertungsgeschwindigkeit stieg dramatisch von ~82 auf ~213 t/s, hauptsächlich durch die Reduzierung der Batch-Größe zur Freigabe von GPU-Speicher. Während die Generierungsgeschwindigkeit nur minimale Veränderungen zeigte (~2% Unterschied zwischen q4_0 und q8_0), produzierte die q8_0/q8_0-Konfiguration bei längeren Ausgaben merklich kohärentere und vollständigere Antworten, was den zusätzlichen ~256 MiB VRAM-Verbrauch wert war.

Ad

Endgültige Konfiguration

Der optimierte Befehl für die Einzelbenutzer-Lokalserver-Nutzung:

./build/bin/llama-server \
 -m ./models/Qwen3.5-9B.Q4_K_M.gguf \
 -ngl 999 \
 -fa on \
 -c 65536 \
 -b 2048 \
 -ub 512 \
 -ctk q8_0 \
 -ctv q8_0 \
 --threads 6 \
 --threads-batch 12

Offene Fragen und zukünftige Tests

Der Entwickler identifizierte mehrere Bereiche für weitere Untersuchungen:

  • GPU-Leistungslimit-Tuning auf mobilen GPUs (Potenzial zur Reduzierung von TGP mit minimalem Geschwindigkeitsverlust, da Inferenz speicherbandbreitengebunden ist)
  • Andere 8GB-kompatible Modelle mit guter Codierungs- oder Reasoning-Leistung
  • Vergleich von ik_llama.cpp vs. Hauptlinie llama.cpp (ik-spezifische Optimierungen umfassen fused ops und Graph-Wiederverwendung)
  • Tipps für hybride SSM-Architektur (Context-Shift-Warnungen führen zu harten Stopps, wenn der Kontext voll ist, kein Sliding Window)

Die Tests verwendeten einen Prompt, der die Implementierung eines Rust-Sieve-of-Eratosthenes-Programms mit Algorithmuserklärung, Komplexitätsanalyse und Beispielausgabe für N=50 anforderte.

📖 Read the full source: r/LocalLLaMA

Ad

👀 Siehe auch