🌠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

  • 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

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 penalty(ドライペナルティ) の使用を調査しました(提案されているように)、 https://github.com/ggml-org/llama.cpp/blob/master/examples/main/README.mdarrow-up-right 値0.8を使用すると記載されていましたが、実際にはこれが 特にコーディングにおいて構文問題をむしろ引き起こすことを発見しました。それでも問題が発生する場合は、次を増やすことができます:dry penaltyを0.8に

当方の並び替えたサンプリング順序を利用することも、もしあなたが dry penalty(ドライペナルティ).

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

  1. インストールしてください ollama まだの場合はぜひ!

  1. モデルを実行してください!失敗した場合は別のターミナルで ollama serveを呼び出せることに注意してください!我々のすべての修正と推奨パラメータ(temperature、min_pなど)は param にHugging Faceのアップロードで含めています!

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

  1. 最新の llama.cppGitHub で入手arrow-up-rightできます。下のビルド手順に従うこともできます。変更してください -DGGML_CUDA=ON から -DGGML_CUDA=OFF GPU がない場合や CPU 推論のみを行いたい場合は。

  1. (以下をインストールした後に)モデルをダウンロードします pip install huggingface_hub hf_transfer )。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 で何層をGPUにオフロードするかを指定します。GPUがメモリ不足になる場合は調整してみてください。CPUのみの推論の場合はこれを削除してください。

  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" 繰り返しペナルティを使用している場合に。

🌄 まだ動作しませんか?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-rightを削除してください。hashtag

<think>を削除した完全なjinjaテンプレート部分

追加の注記

"type": "yarn"

  1. --override-kv qwen2.attention.layer_norm_rms_epsilon=float:0.000001 \ またトークナイザのIDがllama.cppと通常のTransformersで一致するかを@kalomazeの助力でテストしました。arrow-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 精度でサンプリング修正あり

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

🛠️ ダイナミック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-rightvLLMはUnslothのダイナミック4ビット量子化の読み込みをサポートするようになりました!

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

最終更新

役に立ちましたか?