🌠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 Benchmarksarrow-up-right. 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!

circle-info

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 Qwenarrow-up-right, 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

circle-exclamation

👍 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 @krist486arrow-up-right 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.mdarrow-up-right 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

  1. In Ollama ausführen Installieren Sie falls Sie es noch nicht getan haben!

  1. 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.) in param params

📖 Tutorial: Wie man QwQ-32B in llama.cpp ausführt

  1. Hole dir die neueste llama.cpp auf GitHub hierarrow-up-right. Du kannst auch den Build-Anweisungen unten folgen. Ändere -DGGML_CUDA=ON zu -DGGML_CUDA=OFF wenn du keine GPU hast oder nur CPU-Inferenz möchtest. Für Apple Mac / Metal-Geräte, setze -DGGML_CUDA=OFF dann wie gewohnt fort - Metal-Unterstützung ist standardmäßig aktiviert.

  1. 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-GGUFarrow-up-right

  1. Führen Sie Unsloths Flappy Bird-Test aus, der die Ausgabe speichert in Q4_K_M_yes_samplers.txt

  2. Bearbeiten Sie können --threads 32 für die Anzahl der CPU-Threads bearbeiten, --ctx-size 16384 --n-gpu-layers 99 --n-gpu-layers 2

  3. Wir verwenden --repeat-penalty 1.1 und --dry-multiplier 0.5 die Sie anpassen können.

Die vollständige Eingabe aus unserem https://unsloth.ai/blog/deepseekr1-dynamicarrow-up-right 1.58bit-Blog ist:

Der Anfang und das Ende der finalen Python-Ausgabe nach Entfernen der Denk-Teile:

chevron-rightVollständige finale Python-Ausgabe (Denk-Teile entfernt):hashtag
  1. Beim Ausführen erhalten wir ein ausführbares Spiel!

  1. 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 in Q4_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?

  1. Wenn Sie --repeat-penalty 1.5, verwenden, wird es noch schlimmer und offensichtlicher, mit tatsächlich völlig falscher Syntax.

  1. 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.01082arrow-up-right, 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

chevron-rightVollständige Jinja-Vorlage mit entfernter <think>\n-Teilhashtag

Zusätzliche Hinweise

Wir dachten zunächst vielleicht:

  1. 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-32Barrow-up-right, sehen wir:

Wir versuchten, llama.cpps YaRN-Handhabung zu überschreiben, aber nichts änderte sich.

  1. Wir dachten auch, dass das RMS-Layernorm-Epsilon falsch sein könnte - nicht 1e-5, sondern vielleicht 1e-6. Zum Beispiel diesarrow-up-right hat rms_norm_eps=1e-06, während diesarrow-up-right hat rms_norm_eps=1e-05 steht. Wir haben es ebenfalls überschrieben, aber es funktionierte nicht:

  1. Wir haben auch getestet, ob Tokenizer-IDs zwischen llama.cpp und normalen Transformers übereinstimmen, dank @kalomazearrow-up-right. Sie stimmten überein, also war das nicht die Ursache.

Wir stellen unsere experimentellen Ergebnisse unten zur Verfügung:

BF16 Vollpräzision ohne Sampling-Fix
BF16 Vollpräzision mit Sampling-Fix
Q4_K_M Präzision ohne Sampling-Fix
Q4_K_M Präzision mit Sampling-Fix

✏️ Tokenizer-Bugfixes

🛠️ 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-4bitarrow-up-right

Seit vLLM 0.7.3 (20. Februar 2025) https://github.com/vllm-project/vllm/releases/tag/v0.7.3arrow-up-right, unterstützt vLLM jetzt das Laden von Unsloth dynamischen 4-Bit-Quants!

Alle unsere GGUFs sind bei https://huggingface.co/unsloth/QwQ-32B-GGUFarrow-up-right!

Zuletzt aktualisiert

War das hilfreich?