🌠QwQ-32B : Comment exécuter efficacement
Comment exécuter QwQ-32B efficacement avec nos corrections de bugs et sans générations interminables + GGUF.
Qwen a publié QwQ-32B - un modèle de raisonnement dont les performances sont comparables à DeepSeek-R1 sur de nombreux benchmarks. Cependant, des utilisateurs ont rencontré générations infinies, de nombreuses répétitions, des problèmes avec le 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 modèles téléversés avec nos corrections de bogues fonctionnent très bien pour le fine-tuning, vLLM et Transformers. Si vous utilisez llama.cpp et des moteurs qui utilisent llama.cpp comme backend, suivez nos instructions ici pour corriger les générations sans fin.
Les uploads Unsloth QwQ-32B avec nos correctifs :
⚙️ Paramètres recommandés officiels
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\nCreate a Flappy Bird game in Python.<|im_end|>\n<|im_start|>assistant\n<think>\n
llama.cpp utilise min_p = 0.1par défaut, ce qui pourrait causer des problèmes. Forcez-le à 0.0.
👍 Paramètres recommandés pour llama.cpp
Nous avons remarqué que beaucoup de gens utilisent un 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 aussi (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 constaté que vous devez aussi 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 encore 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.
☀️ Pénalité de répétition Dry
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 encore des problèmes, vous pouvez augmenter ladry penalty à 0.8.
Utiliser notre ordre d'échantillonnage échangé peut aussi aider si vous décidez d'utiliser dry penalty.
🦙 Tutoriel : Comment exécuter QwQ-32B dans Ollama
Installez
ollamasi vous ne l'avez pas encore fait !
Exécutez 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 téléversement Hugging Face !
📖 Tutoriel : Comment exécuter QwQ-32B dans llama.cpp
Obtenez le dernier
llama.cppsur GitHub ici. Vous pouvez suivre les instructions de compilation ci-dessous également. Changez-DGGML_CUDA=ONen-DGGML_CUDA=OFFsi vous n'avez pas de GPU ou si vous voulez simplement une inférence CPU.
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 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.txtéditer
--threads 32pour le nombre de threads CPU,--ctx-size 16384pour la longueur de contexte,--n-gpu-layers 99pour le déchargement GPU sur le nombre de couches. Essayez de l'ajuster si votre GPU manque de mémoire. Supprimez-le également si vous n'avez qu'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 !

Maintenant essayez la même chose sans nos correctifs ! Donc retirez
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"Cela enregistrera la sortie dansQ4_K_M_no_samplers.txt
Vous obtiendrez des boucles, mais une syntaxe Python incorrecte problématique et bien d'autres problèmes. Par exemple ce qui suit semble correct, mais est faux ! C.-à-d. ligne 39 pipes.clear() ### <<< NameError: name 'pipes' is not defined. Avez-vous oublié d'importer 'pipes' ?
Si vous utilisez
--repeat-penalty 1.5, cela 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 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 par défaut utilise min_p = 0.1!
🤔 Le token <think> n'est pas affiché ?
Certaines personnes rapportent 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 éditer manuellement le template Jinja de :
à un autre en retirant 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 aussi édité tous les modèles pour ajouter par défaut un <think> token pour forcer le modèle à passer en modèle de 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. retirez <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 remplacer la gestion YaRN de llama.cpp, mais rien n'a changé.
Nous avons aussi testé si les IDs du tokenizer correspondaient entre llama.cpp et les Transformers normaux grâce à @kalomaze. Ils correspondaient, donc ce n'était pas la cause.
Nous fournissons nos résultats expérimentaux ci-dessous :
✏️ Corrections de bogues 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
🛠️ Quantifications dynamiques 4 bits
Nous avons aussi téléversé des quantifications 4 bits dynamiques qui augmentent la précision par rapport aux quantifications 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 quantifications 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 quantifications dynamiques 4 bits d'Unsloth !
Tous nos GGUF sont à https://huggingface.co/unsloth/QwQ-32B-GGUF!
Mis à jour
Ce contenu vous a-t-il été utile ?

