🌠QwQ-32B: Wie man effektiv ausführt
Wie man QwQ-32B effektiv mit unseren Bugfixes und ohne endlose Generierungen + GGUFs betreibt.
Qwen hat QwQ-32B veröffentlicht - ein Reasoning-Modell mit einer auf vielen Benchmarks. Allerdings erleben Leute 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 Bugfixes funktionieren großartig 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 Bugfixes:
⚙️ Offizielle empfohlene Einstellungen
Laut Qwen, dies sind die empfohlenen Einstellungen für das Inferenzieren:
Temperatur von 0,6
Top_K von 40 (oder 20 bis 40)
Min_P von 0,00 (optional, aber 0,01 funktioniert gut, der llama.cpp-Standard 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. Erzwinge 0.0.
👍 Empfohlene Einstellungen für llama.cpp
Wir bemerkten, dass viele Leute einen Repetition Penalty größer als 1.0 verwenden. Zum Beispiel 1.1 bis 1.5. Das stört tatsächlich die Sampling-Mechanismen von llama.cpp. Das Ziel einer Repetition Penalty ist es, wiederholte Generierungen zu bestrafen, aber wir haben festgestellt, dass das nicht wie erwartet funktioniert.
Das Deaktivieren von Repetition Penalty funktioniert auch (z. B. Einstellung auf 1.0), aber wir fanden es nützlich, es zu verwenden, um endlose Generierungen zu bestrafen.
Um es zu verwenden, stellten wir fest, dass Sie außerdem die Reihenfolge der Sampler in llama.cpp bearbeiten müssen, sodass sie vor der Anwendung von Repetition Penaltysteht, andernfalls wird es endlose Generierungen geben. Also fügen Sie dies hinzu:
Standardmäßig verwendet llama.cpp diese Reihenfolge:
Wir vertauschen im Wesentlichen temperature und dry und verschieben min_p nach vorne. Das bedeutet, wir wenden die Sampler in dieser Reihenfolge an:
Wenn Sie immer noch auf Probleme stoßen, können Sie die--repeat-penalty 1.0 auf 1.2 oder 1.3 erhöhen.
Dank an @krist486 für den Hinweis auf die llama.cpp-Sampling-Richtungen.
☀️ 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 unter Verwendung eines Wertes von 0.8, aber wir fanden heraus, dass dies eher Syntaxprobleme verursacht, insbesondere beim Codieren. Wenn Sie weiterhin Probleme haben, können Sie diedry penalty auf 0.8 erhöhen.
Die Nutzung unserer umgestellten Sampling-Reihenfolge kann ebenfalls helfen, falls Sie sich entscheiden, dry penalty.
🦙 Tutorial: Wie man QwQ-32B in Ollama ausführt
In Ollama ausführen
Installieren Siefalls Sie es noch nicht getan haben!
Führen Sie das Modell aus! Beachten Sie, dass Sie
Führen Sie das Modell aus! Beachten Sie, dass Siein einem anderen Terminal aufrufen können, wenn es fehlschlägt! Wir fügen alle unsere Fixes und vorgeschlagenen Parameter (temperature, min_p etc.) inparamparams
📖 Tutorial: Wie man QwQ-32B in llama.cpp ausführt
Hole dir die neueste
llama.cppauf GitHub hier. Du kannst auch den Build-Anweisungen unten folgen. Ändere-DGGML_CUDA=ONzu-DGGML_CUDA=OFFwenn du keine GPU hast oder nur CPU-Inferenz möchtest. Für Apple Mac / Metal-Geräte, setze-DGGML_CUDA=OFFdann wie gewohnt fort - Metal-Unterstützung ist standardmäßig aktiviert.
Laden Sie das Modell herunter (nach der Installation
pip install huggingface_hub hf_transfer). Sie können Q4_K_M wählen oder andere quantisierte Versionen (wie BF16 Vollprä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
Sie können--threads 32für die Anzahl der CPU-Threads bearbeiten,--ctx-size 16384--n-gpu-layers 99--n-gpu-layers 2Wir 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 Entfernen der Denk-Teile:
Beim Ausführen erhalten wir ein ausführbares Spiel!

Versuchen Sie nun dasselbe ohne unsere Fixes! Entfernen Sie also
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"Dies wird die Ausgabe speichern inQ4_K_M_no_samplers.txt
Sie werden einige Schleifen erhalten, 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.
Sie fragen sich vielleicht, ist es vielleicht Q4_K_M? B16 also Vollpräzision sollte doch funktionieren, oder? Falsch - die Ausgaben scheitern erneut, wenn wir unseren Fix von -
-samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"bei Verwendung einer Repetition Penalty.
🌄 Funktioniert 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 falls 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 Denkspuren nicht korrekt ausgeben. Sie müssen die Jinja-Vorlage manuell bearbeiten von:
zu einer anderen, 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 so bearbeitet, dass standardmäßig ein <think> Token hinzugefügt wird, um das Modell in den Reasoning-Modus zu zwingen.
Also ändern Sie {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n<think>\n' }} {%- endif %} zu {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %}
d. h. entfernen Sie <think>\n
Zusätzliche Hinweise
Wir dachten zunächst vielleicht:
QwQs Kontextlänge wäre nicht nativ 128K, sondern eher 32K mit YaRN-Erweiterung. Zum Beispiel in der Readme-Datei für https://huggingface.co/Qwen/QwQ-32B, sehen wir:
Wir versuchten, llama.cpps YaRN-Handhabung zu überschreiben, aber nichts änderte sich.
Wir haben auch getestet, ob Tokenizer-IDs zwischen llama.cpp und normalen Transformers übereinstimmen, dank @kalomaze. Sie stimmten überein, also war das nicht die Ursache.
Wir stellen unsere experimentellen Ergebnisse unten zur Verfügung:
✏️ Tokenizer-Bugfixes
Wir fanden einige Probleme, die speziell das Fine-Tuning betreffen! 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 auch dynamische 4-Bit-Quants hochgeladen, die die Genauigkeit gegenüber naiven 4-Bit-Quantisierungen erhöhen! Wir fügen die QwQ-Quantisierungsfehler-Analyseplots sowohl für Aktivierungs- als auch für Gewichtsquantisierungsfehler 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 bei https://huggingface.co/unsloth/QwQ-32B-GGUF!
Zuletzt aktualisiert
War das hilfreich?

