🚀 QwQ-32B-FP8-dynamic
このモデルは、Qwen/QwQ-32B の量子化バージョンで、重みと活性化関数をFP8データ型に量子化することで、ディスクサイズとGPUメモリ要件を約50%削減しています。
🚀 クイックスタート
モデル概要
- モデルアーキテクチャ:Qwen2ForCausalLM
- モデル最適化:
- リリース日:2025年3月6日
- バージョン:1.0
- モデル開発者:Neural Magic
モデル最適化
このモデルは、Qwen/QwQ-32B の重みと活性化関数をFP8データ型に量子化することで得られました。この最適化により、パラメータごとのビット数が16から8に減少し、ディスクサイズとGPUメモリ要件が約50%削減されます。
Transformerブロック内の線形演算子の重みと活性化関数のみが量子化されます。重みは対称的なチャネルごとのスキームを使用して量子化され、活性化関数は対称的なトークンごとのスキームを使用して量子化されます。量子化には LLM Compressor が使用されています。
📦 インストール
このモデルは、vLLM バックエンドを使用して効率的にデプロイできます。以下の例を参照してください。
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
number_gpus = 1
model_name = "neuralmagic/QwQ-32B-FP8-dynamic"
tokenizer = AutoTokenizer.from_pretrained(model_name)
sampling_params = SamplingParams(temperature=0.6, max_tokens=256, stop_token_ids=[tokenizer.eos_token_id])
llm = LLM(model=model_name, tensor_parallel_size=number_gpus, trust_remote_code=True)
messages_list = [
[{"role": "user", "content": "Who are you? Please respond in pirate speak!"}],
]
prompt_token_ids = [tokenizer.apply_chat_template(messages, add_generation_prompt=True) for messages in messages_list]
outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)
generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)
vLLMはOpenAI互換のサービングもサポートしています。詳細は ドキュメント を参照してください。
💻 使用例
基本的な使用法
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
number_gpus = 1
model_name = "neuralmagic/QwQ-32B-FP8-dynamic"
tokenizer = AutoTokenizer.from_pretrained(model_name)
sampling_params = SamplingParams(temperature=0.6, max_tokens=256, stop_token_ids=[tokenizer.eos_token_id])
llm = LLM(model=model_name, tensor_parallel_size=number_gpus, trust_remote_code=True)
messages_list = [
[{"role": "user", "content": "Who are you? Please respond in pirate speak!"}],
]
prompt_token_ids = [tokenizer.apply_chat_template(messages, add_generation_prompt=True) for messages in messages_list]
outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)
generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)
高度な使用法
from transformers import AutoModelForCausalLM, AutoTokenizer
from llmcompressor.modifiers.quantization import QuantizationModifier
from llmcompressor.transformers import oneshot
import os
model_stub = "Qwen/QwQ-32B"
model_name = model_stub.split("/")[-1]
model = AutoModelForCausalLM.from_pretrained(
model_stub,
torch_dtype="auto",
)
tokenizer = AutoTokenizer.from_pretrained(model_stub)
recipe = QuantizationModifier(
targets="Linear",
scheme="FP8_DYNAMIC",
ignore=["lm_head"],
)
oneshot(
model=model,
recipe=recipe,
)
save_path = model_name + "-FP8-dynamic"
model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
print(f"Model and tokenizer saved to: {save_path}")
精度
カテゴリ |
指標 |
Qwen/QwQ-32B |
neuralmagic/QwQ-32B-FP8-dynamic |
回復率 |
推論 |
AIME 2024 (pass@1) |
78.66 |
79.40 |
100.94% |
|
MATH-500 (pass@1) |
97.39 |
97.44 |
100.05% |
|
GPQA Diamond (pass@1) |
64.72 |
63.21 |
97.66% |
|
平均スコア |
80.25 |
80.05 |
99.75% |
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。