Aller au contenu principal

Pratique

Guide pratique : faire tourner un LLM local en production

Commandes concrètes llama.cpp, vLLM et Ollama, flags clés et configurations réelles pour servir Qwen3.6 sur GPU discret ou mémoire unifiée.

Par Antoine Michéa, Fondateur & ingénieur infrastructure ·

Passons aux commandes concrètes : installation, téléchargement de modèles et configurations d’inférence éprouvées. Les exemples ci-dessous reprennent les flags réellement utilisés lors de nos tests sur deux profils matériels, l’un à mémoire unifiée, l’autre sur GPU discret.

Installer llama.cpp

# Cloner le dépôt officiel llama.cpp (ggml-org sur GitHub)
git clone ggml-org/llama.cpp
cd llama.cpp

# CPU uniquement
cmake -B build
cmake --build build --config Release

# CUDA (GPU NVIDIA)
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release

# Vulkan (iGPU AMD, ex. Strix Halo)
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config Release

Télécharger un modèle GGUF

from huggingface_hub import snapshot_download

# Qwen3.6-27B dense, Q4_K_XL Unsloth (~18 Go, idéal GPU discret)
snapshot_download(
    repo_id="unsloth/Qwen3.6-27B-Instruct-GGUF",
    local_dir="./models/qwen3.6-27b",
    allow_patterns=["*UD-Q4_K_XL*"],
)

# Qwen3.6-35B-A3B MoE (35B total, seulement 3B actifs/token)
snapshot_download(
    repo_id="unsloth/Qwen3.6-35B-A3B-Instruct-GGUF",
    local_dir="./models/qwen3.6-35b-a3b",
    allow_patterns=["*Q5_K_XL*"],
)

Lancer l’inférence avec llama.cpp

# Configuration optimisée : Flash Attention + KV cache quantifié
./llama-cli -m models/qwen3.6-27b-UD-Q4_K_XL.gguf \
    --conversation \
    --ctx-size 65536 \
    --ngl 999 \
    -fa 1 \
    --cache-type-k q8_0 \
    --cache-type-v q8_0 \
    --temp 0.7 --top-p 0.8 --top-k 20 \
    --repeat-penalty 1.05

# Serveur OpenAI-compatible
./llama-server -m models/qwen3.6-27b-UD-Q4_K_XL.gguf \
    --port 8080 --ngl 999 -fa 1

Cas mémoire unifiée (Strix Halo)

Sur Strix Halo (iGPU Radeon 8060S, 128 Gio UMA partagée CPU/GPU), trois flags sont déterminants. Le --no-mmap est obligatoire : le memory-mapping fait crasher l’allocation sur UMA.

./llama-server -m models/qwen3.6-35b-a3b-Q5_K_XL.gguf \
    --ngl 999 \
    -fa 1 \
    --no-mmap \
    --cache-type-k q8_0 --cache-type-v q8_0 \
    --parallel 2 \
    --n-predict 32768 \
    --ctx-size 65536

Cette config sert le MoE Q5_K_XL (~26 Go) autour de 73 t/s via le backend Vulkan, avec deux requêtes parallèles.

Décodage spéculatif

Un petit modèle « draft » propose plusieurs tokens d’avance que le grand modèle valide en un seul passage, ce qui accélère le decode de 2 à 3 fois sur le code et le texte structuré.

./llama-server -m models/qwen3.6-27b-UD-Q4_K_XL.gguf \
    --model-draft models/qwen3-0.6b-Q4_K_M.gguf \
    --spec-draft-n-max 3 \
    --ngl 999 -fa 1 --ctx-size 32768

Offloading automatique avec --fit on

Depuis fin 2025, --fit on détermine automatiquement le nombre optimal de couches à placer sur GPU : il charge un maximum sur le GPU puis bascule le reste sur CPU, ce qui évite de régler --ngl à la main.

./llama-cli -m model.gguf --fit on -fa 1

Flags llama.cpp essentiels

RôleFlagEffet
Offload GPU--ngl 999Place toutes les couches sur GPU
Auto-offload--fit onRépartition GPU/CPU optimale
Flash Attention-fa 1Active Flash Attention
KV cache K/V--cache-type-k/v q8_0Quantifie le cache (-50 % mémoire)
UMA--no-mmapObligatoire sur mémoire unifiée
Parallélisme--parallel 2Requêtes concurrentes
Budget sortie--n-predict 32768Tokens max générés
Draft spéculatif--spec-draft-n-max 3Tokens proposés par le draft

Servir avec vLLM (RTX 3090)

Sur RTX 3090 (24 Go GDDR6X, ~23,56 Gio utilisables), vLLM sert Qwen3.6-27B en int4 AutoRound avec un KV cache en fp8 pour pousser le contexte à 81k.

vllm serve Qwen/Qwen3.6-27B-Instruct-int4-AutoRound \
    --quantization auto-round \
    --kv-cache-dtype fp8_e5m2 \
    --max-model-len 81920 \
    --gpu-memory-utilization 0.92 \
    --port 8000

Flash Attention est activé par défaut sous vLLM, et le continuous batching maximise le throughput en multi-utilisateurs.

Démarrage rapide avec Ollama

# Installer Ollama via le script officiel ollama.com
curl -fsSL ollama.com/install.sh | sh

ollama run qwen3.6:27b        # dense, 256K ctx natif
ollama run qwen3.6:35b-a3b    # MoE économique

# Modèle GGUF personnalisé
cat > Modelfile << 'EOF'
FROM ./models/qwen3.6-27b-UD-Q4_K_XL.gguf
PARAMETER temperature 0.7
PARAMETER top_p 0.8
PARAMETER top_k 20
PARAMETER num_ctx 32768
EOF
ollama create mon-modele -f Modelfile
ollama run mon-modele

Ollama active Flash Attention automatiquement mais n’expose pas la quantification du KV cache : pour ce niveau de contrôle, passez par llama.cpp ou vLLM.

Conseil final

Commencez avec les valeurs par défaut puis ajustez : la config optimale dépend du matériel, du modèle et du cas d’usage. Mesurez les tokens/s et la qualité des réponses pour trouver votre point d’équilibre.

Pour aller plus loin

← Toutes les découvertes