🌠QwQ-32B: 効果的に実行する方法

当社のバグ修正と GGUF を使って QwQ-32B を無限生成なしで効果的に実行する方法。

QwenはQwQ-32Bをリリースしました - 多くのベンチマークでDeepSeek-R1と同等の性能を持つ推論モデルです、 ベンチマークarrow-up-right。しかし、人々は経験しています 無限生成, 多くの反復、<think>トークンの問題やファインチューニングの問題。私たちはこのガイドがほとんどの問題のデバッグと修正に役立つことを願っています!

circle-info

バグ修正を適用した私たちのモデルアップロードは、ファインチューニング、vLLM、Transformersでうまく機能します。llama.cppやllama.cppをバックエンドに使用するエンジンを使っている場合は、私たちの ここでの手順 に従って無限生成を修正してください。

バグ修正を適用したUnsloth QwQ-32Bのアップロード:

⚙️ 公式推奨設定

によれば Qwenarrow-up-right、これらが推論の推奨設定です:

  • 温度(Temperature)0.6

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

  • Min_Pを0.00(オプション、但し0.01がよく機能します。llama.cppのデフォルトは0.1)

  • Top_Pを0.95に

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

  • チャットテンプレート: <|im_start|>user\nPythonでFlappy Birdゲームを作成してください.<|im_end|>\n<|im_start|>assistant\n<think>\n

circle-exclamation

👍 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に増やすことができます。

感謝: @krist486arrow-up-right がllama.cppのサンプリングに関する方向性を教えてくれました。

☀️ Dry繰り返しペナルティ

私たちは dryペナルティ の使用を調査しました(推奨されているように) https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.mdarrow-up-right 0.8の値を使用しましたが、実際にはこれは むしろ特にコーディングに対して構文の問題を引き起こすことがわかりました。もしそれでも問題が発生する場合は、dryペナルティを0.8に増やすことができます。

並び替えたサンプリング順を利用することも、もし使うことを決めた場合に役立ちます、 dryペナルティ.

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

  1. Ollamaで実行する をインストールしてください まだインストールしていない場合は!

  1. モデルを実行してください!失敗した場合は別のターミナルで モデルを実行してください!失敗した場合は別のターミナルでを呼び出すことができることに注意してください!私たちはすべての修正と推奨パラメータ(temperature、min_pなど)を param params

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

  1. 最新の llama.cppGitHubで入手してくださいarrow-up-right。以下のビルド手順にも従うことができます。を変更してください -DGGML_CUDA=ON-DGGML_CUDA=OFF GPUを持っていない場合やCPUで推論したい場合は Apple Mac / Metalデバイスの場合、次を設定してください -DGGML_CUDA=OFF その後通常通り続行してください — Metalサポートはデフォルトで有効です。

  1. モデルをダウンロードするには(をインストールした後) モデルをダウンロードするには( )。Q4_K_Mや他の量子化バージョン(BF16フル精度など)を選択できます。その他のバージョンは: https://huggingface.co/unsloth/QwQ-32B-GGUFarrow-up-right

  1. UnslothのFlappy Birdテストを実行すると、出力が次に保存されます: Q4_K_M_yes_samplers.txt

  2. 編集 次の --threads 32 はCPUスレッドの数、 --ctx-size 16384 --n-gpu-layers 99 --n-gpu-layers 2

  3. 私たちは使用します --repeat-penalty 1.1--dry-multiplier 0.5 これは調整可能です。

私たちの https://unsloth.ai/blog/deepseekr1-dynamicarrow-up-right 1.58bitブログからの完全な入力は:

思考部分を除去した後の最終Python出力の始まりと終わり:

chevron-right最終的な完全なPython出力(思考部分を除去):hashtag
  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" Repetition Penalty(繰り返しペナルティ)を使用する場合。

🌄 まだ動作しませんか? Min_p = 0.1、Temperature = 1.5 を試してください

Min_pの論文によると https://arxiv.org/pdf/2407.01082arrow-up-right、より創造的で多様な出力のために、もしまだ繰り返しが見られるなら、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

chevron-rightRemovedされた<think>を含まない完全なjinjaテンプレートの部分hashtag

追加の注意事項

最初はこう考えました:

  1. QwQのコンテキスト長はネイティブで128Kではなく、YaRN拡張で32Kであるのではないかと。例えばリードミーファイルで https://huggingface.co/Qwen/QwQ-32Barrow-up-right、次のように見られます:

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

  1. また、RMS Layernorm の epsilon が間違っているのではないかとも考えました — 1e-5 ではなく 1e-6 かもしれません。例えば これarrow-up-right は持っています rms_norm_eps=1e-06、一方で これarrow-up-right は持っています rms_norm_eps=1e-05 です。これも上書きしましたが、動作しませんでした:

  1. また、tokenizerのIDがllama.cppと通常のTransformersで一致するかどうかを@kalomazeの助けを借りてテストしました。 @kalomazearrow-up-rightそれらは一致したので、原因ではありませんでした。

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

file-download
61KB
arrow-up-right-from-square開く
サンプリング修正なしのBF16フル精度
file-download
55KB
arrow-up-right-from-square開く
サンプリング修正ありのBF16フル精度
file-download
71KB
arrow-up-right-from-square開く
サンプリング修正なしのQ4_K_M精度
file-download
65KB
arrow-up-right-from-square開く
サンプリング修正ありのQ4_K_M精度

✏️ Tokenizerのバグ修正

🛠️ ダイナミック4ビット量子化

また、単純な4ビット量子化より精度が上がるダイナミック4ビット量子化をアップロードしました! 活性化と重みの量子化誤差の両方についてQwQの量子化誤差プロット解析を添付します:

ダイナミック4ビット量子化を次にアップロードしました: https://huggingface.co/unsloth/QwQ-32B-unsloth-bnb-4bitarrow-up-right

vLLM 0.7.3(2025年2月20日)以降、 https://github.com/vllm-project/vllm/releases/tag/v0.7.3arrow-up-right、vLLMはUnslothのダイナミック4ビット量子化の読み込みをサポートするようになりました!

私たちのすべてのGGUFはここにあります https://huggingface.co/unsloth/QwQ-32B-GGUFarrow-up-right!

最終更新

役に立ちましたか?