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

🌠QwQ-32B: 効果的な実行方法

バグ修正を施し、無限生成なしでQwQ-32Bを効果的に実行する方法 + GGUF。

QwenがQwQ-32Bをリリースしました - 多くのベンチマークでDeepSeek-R1に匹敵する推論モデル ベンチマーク。しかし、人々は 無限生成, 多数の繰り返し、<think>トークンの問題やファインチューニングの問題が発生しています。このガイドが、ほとんどの問題のデバッグと修正に役立つことを願っています!

私たちのバグ修正を含むモデルのアップロードは、ファインチューニング、vLLM、Transformersで非常にうまく動作します。llama.cppや、バックエンドとしてllama.cppを使用するエンジンを使っている場合は、私たちの 手順はこちら 無限生成を修正するための手順

私たちのバグ修正を含むUnsloth QwQ-32Bのアップロード:

⚙️ 公式推奨設定

によると Qwen、推論の推奨設定は以下のとおりです:

  • 温度 0.6

  • Top_Kは40(または20〜40)

  • Min_Pは0.00(任意ですが、0.01でもうまく動きます。llama.cppのデフォルトは0.1です)

  • Top_P 0.95

  • 繰り返しペナルティ 1.0。(1.0は llama.cpp と transformers では無効を意味します)

  • チャットテンプレート: <|im_start|>user\nPythonでFlappy Birdゲームを作成してください。次のものを含める必要があります:\n1. pygameを使用してください。\n2. 背景色はランダムに選ばれた明るい色にしてください。最初は水色にします。\n3. SPACEを何度も押すと鳥が加速します。\n4. 鳥の形は四角、円、または三角形のいずれかからランダムに選ばれる必要があります。色はランダムに暗い色から選ばれる必要があります。\n5. 下部に、ランダムに選ばれた濃い茶色または黄色の地面を配置してください。\n6. 右上にスコアを表示してください。パイプを通過して当たらなければ加算します。\n7. 十分な間隔で、ランダムな間隔のパイプを作成してください。色は濃い緑、薄い茶色、または暗い灰色のいずれかからランダムに選んでください。\n8. 負けたら、ベストスコアを表示してください。画面内にテキストを表示してください。qまたはEscを押すとゲームを終了します。再開はSPACEをもう一度押します。\n最終的なゲームは、PythonのMarkdownセクション内に入れる必要があります。最終のMarkdownセクションの前に、コードにエラーがないか確認し、修正してください。<|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ペナルティ で提案されているように https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.md 0.8の値を使用しましたが、実際にはこれが 特にコーディングでは、むしろ構文の問題を引き起こす。それでも問題が発生する場合は、次を増やしてくださいdryペナルティを0.8に。

入れ替えたサンプリング順序を使うことでも、次を使う場合に役立つことがあります dryペナルティ.

🦙 チュートリアル:OllamaでQwQ-32Bを実行する方法

  1. インストール ollama まだの場合は!

  1. モデルを実行しましょう!注意:次を呼び出せます ollama serve失敗した場合は別の端末で実行できます!私たちのすべての修正と推奨パラメータ(temperature、min_pなど)は、 param として Hugging Face のアップロードに含めています!

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

  1. 最新の llama.cpp を GitHubこちら。以下のビルド手順に従うこともできます。変更してください -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. 'pipes' を import し忘れましたか?

  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だと考えました。例えば、次のREADMEファイルでは https://huggingface.co/Qwen/QwQ-32B、次のように記載されています:

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

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

  1. また、llama.cpp と通常の Transformers の間でトークナイザー ID が一致するかどうかも、〜のおかげでテストしました @kalomaze。一致していたので、これが原因ではありませんでした。

以下に実験結果を示します:

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

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

🛠️ 動的4ビット量子化

また、単純な4ビット量子化より精度を向上させる動的4bit量子化もアップロードしました!活性化と重みの両方の量子化誤差について、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.3、vLLM は Unsloth の動的4bit量子化の読み込みをサポートするようになりました!

すべての GGUF は次にあります https://huggingface.co/unsloth/QwQ-32B-GGUF!

最終更新

役に立ちましたか?