🌠QwQ-32B: 効果的な実行方法
当社の修正版と、無限生成を避ける設定、GGUFを使ってQwQ-32Bを効果的に実行する方法。
Qwen は QwQ-32B をリリースしました。これは多くの ベンチマークで DeepSeek-R1 に匹敵する性能を持つ推論モデルです。しかし、人々は 無限生成, 大量の繰り返し、<think> トークンの問題やファインチューニングの問題を経験しています。このガイドが、ほとんどの問題のデバッグと修正に役立つことを願っています!
私たちの修正を含むモデルアップロードは、ファインチューニング、vLLM、Transformers でうまく動作します。llama.cpp や llama.cpp をバックエンドとして使うエンジンを使用している場合は、無限生成を修正するためにこちらの 手順に従ってください 。
私たちの修正を含む Unsloth の QwQ-32B アップロード:
⚙️ 公式推奨設定
によると Qwen、推論に推奨される設定は以下のとおりです:
Temperature 0.6
Top_K を 40 に設定(または 20 から 40)
Min_P 0.00(任意ですが、0.01 でもうまく動作します。llama.cpp のデフォルトは 0.1 です)
Top_P 0.95
Repetition Penalty 1.0。(1.0は llama.cpp と transformers では無効を意味します)
チャットテンプレート:
<|im_start|>user\nPython で Flappy Bird ゲームを作成してください。<|im_end|>\n<|im_start|>assistant\n<think>\n
llama.cpp は min_p = 0.1がデフォルトで、問題を引き起こす可能性があります。0.0 に強制してください。
👍 llama.cpp に推奨される設定
多くの人が 繰り返しペナルティ を 1.0 より大きく設定していることに気づきました。たとえば 1.1 から 1.5 です。これは実際には llama.cpp のサンプリング機構に干渉します。繰り返しペナルティの目的は、繰り返し生成を罰することですが、これが期待どおりには機能しないことが分かりました。
をオフにする 繰り返しペナルティ のも有効です(つまり 1.0 に設定することです)が、無限生成を抑制するために使うのは有用だと分かりました。
これを使うには、適用前に llama.cpp のサンプラーの順序も編集する必要があることが分かりました 繰り返しペナルティ。そうしないと無限生成が起こります。なので、これを追加してください:
デフォルトでは、llama.cpp は次の順序を使います:
実質的に temperature と dry の順序を入れ替え、min_p を前方へ移動します。つまり、次の順序でサンプラーを適用します:
それでも問題が続く場合は、--repeat-penalty 1.0 を 1.2 または 1.3 に上げてみてください。
ご助力に感謝します @krist486 llama.cpp のサンプリングの手順について教えてくれたことに感謝します。
☀️ Dry 繰り返しペナルティ
私たちは dry penalty の使用を調査しました。 https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.md で提案されているように 0.8 を使ってみましたが、実際にはこれが 特にコーディングで構文の問題を引き起こすことが分かりました。それでも問題が続く場合は、dry penalty を 0.8 に上げてください。
サンプリング順序を入れ替える私たちの方法も、 dry penalty.
🦙 チュートリアル: QwQ-32B を Ollama で実行する方法
インストール
ollamaまだなら、
モデルを実行してください!失敗した場合は別のターミナルから
ollama serveを呼び出せます。私たちの修正と推奨パラメータ(temperature、min_p など)はparamに含まれています!
📖 チュートリアル: QwQ-32B を llama.cpp で実行する方法
最新の
llama.cppを GitHub こちらから取得してください。以下のビルド手順に従うこともできます。-DGGML_CUDA=ONを-DGGML_CUDA=OFFに変更してください。GPU がない場合、または CPU 推論だけを使いたい場合です。 Apple Mac / Metal デバイスの場合、次を設定して-DGGML_CUDA=OFFその後は通常どおり続けてください - Metal サポートは既定で有効です。
モデルのダウンロード(
pip install huggingface_hub hf_transfer)。Q4_K_M、または他の量子化版(たとえばBF16のフル精度)を選べます。その他の版はこちら: https://huggingface.co/unsloth/QwQ-32B-GGUF
Unsloth の Flappy Bird テストを実行すると、出力は
Q4_K_M_yes_samplers.txt編集
--threads 32CPU スレッド数を--ctx-size 16384コンテキスト長を--n-gpu-layers 99GPU オフロードする層数を指定します。GPU のメモリ不足になる場合は調整してみてください。CPU のみで推論する場合は、これも削除してください。に保存されます
--repeat-penalty 1.1および--dry-multiplier 0.5を使用しています。これは調整可能です。
私たちの https://unsloth.ai/blog/deepseekr1-dynamic 1.58bitブログからの全文入力は次のとおりです:
思考部分を削除した後の最終的な Python 出力の冒頭と末尾:
実行すると、動作可能なゲームが得られます!

