🚀 Qwen/QwQ-32B (量子化版)
このモデルは、元のモデルQwen/QwQ-32B
の量子化バージョンです。量子化にはBitsAndBytesライブラリを使用し、bnb-my-repoスペースを通じて4ビットに量子化されています。
🚀 クイックスタート
ここでは、apply_chat_template
を使用してトークナイザーとモデルをロードし、内容を生成する方法を示すコードスニペットを提供します。
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/QwQ-32B"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "How many r's are in the word \"strawberry\""
messages = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=32768
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
✨ 主な機能
モデル概要
QwQはQwenシリーズの推論モデルです。通常の命令調整モデルと比較して、思考と推論が可能なQwQは、下流タスク、特に難問において大幅に向上したパフォーマンスを達成できます。QwQ - 32Bは中規模の推論モデルで、最先端の推論モデル(DeepSeek - R1、o1 - miniなど)と競争力のあるパフォーマンスを達成できます。
モデルの特徴
- タイプ:Causal Language Models
- トレーニング段階:事前学習と事後学習(教師付き微調整と強化学習)
- アーキテクチャ:RoPE、SwiGLU、RMSNorm、およびAttention QKVバイアスを備えたtransformers
- パラメータ数:32.5B
- パラメータ数(非埋め込み):31.0B
- レイヤー数:64
- Attentionヘッド数(GQA):Qは40、KVは8
- コンテキスト長:最大131,072トークン
- 長さが8,192トークンを超えるプロンプトの場合は、このセクションに記載されているようにYaRNを有効にする必要があります。
📦 インストール
QwQはQwen2.5に基づいており、そのコードは最新のHugging face transformers
に含まれています。最新バージョンのtransformers
を使用することをお勧めします。
transformers<4.37.0
を使用すると、以下のエラーが発生します。
KeyError: 'qwen2'
📚 ドキュメント
使用ガイド
最適なパフォーマンスを得るために、以下の設定を推奨します。
- 思考出力の強制:モデルが"<think>\n"で始まるようにして、空の思考内容が生成されるのを防ぎます。これにより出力品質が低下する可能性があります。
apply_chat_template
を使用し、add_generation_prompt=True
を設定すると、これは自動的に実装されますが、応答の先頭に<think>タグがない場合があります。これは正常な動作です。
- サンプリングパラメータ:
- 無限の繰り返しを避けるために、GreedyデコードではなくTemperature = 0.6、TopP = 0.95、MinP = 0を使用します。
- 生成される出力の多様性を維持しながら、まれなトークンの出現を除外するために、TopKを20から40の間で使用します。
- サポートされているフレームワークでは、
presence_penalty
パラメータを0から2の間で調整して、無限の繰り返しを減らすことができます。ただし、値を高くすると、時折言語の混合が発生し、パフォーマンスがわずかに低下する可能性があります。
- 履歴に思考内容を含めない:複数ターンの会話では、履歴のモデル出力には最終出力部分のみを含め、思考内容を含める必要はありません。この機能は
apply_chat_template
にすでに実装されています。
- 出力形式の標準化:ベンチマーク時には、プロンプトを使用してモデルの出力を標準化することを推奨します。
- 数学問題:プロンプトに「Please reason step by step, and put your final answer within \boxed{}.」を含めます。
- 選択問題:応答を標準化するために、プロンプトに以下のJSON構造を追加します。「Please show your choice in the
answer
field with only the choice letter, e.g.,\"answer\": \"C\"
」。
- 長い入力の処理:8,192トークンを超える入力の場合は、YaRNを有効にして、モデルが長いシーケンス情報を効果的に捕捉する能力を向上させます。
サポートされているフレームワークでは、config.json
に以下を追加してYaRNを有効にできます。
{
...,
"rope_scaling": {
"factor": 4.0,
"original_max_position_embeddings": 32768,
"type": "yarn"
}
}
デプロイにはvLLMの使用を推奨します。vLLMに不慣れな場合は、ドキュメントを参照してください。現在、vLLMは静的なYARNのみをサポートしており、これは入力長に関係なくスケーリング係数が一定であることを意味し、短いテキストでのパフォーマンスに影響を与える可能性があります。長いコンテキストを処理する必要がある場合のみ、rope_scaling
設定を追加することをお勧めします。
評価とパフォーマンス
詳細な評価結果は、このブログに報告されています。
GPUメモリの要件とそれぞれのスループットについては、ここの結果を参照してください。
引用
この研究が役に立った場合は、以下のように引用してください。
@misc{qwq32b,
title = {QwQ-32B: Embracing the Power of Reinforcement Learning},
url = {https://qwenlm.github.io/blog/qwq-32b/},
author = {Qwen Team},
month = {March},
year = {2025}
}
@article{qwen2.5,
title={Qwen2.5 Technical Report},
author={An Yang and Baosong Yang and Beichen Zhang and Binyuan Hui and Bo Zheng and Bowen Yu and Chengyuan Li and Dayiheng Liu and Fei Huang and Haoran Wei and Huan Lin and Jian Yang and Jianhong Tu and Jianwei Zhang and Jianxin Yang and Jiaxi Yang and Jingren Zhou and Junyang Lin and Kai Dang and Keming Lu and Keqin Bao and Kexin Yang and Le Yu and Mei Li and Mingfeng Xue and Pei Zhang and Qin Zhu and Rui Men and Runji Lin and Tianhao Li and Tianyi Tang and Tingyu Xia and Xingzhang Ren and Xuancheng Ren and Yang Fan and Yang Su and Yichang Zhang and Yu Wan and Yuqiong Liu and Zeyu Cui and Zhenru Zhang and Zihan Qiu},
journal={arXiv preprint arXiv:2412.15115},
year={2024}
}
📄 ライセンス
このモデルは、apache - 2.0ライセンスの下で提供されています。