🌠QwQ-32B : Comment exécuter efficacement
Comment exécuter QwQ-32B efficacement avec nos corrections de bugs et sans générations infinies + GGUF.
Qwen a publié QwQ-32B - un modèle de raisonnement dont les performances sont comparables à DeepSeek-R1 sur de nombreux benchmarks. Cependant, les gens ont rencontré générations infinies, nombreuses répétitions, des problèmes de token <think> et des problèmes de fine-tuning. Nous espérons que ce guide aidera à déboguer et à corriger la plupart des problèmes !
Nos uploads de modèle avec nos corrections de bugs fonctionnent très bien pour le fine-tuning, vLLM et Transformers. Si vous utilisez llama.cpp et des moteurs qui utilisent llama.cpp en backend, suivez nos instructions ici pour corriger les générations sans fin.
Unsloth QwQ-32B téléversements avec nos correctifs :
⚙️ Paramètres officiels recommandés
Selon Qwen, voici les paramètres recommandés pour l'inférence :
Température de 0,6
Top_K de 40 (ou 20 à 40)
Min_P de 0,00 (optionnel, mais 0,01 fonctionne bien, la valeur par défaut de llama.cpp est 0,1)
Top_P de 0,95
Pénalité de répétition de 1,0. (1,0 signifie désactivé dans llama.cpp et transformers)
Modèle de chat :
<|im_start|>user\nCréer un jeu Flappy Bird en Python.<|im_end|>\n<|im_start|>assistant\n<think>\n
llama.cpp utilise min_p = 0.1par défaut, ce qui peut causer des problèmes. Forcez-le à 0.0.
👍 Paramètres recommandés pour llama.cpp
Nous avons remarqué que beaucoup de gens utilisent une pénalité de répétition supérieure à 1,0. Par exemple 1,1 à 1,5. Cela interfère en réalité avec les mécanismes d'échantillonnage de llama.cpp. L'objectif d'une pénalité de répétition est de pénaliser les générations répétées, mais nous avons constaté que cela ne fonctionne pas comme prévu.
Désactiver pénalité de répétition fonctionne également (c.-à-d. le régler à 1,0), mais nous avons trouvé utile de l'utiliser pour pénaliser les générations sans fin.
Pour l'utiliser, nous avons découvert que vous devez également modifier l'ordre des échantillonneurs dans llama.cpp avant d'appliquer pénalité de répétition, sinon il y aura des générations sans fin. Donc ajoutez ceci :
Par défaut, llama.cpp utilise cet ordre :
Nous réordonnons essentiellement temperature et dry, et avançons min_p. Cela signifie que nous appliquons les échantillonneurs dans cet ordre :
Si vous rencontrez toujours des problèmes, vous pouvez augmenter la--repeat-penalty 1.0 à 1.2 ou 1.3.
Crédit à @krist486 pour avoir attiré mon attention sur les directions d'échantillonnage de llama.cpp.
☀️ Dry Repetition Penalty
Nous avons étudié l'utilisation de dry penalty comme suggéré dans https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.md en utilisant une valeur de 0,8, mais nous avons en réalité constaté que cela provoque plutôt des problèmes de syntaxe surtout pour le code. Si vous rencontrez toujours des problèmes, vous pouvez augmenter lapénalité dry à 0,8.
Utiliser notre ordre d'échantillonnage inversé peut également aider si vous décidez d'utiliser dry penalty.
🦙 Tutoriel : Comment exécuter QwQ-32B dans Ollama
Installer
ollamasi vous ne l’avez pas encore fait !
Lancez le modèle ! Notez que vous pouvez appeler
ollama servedans un autre terminal s'il échoue ! Nous incluons toutes nos corrections et paramètres suggérés (temperature, min_p etc.) dansparamdans notre upload Hugging Face !
📖 Tutoriel : Comment exécuter QwQ-32B dans llama.cpp
Obtenez la dernière
llama.cppsur GitHub ici. Vous pouvez aussi suivre les instructions de compilation ci-dessous. Changez-DGGML_CUDA=ONen-DGGML_CUDA=OFFsi vous n'avez pas de GPU ou si vous voulez simplement de l'inférence CPU. Pour les appareils Apple Mac / Metal, définissez-DGGML_CUDA=OFFpuis continuez comme d'habitude - le support Metal est activé par défaut.
Téléchargez le modèle via (après avoir installé
pip install huggingface_hub hf_transfer). Vous pouvez choisir Q4_K_M, ou d'autres versions quantifiées (comme BF16 en pleine précision). Plus de versions sur : https://huggingface.co/unsloth/QwQ-32B-GGUF
Exécutez le test Flappy Bird d'Unsloth, qui enregistrera la sortie dans
Q4_K_M_yes_samplers.txtModifier
--threads 32pour le nombre de threads CPU,--ctx-size 16384pour la longueur de contexte,--n-gpu-layers 99pour le déchargement sur GPU du nombre de couches. Essayez de l'ajuster si votre GPU manque de mémoire. Supprimez-le également si vous avez uniquement une inférence CPU.Nous utilisons
--repeat-penalty 1.1et--dry-multiplier 0.5que vous pouvez ajuster.
L'entrée complète de notre https://unsloth.ai/blog/deepseekr1-dynamic blog 1.58bit est :
Le début et la fin de la sortie Python finale après suppression des parties de réflexion :
En l'exécutant, nous obtenons un jeu exécutable !

