For the complete documentation index, see llms.txt. This page is also available as Markdown.

🌠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 に推奨される設定

多くの人が 繰り返しペナルティ を 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 で実行する方法

  1. インストール ollama まだなら、

  1. モデルを実行してください!失敗した場合は別のターミナルから ollama serveを呼び出せます。私たちの修正と推奨パラメータ(temperature、min_p など)は param に含まれています!

📖 チュートリアル: QwQ-32B を llama.cpp で実行する方法

  1. 最新の llama.cppGitHub こちらから取得してください。以下のビルド手順に従うこともできます。 -DGGML_CUDA=ON-DGGML_CUDA=OFF に変更してください。GPU がない場合、または CPU 推論だけを使いたい場合です。 Apple Mac / Metal デバイスの場合、次を設定して -DGGML_CUDA=OFF その後は通常どおり続けてください - Metal サポートは既定で有効です。

  1. モデルのダウンロード( pip install huggingface_hub hf_transfer )。Q4_K_M、または他の量子化版(たとえばBF16のフル精度)を選べます。その他の版はこちら: https://huggingface.co/unsloth/QwQ-32B-GGUF

  1. Unsloth の Flappy Bird テストを実行すると、出力は Q4_K_M_yes_samplers.txt

  2. 編集 --threads 32 CPU スレッド数を --ctx-size 16384 コンテキスト長を --n-gpu-layers 99 GPU オフロードする層数を指定します。GPU のメモリ不足になる場合は調整してみてください。CPU のみで推論する場合は、これも削除してください。

  3. に保存されます --repeat-penalty 1.1 および --dry-multiplier 0.5 を使用しています。これは調整可能です。

私たちの https://unsloth.ai/blog/deepseekr1-dynamic 1.58bitブログからの全文入力は次のとおりです:

思考部分を削除した後の最終的な Python 出力の冒頭と末尾:

完全な最終 Python 出力(思考部分を削除):
  1. 実行すると、動作可能なゲームが得られます!

  1. 今度は、修正なしで同じことを試してみましょう!なので削除してください --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'?

  1. もし --repeat-penalty 1.5を使うと、さらに悪化してより明白になり、実際には完全に誤った構文になります。

  1. 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>\n 部分を削除した完全な jinja テンプレート

追加メモ

最初は、次のように考えました:

  1. QwQ のコンテキスト長はネイティブには 128K ではなく、YaRN 拡張付きの 32K なのではないかと。たとえば https://huggingface.co/Qwen/QwQ-32Bの readme ファイルでは、次のように見えます:

llama.cpp の YaRN 処理を上書きしてみましたが、何も変わりませんでした。

  1. RMS LayerNorm の epsilon が間違っているのではないかとも考えました。1e-5 ではなく 1e-6 かもしれないと。たとえば こちらは を持ち、 rms_norm_eps=1e-06、一方で こちらは を持ち、 rms_norm_eps=1e-05 を持っています。これも上書きしましたが、うまくいきませんでした:

  1. トークナイザー ID が llama.cpp と通常の Transformers で一致するかも、 @kalomazeのご助力により確認しました。一致していたので、これが原因ではありませんでした。

以下に私たちの実験結果を示します:

61KB
開く
サンプリング修正なしの BF16 フル精度
55KB
開く
サンプリング修正ありの BF16 フル精度
サンプリング修正なしの Q4_K_M 精度
サンプリング修正ありの Q4_K_M 精度

✏️ トークナイザーのバグ修正

🛠️ ダイナミック 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!

最終更新

役に立ちましたか?