🌠QwQ-32B: Effektiv Ausführen
Wie man QwQ-32B effektiv mit unseren Bugfixes und ohne endlose Generierungen + GGUFs ausführt.
Qwen veröffentlichte QwQ-32B – ein Reasoning-Modell mit vergleichbarer Leistung wie DeepSeek-R1 bei vielen Benchmarks. Allerdings haben Nutzer erlebt unendliche Generierungen, viele Wiederholungen, <think>-Token-Probleme und Feinabstimmungsprobleme. Wir hoffen, dass dieser Leitfaden beim Debuggen und Beheben der meisten Probleme hilft!
Unsere Modell-Uploads mit unseren Fehlerbehebungen funktionieren hervorragend für Fine-Tuning, vLLM und Transformers. Wenn Sie llama.cpp und Engines verwenden, die llama.cpp als Backend nutzen, folgen Sie unseren Anweisungen hier um endlose Generierungen zu beheben.
Unsloth QwQ-32B-Uploads mit unseren Fehlerbehebungen:
⚙️ Offiziell empfohlene Einstellungen
Laut QwenDies sind die empfohlenen Einstellungen für die Inferenz:
Temperatur von 0,6
Top_K von 40 (oder 20 bis 40)
Min_P von 0,00 (optional, aber 0,01 funktioniert gut, der Standard in llama.cpp ist 0,1)
Top_P von 0.95
Repetition Penalty von 1.0. (1.0 bedeutet deaktiviert in llama.cpp und transformers)
Chat-Vorlage:
<|im_start|>user\nErstelle ein Flappy-Bird-Spiel in Python.<|im_end|>\n<|im_start|>assistant\n<think>\n
llama.cpp verwendet min_p = 0.1standardmäßig, was Probleme verursachen kann. Setze es zwingend auf 0.0.
👍 Empfohlene Einstellungen für llama.cpp
Wir haben bemerkt, dass viele Leute einen Wiederholungs-Bestrafungswert größer als 1.0 verwenden. Zum Beispiel 1.1 bis 1.5. Das beeinträchtigt tatsächlich die Sampling-Mechanismen von llama.cpp. Ziel einer Wiederholungsbestrafung ist es, wiederholte Generierungen zu bestrafen, aber wir haben festgestellt, dass dies nicht wie erwartet funktioniert.
Ausschalten von Wiederholungs-Bestrafungswert funktioniert auch (d. h. auf 1.0 setzen), aber wir fanden es nützlich, es zu verwenden, um endlose Generierungen zu bestrafen.
Um es zu verwenden, haben wir festgestellt, dass Sie auch die Reihenfolge der Sampler in llama.cpp bearbeiten müssen, sodass sie vor dem Anwenden von Wiederholungs-Bestrafungswertstehen, andernfalls wird es endlose Generierungen geben. Fügen Sie also dies hinzu:
Standardmäßig verwendet llama.cpp diese Reihenfolge:
Wir vertauschen im Wesentlichen temperature und dry und rücken min_p nach vorne. Das bedeutet, wir wenden die Sampler in dieser Reihenfolge an:
Wenn Sie weiterhin auf Probleme stoßen, können Sie die--repeat-penalty 1.0 auf 1.2 oder 1.3 erhöhen.
Dank an @krist486 dafür, dass er mich auf die llama.cpp-Sampling-Richtungen aufmerksam gemacht hat.
☀️ Dry-Repetition-Penalty
Wir untersuchten die Verwendung von dry penalty wie in https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.md mit einem Wert von 0.8, aber wir stellten tatsächlich fest, dass dies eher Syntaxprobleme verursacht, besonders beim Programmieren. Wenn Sie weiterhin Probleme haben, können Sie diedry penalty auf 0.8 erhöhen.
Die Nutzung unserer getauschten Sampling-Reihenfolge kann ebenfalls helfen, wenn Sie sich entscheiden, dry penalty.
🦙 Tutorial: Wie man QwQ-32B in Ollama ausführt
Installieren Sie
ollamafalls du es noch nicht getan hast!
Starten Sie das Modell! Beachten Sie, dass Sie
ollama servein einem anderen Terminal aufrufen können, wenn es fehlschlägt! Wir fügen alle unsere Fixes und empfohlenen Parameter (temperature, min_p usw.) inparamin unserem Hugging Face-Upload hinzu!
📖 Tutorial: Wie man QwQ-32B in llama.cpp ausführt
Holen Sie sich die neueste
llama.cppauf GitHub hier. Sie können auch den unten stehenden Build-Anweisungen folgen. Ändern Sie-DGGML_CUDA=ONzu-DGGML_CUDA=OFFwenn Sie keine GPU haben oder nur CPU-Inferenz wünschen.
Laden Sie das Modell herunter über (nach Installation von
pip install huggingface_hub hf_transfer). Du kannst Q4_K_M wählen oder andere quantisierte Versionen (wie BF16 in voller Präzision). Weitere Versionen unter: https://huggingface.co/unsloth/QwQ-32B-GGUF
Führen Sie Unsloths Flappy-Bird-Test aus, der die Ausgabe speichert in
Q4_K_M_yes_samplers.txtBearbeiten
--threads 32für die Anzahl der CPU-Threads bearbeiten,--ctx-size 16384für die Kontextlänge,--n-gpu-layers 99für das GPU-Offloading für wie viele Schichten. Versuchen Sie, es anzupassen, wenn Ihre GPU nicht mehr genügend Speicher hat. Entfernen Sie es auch, wenn Sie nur CPU-Inferenz haben.Wir verwenden
--repeat-penalty 1.1und--dry-multiplier 0.5die Sie anpassen können.
Die vollständige Eingabe aus unserem https://unsloth.ai/blog/deepseekr1-dynamic 1.58bit Blog ist:
Der Anfang und das Ende der finalen Python-Ausgabe nach Entfernung der Denk-Teile:
Beim Ausführen erhalten wir ein lauffähiges Spiel!