Essayez maintenant la même chose sans nos correctifs ! Donc supprimez
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"Ceci enregistrera la sortie dansQ4_K_M_no_samplers.txt
Vous obtiendrez des boucles, mais une syntaxe Python problématiquement incorrecte et de nombreux autres problèmes. Par exemple, ce qui suit semble correct, mais est faux ! C.-à-d. la ligne 39 pipes.clear() ### <<< NameError : nom 'pipes' non défini. Auriez-vous oublié d'importer 'pipes' ?
Si vous utilisez
--repeat-penalty 1.5, ça devient encore pire et plus évident, avec une syntaxe en réalité totalement incorrecte.
Vous vous demandez peut-être si c'est Q4_K_M ? B16 c.-à-d. la pleine précision devrait bien fonctionner, non ? Incorrect - les sorties échouent encore si nous n'utilisons pas notre correctif de -
-samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"lors de l'utilisation d'une pénalité de répétition.
🌄 Toujours pas fonctionnel ? Essayez Min_p = 0,1, Temperature = 1,5
Selon l'article sur Min_p https://arxiv.org/pdf/2407.01082, pour des sorties plus créatives et diverses, et si vous voyez encore des répétitions, essayez de désactiver top_p et top_k !
Une autre approche consiste à désactiver min_p directement, puisque llama.cpp utilise par défaut min_p = 0.1!
🤔 <think> token non affiché ?
Certaines personnes signalent que parce que <think> est ajouté par défaut dans le template de chat, certains systèmes n'affichent pas correctement les traces de réflexion. Vous devrez modifier manuellement le template Jinja de :
à un autre en supprimant le <think>\n à la fin. Le modèle devra maintenant ajouter manuellement <think>\n pendant l'inférence, ce qui peut ne pas toujours réussir. DeepSeek a également modifié tous les modèles pour ajouter par défaut un <think> token pour forcer le modèle à entrer en mode raisonnement.
Donc changez {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n<think>\n' }} {%- endif %} en {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %}
c.-à-d. supprimez <think>\n
Notes supplémentaires
Nous avons d'abord pensé peut-être :
Le contexte de QwQ n'était pas nativement 128K, mais plutôt 32K avec l'extension YaRN. Par exemple dans le fichier readme pour https://huggingface.co/Qwen/QwQ-32B, nous voyons :
Nous avons essayé de substituer la gestion YaRN de llama.cpp, mais rien n'a changé.
Nous avons également testé si les IDs du tokenizer correspondaient entre llama.cpp et les Transformers classiques grâce à @kalomaze. Ils correspondaient, donc ce n'était pas la cause.
Nous fournissons nos résultats expérimentaux ci-dessous :
✏️ Corrections de bugs du tokenizer
Nous avons trouvé quelques problèmes impactant spécifiquement le fine-tuning ! Le token EOS est correct, mais le token PAD devrait probablement plutôt être
"<|vision_pad|>" Nous l'avons mis à jour dans : https://huggingface.co/unsloth/QwQ-32B/blob/main/tokenizer_config.json
🛠️ Quantisations dynamiques 4 bits
Nous avons également téléversé des quantisations dynamiques 4 bits qui augmentent la précision par rapport aux quantisations 4 bits naïves ! Nous joignons l'analyse du graphique d'erreur de quantification QwQ pour les erreurs de quantification d'activation et de poids :

Nous avons téléversé des quantisations dynamiques 4 bits sur : https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bit
Depuis vLLM 0.7.3 (20 février 2025) https://github.com/vllm-project/vllm/releases/tag/v0.7.3, vLLM prend désormais en charge le chargement des quantisations dynamiques 4 bits d'Unsloth !
Tous nos GGUF sont sur https://huggingface.co/unsloth/QwQ-32B-GGUF!
Mis à jour
Ce contenu vous a-t-il été utile ?

