Optimisation de Qwen3.5-9B sur RTX 3070 Mobile avec ik_llama.cpp : Réglages de configuration et Benchmarks

✍️ OpenClawRadar📅 Publié: March 25, 2026🔗 Source
Optimisation de Qwen3.5-9B sur RTX 3070 Mobile avec ik_llama.cpp : Réglages de configuration et Benchmarks
Ad

Configuration Matérielle et Logicielle

Un développeur a documenté son expérience d'optimisation de l'inférence locale sur un ordinateur portable équipé d'un GPU RTX 3070 Mobile (8 Go de VRAM, effectivement ~7,7 Go utilisables). Le système fonctionne sous CachyOS (Linux 6.19 basé sur Arch) avec 32 Go de RAM et un processeur Intel i7-10750H. Il a utilisé ik_llama.cpp (la version optimisée d'ikawrakow de llama.cpp) avec le modèle Qwen3.5-9B Q4_K_M provenant de Jackrong/Qwen3.5-9B-Claude-4.6-Opus-Reasoning-Distilled-v2-GGUF.

Problèmes de Configuration Initiale

La configuration initiale naïve présentait plusieurs problèmes :

  • Les drapeaux spécifiques aux MoE (--n-cpu-moe, -ger, -ser) étaient incorrectement appliqués à un modèle non-MoE (n_expert = 0)
  • --mlock échouait silencieusement en raison de limites d'allocation mémoire (nécessite ulimit -l unlimited ou une entrée dans limits.conf)
  • La taille de lot -b 4096 consommait une quantité excessive de VRAM (tampon de calcul de 2004 Mio), soit près de 2 Go sur une carte de 8 Go

Cette configuration produisait une vitesse de génération d'environ 47,8 t/s et une évaluation de prompt d'environ 82 t/s avec la VRAM à ~97 %.

Résultats de l'Optimisation

Après avoir corrigé les problèmes de configuration et ajusté les tailles de lot à -b 2048 -ub 512 (réduisant le tampon de calcul à 501 Mio), le développeur a testé différentes configurations de cache KV :

  • Originale (q4_0/q4_0, b4096) : 47,8 t/s génération, 82,6 t/s prompt, ~97 % VRAM
  • Drapeaux corrigés + b2048/ub512, q8_0K/q4_0V : 48,4 t/s génération, 189,9 t/s prompt, ~80 % VRAM
  • q8_0K/q8_0V : 50,0 t/s génération, 213,0 t/s prompt, ~84 % VRAM

La vitesse d'évaluation des prompts a augmenté considérablement, passant d'environ 82 à environ 213 t/s, principalement grâce à la réduction de la taille des lots pour libérer de la mémoire GPU. Bien que la vitesse de génération ait montré un changement minimal (différence d'environ 2 % entre q4_0 et q8_0), la configuration q8_0/q8_0 a produit des réponses nettement plus cohérentes et complètes sur les sorties longues, justifiant l'utilisation supplémentaire d'environ 256 Mio de VRAM.

Ad

Configuration Finale

La commande optimisée pour une utilisation en serveur local mono-utilisateur :

./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

Questions Ouvertes et Tests Futurs

Le développeur a identifié plusieurs domaines nécessitant des investigations supplémentaires :

  • Réglage de la limite de puissance du GPU sur les GPU mobiles (potentiel pour réduire le TGP avec une perte de vitesse minimale puisque l'inférence est limitée par la bande passante mémoire)
  • Autres modèles compatibles 8 Go avec de bonnes performances en codage ou raisonnement
  • Comparaison d'ik_llama.cpp par rapport à la version principale de llama.cpp (les optimisations spécifiques à ik incluent des opérations fusionnées et la réutilisation de graphes)
  • Conseils pour l'architecture hybride SSM (les avertissements de changement de contexte provoquent des arrêts brusques lorsque le contexte est plein, pas de fenêtre glissante)

Les tests ont utilisé un prompt demandant l'implémentation d'un programme Rust du Crible d'Ératosthène avec explication de l'algorithme, analyse de complexité et exemple de sortie pour N=50.

📖 Lire la source complète : r/LocalLLaMA

Ad

👀 See Also