🌠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。(llama.cpp と transformers では 1.0 は無効を意味します)
チャットテンプレート:
<|im_start|>user\nCreate a Flappy Bird game in Python.<|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(ドライペナルティ).
🦙 チュートリアル:OllamaでQwQ-32Bを実行する方法
インストールしてください
ollamaまだの場合はぜひ!
モデルを実行してください!失敗した場合は別のターミナルで
ollama serveを呼び出せることに注意してください!我々のすべての修正と推奨パラメータ(temperature、min_pなど)はparamにHugging Faceのアップロードで含めています!
📖 チュートリアル:llama.cppでQwQ-32Bを実行する方法
最新の
llama.cppを GitHub で入手できます。下のビルド手順に従うこともできます。変更してください-DGGML_CUDA=ONから-DGGML_CUDA=OFFGPU がない場合や CPU 推論のみを行いたい場合は。
(以下をインストールした後に)モデルをダウンロードします
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 32でCPUスレッド数を編集できます、--ctx-size 16384でコンテキスト長を、--n-gpu-layers 99で何層をGPUにオフロードするかを指定します。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
<think>を削除した完全なjinjaテンプレート部分
追加の注記
最初は次のように考えました: QwQのコンテキスト長はネイティブで128Kではなく、YaRN拡張で32Kであるのではないか。例えばREADMEファイルでは、https://huggingface.co/Qwen/QwQ-32B
"type": "yarn"
--override-kv qwen2.rope.scaling.attn_factor=float:1.13862943649292 \ またRMS Layernorm の epsilon が間違っているのではないかとも考えました — 1e-5ではなく1e-6かもしれません。例えば これ
はrms_norm_eps=1e-06 またRMS Layernorm の epsilon が間違っているのではないかとも考えました — 1e-5ではなく1e-6かもしれません。例えば これ、一方でrms_norm_eps=1e-05
--override-kv qwen2.attention.layer_norm_rms_epsilon=float:0.000001 \ またトークナイザのIDがllama.cppと通常のTransformersで一致するかを@kalomazeの助力でテストしました。一致していたので、これが原因ではありませんでした。
以下に我々の実験結果を示します:
✏️ トークナイザのバグ修正
微調整に特に影響を与えるいくつかの問題も見つけました!EOSトークンは正しいですが、PADトークンはおそらく代わりに
"<|vision_pad|>" にすべきです。我々は次でこれを更新しました: https://huggingface.co/unsloth/QwQ-32B/blob/main/tokenizer_config.json
🛠️ ダイナミック4ビット量子化
また、単純な4ビット量子化より精度を向上させるダイナミック4ビット量子化もアップロードしました!活性化と重みの量子化誤差の両方に対するQwQの量子化誤差プロット解析を添付します:

ダイナミック4ビット量子化を次にアップロードしました: 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.3vLLMはUnslothのダイナミック4ビット量子化の読み込みをサポートするようになりました!
我々のすべてのGGUFは次にあります https://huggingface.co/unsloth/QwQ-32B-GGUF!
最終更新
役に立ちましたか?