今度は、修正なしで同じことを試してみましょう!なので削除してください
--samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"これにより出力はQ4_K_M_no_samplers.txt
いくらかループしますが、 問題のある不正確な Python 構文 やその他多くの問題が発生します。たとえば、下のものは正しく見えますが、間違っています!つまり 39 行目 pipes.clear() ### <<< NameError: name 'pipes' is not defined. Did you forget to import 'pipes'?
もし
--repeat-penalty 1.5を使うと、さらに悪化してより明白になり、実際には完全に誤った構文になります。
Q4_K_M だからでしょうか?B16、つまりフル精度なら問題なく動くはずですよね? いいえ、違います。私たちの修正である -
-samplers "top_k;top_p;min_p;temperature;dry;typ_p;xtc"を適用しないと、出力は再び失敗します。
🌄 まだ動作しませんか? Min_p = 0.1、Temperature = 1.5 を試してください
Min_p の論文によると https://arxiv.org/pdf/2407.01082、より創造的で多様な出力のために、まだ繰り返しが見える場合は top_p と top_k を無効にしてみてください!
別の方法として、 min_p を直接無効にすることもできます。llama.cpp はデフォルトで min_p = 0.1!
🤔 <think> トークンが表示されない?
一部の人は、チャットテンプレートに <think> がデフォルトで追加されるため、いくつかのシステムでは思考トレースが正しく出力されないと報告しています。Jinja テンプレートを手動で次のように編集する必要があります:
から別のものへ、末尾の <think>\n を削除することで。これでモデルは推論時に手動で <think>\n を追加する必要がありますが、常に成功するとは限りません。DeepSeek もすべてのモデルを編集して、デフォルトで <think> トークンを追加し、モデルを推論モデルに入るよう強制しています。
したがって、次のように変更してください {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n<think>\n' }} {%- endif %} を {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- endif %}
つまり <think>\n
追加メモ
最初は、次のように考えました:
QwQ のコンテキスト長はネイティブには 128K ではなく、YaRN 拡張付きの 32K なのではないかと。たとえば https://huggingface.co/Qwen/QwQ-32Bの readme ファイルでは、次のように見えます:
llama.cpp の YaRN 処理を上書きしてみましたが、何も変わりませんでした。
トークナイザー ID が llama.cpp と通常の Transformers で一致するかも、 @kalomazeのご助力により確認しました。一致していたので、これが原因ではありませんでした。
以下に私たちの実験結果を示します:
✏️ トークナイザーのバグ修正
ファインチューニングに特に影響するいくつかの問題も見つかりました!EOS トークンは正しいですが、PAD トークンはむしろ
"<|vision_pad|>" にすべきだと思われます。私たちは以下で更新しました: https://huggingface.co/unsloth/QwQ-32B/blob/main/tokenizer_config.json
🛠️ ダイナミック 4-bit 量子化
また、単純な 4bit 量子化より精度を向上させるダイナミック 4bit 量子化もアップロードしました!活性化量子化誤差と重み量子化誤差の両方について、QwQ の量子化誤差プロット分析を添付します:

ダイナミック 4-bit 量子化を次にアップロードしました: https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bit
vLLM 0.7.3 以降(2025年2月20日) https://github.com/vllm-project/vllm/releases/tag/v0.7.3、vLLM は Unsloth のダイナミック 4bit 量子化の読み込みをサポートするようになりました!
すべての GGUF はこちらにあります https://huggingface.co/unsloth/QwQ-32B-GGUF!
最終更新
役に立ちましたか?