Versuchen Sie nun dasselbe ohne unsere Fixes! Entfernen Sie also
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"Das speichert die Ausgabe inQ4_K_M_no_samplers.txt
Sie werden etwas Schleifenbildung bekommen, aber problematisch falsche Python-Syntax und viele andere Probleme. Zum Beispiel sieht das Folgende korrekt aus, ist aber falsch! Z. B. Zeile 39 pipes.clear() ### <<< NameError: name 'pipes' ist nicht definiert. Haben Sie vergessen, 'pipes' zu importieren?
Wenn Sie
--repeat-penalty 1.5, verwenden, wird es noch schlimmer und offensichtlicher, mit tatsächlich völlig falscher Syntax.
Vielleicht fragen Sie sich, ob es Q4_K_M ist? B16, also volle Genauigkeit, sollte doch funktionieren, oder? Falsch – die Ausgaben scheitern erneut, wenn wir nicht unseren Fix von -
-samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"bei Verwendung einer Wiederholungsbestrafung.
🌄 Funktioniert es immer noch nicht? Versuchen Sie Min_p = 0.1, Temperature = 1.5
Laut dem Min_p-Paper https://arxiv.org/pdf/2407.01082, für kreativere und vielfältigere Ausgaben, und wenn Sie weiterhin Wiederholungen sehen, versuchen Sie, top_p und top_k zu deaktivieren!
Ein anderer Ansatz ist, min_p direkt zu deaktivieren, da llama.cpp standardmäßig min_p = 0.1!
🤔 <think>-Token nicht angezeigt?
Einige Leute berichten, dass, weil <think> standardmäßig in der Chat-Vorlage hinzugefügt wird, einige Systeme die Denktraces nicht korrekt ausgeben. Sie müssen die Jinja-Vorlage manuell von:
zu einer anderen ändern, indem Sie das <think>\n am Ende entfernen. Das Modell muss nun während der Inferenz manuell <think>\n hinzufügen, was nicht immer gelingt. DeepSeek hat ebenfalls alle Modelle bearbeitet, um standardmäßig ein <think> Token hinzuzufügen, um das Modell in den Reasoning-Modus zu zwingen.
Also ändere {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n<think>\n' }} {%- endif %} zu {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %}
d. h. entferne <think>\n
Zusätzliche Hinweise
Zuerst dachten wir vielleicht:
QwQs Kontextlänge wäre nicht nativ 128K, sondern eher 32K mit YaRN-Erweiterung. Zum Beispiel sehen wir in der Readme-Datei für https://huggingface.co/Qwen/QwQ-32B, folgendes:
Wir haben versucht, die YaRN-Handhabung von llama.cpp zu überschreiben, aber es änderte sich nichts.
Wir haben auch getestet, ob die Tokenizer-IDs zwischen llama.cpp und normalen Transformers übereinstimmen dank @kalomaze. Sie stimmten überein, daher war dies nicht die Ursache.
Wir liefern unsere experimentellen Ergebnisse unten:
✏️ Tokenizer-Fehlerbehebungen
Wir fanden einige Probleme, die speziell das Fine-Tuning beeinflussen! Das EOS-Token ist korrekt, aber das PAD-Token sollte wahrscheinlich eher
"<|vision_pad|>" sein. Wir aktualisierten es in: https://huggingface.co/unsloth/QwQ-32B/blob/main/tokenizer_config.json
🛠️ Dynamische 4-Bit-Quants
Wir haben außerdem dynamische 4-Bit-Quants hochgeladen, die die Genauigkeit gegenüber naiven 4-Bit-Quantisierungen erhöhen! Wir fügen die QwQ-Quantisierungsfehler-Plot-Analyse sowohl für Aktivierungs- als auch für Gewicht-Quantisierungsfehler bei:

Wir haben dynamische 4-Bit-Quants hochgeladen nach: https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bit
Seit vLLM 0.7.3 (20. Februar 2025) https://github.com/vllm-project/vllm/releases/tag/v0.7.3, unterstützt vLLM jetzt das Laden von Unsloth dynamischen 4-Bit-Quants!
Alle unsere GGUFs sind auf https://huggingface.co/unsloth/QwQ-32B-GGUF!
Zuletzt aktualisiert
War das hilfreich?

