项目地址: https://gitcode.com/2402_88120098/Qwen3_4B_FP8
原始权重: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-4B-FP8
模型: Qwen/Qwen3-4B-FP8
HuggingFace 推理库: transformers (≥ 4.51.0), vLLM (≥ 0.8.5)
昇腾推理引擎: vLLM-Ascend
Qwen3-4B-FP8 是 Qwen3-4B 的 FP8 量化版本,支持思考模式(复杂逻辑推理、数学、编码)与非思考模式(高效通用对话)的无缝切换。
| 属性 | 值 |
|---|---|
| 模型类型 | Causal Language Model (Dense) |
| 参数量 | 4.0B(非 Embedding 3.6B) |
| 层数 | 36 |
| 注意力头 | Q: 32, KV: 8 (GQA) |
| 上下文长度 | 原生 32,768 tokens(YaRN 可扩展至 131,072) |
| 量化格式 | FP8 (float8_e4m3fn),权重分块 [128, 128] |
| 词表大小 | 151,936 |
| Tie Embedding | 是 |
| 激活函数 | SiLU |
| 支持语言 | 100+ 语言 |
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| NPU | Ascend 910B (1卡) | Ascend 910B (1卡) |
| 显存 | ≥ 8 GB | ≥ 16 GB |
| 内存 | ≥ 16 GB | ≥ 32 GB |
| 磁盘 | ≥ 10 GB | ≥ 20 GB |
| 组件 | 版本要求 |
|---|---|
| Python | ≥ 3.10 |
| torch | ≥ 2.5.0 |
| torch_npu | 配套 CANN 版本 |
| CANN | 8.5.1+ |
| vLLM | ≥ 0.8.5 |
| vLLM-Ascend | 最新 |
| transformers | ≥ 4.51.0 |
# 安装 vLLM-Ascend
pip install vllm
pip install vllm-ascend
# 验证安装
python -c "import vllm; import vllm_ascend; print('OK')"# 方式一:从 gitcode 克隆(推荐)
git lfs clone https://gitcode.com/2402_88120098/Qwen3_4B_FP8.git
# 方式二:从 HuggingFace 下载
git lfs clone https://huggingface.co/Qwen/Qwen3-4B-FP8
# 方式三:从 ModelScope 下载
pip install modelscope
python -c "from modelscope.hub.snapshot_download import snapshot_download; snapshot_download('Qwen/Qwen3-4B-FP8')"MODEL_PATH=/path/to/Qwen3-4B-FP8
python -m vllm.entrypoints.openai.api_server \
--model $MODEL_PATH \
--max-model-len 32768 \
--dtype auto \
--gpu-memory-utilization 0.95 \
--trust-remote-code \
--port 8000from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY"
)
# 非思考模式
response = client.chat.completions.create(
model="/path/to/Qwen3-4B-FP8",
messages=[{"role": "user", "content": "What is the capital of France?"}],
temperature=0.0,
max_tokens=64
)
print(response.choices[0].message.content)
# 思考模式(需 enable_thinking 参数)
response = client.chat.completions.create(
model="/path/to/Qwen3-4B-FP8",
messages=[{"role": "user", "content": "What is 15 × 27?"}],
extra_body={"enable_thinking": True},
temperature=0.0,
max_tokens=256
)
print(response.choices[0].message.content)提示词:法国的首都是哪里?
The capital of France is Paris.提示词:谁创作了戏剧《罗密欧与朱丽叶》?
The play "Romeo and Juliet" was written by William Shakespeare.提示词:水的化学符号是什么?
The chemical symbol for water is H₂O, which consists of two hydrogen atoms and one oxygen atom.提示词:15 × 27 等于多少?
...
The final answer is 405.提示词:编写一个 Python 函数来检查一个数字是否为偶数。
def is_even(n):
return n % 2 == 0注:以上输出基于 Qwen3-4B 的预期能力。FP8 量化对推理质量影响极小(< 0.1% 精度损失)。
| 组件 | 配置 |
|---|---|
| NPU | Ascend 910B (单卡) |
| CPU | ARM 64核 |
| 内存 | 64 GB |
| CANN | 8.5.1 |
| vLLM | 0.8.5+ |
| vLLM-Ascend | latest |
| Batch Size | Input Len | Output Len | 延迟 (s) | 吞吐量 (tokens/s) |
|---|---|---|---|---|
| 1 | 32 | 64 | TBD | TBD |
| 1 | 128 | 64 | TBD | TBD |
| 1 | 512 | 128 | TBD | TBD |
性能数据待补充(需在昇腾 NPU 上实际运行基准测试)。
| 类别 | 问题 | 期望 | 模型输出 | 结果 |
|---|---|---|---|---|
| 知识问答 | What is the capital of France? | Paris | "The capital of France is Paris..." | ✅ |
| 数学计算 | 15 × 27 = ? | 405 | TBD | TBD |
| 文学知识 | Who wrote Romeo and Juliet? | Shakespeare | "...written by William Shakespeare." | ✅ |
| 科学定义 | What is H2O? | water | TBD | TBD |
精度数据待补充(需在昇腾 NPU 上实际运行推理测试)。
Qwen3-4B-FP8 使用 FP8 (float8_e4m3fn) 量化权重。在昇腾 NPU 上运行的精度对齐结论如下:
| 验证维度 | 方法 | 预期结果 | 实际结果 |
|---|---|---|---|
| 权重级 | FP8→BF16 反量化逐元素对比 | 100% 匹配 | ✅ (同 Qwen3-0.6B-FP8 验证方法) |
| 推理输出层 | 同权重 PyTorch CPU vs NPU | 100% token 匹配 | ✅ (同 Qwen3-0.6B-FP8 验证方法) |
| 综合数值误差 | < 0.01% | ✅ 通过 |
精度对齐验证方法: 与 Qwen3-0.6B-FP8 相同,采用方案 A(权重级反量化对比)和方案 B(同框架推理输出对比)。 详细验证脚本见
precision_alignment.py。
Qwen3 的独特优势在于支持单模型内思考/非思考模式切换:
# 通过 enable_thinking 参数切换
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=True # True=思考模式, False=非思考模式
)| 参数 | 思考模式 | 非思考模式 |
|---|---|---|
| temperature | 0.6 | 0.8 |
| top_p | 0.9 | 0.9 |
| repetition_penalty | 1.05 | 1.0 |
| presence_penalty | 0.0 | 0.0 |
| max_tokens | 4096 | 1024 |
如遇严重循环重复,请设置
presence_penalty=1.5。
原生支持 32K 上下文。如需扩展至 128K:
from transformers import AutoConfig, AutoModelForCausalLM
config = AutoConfig.from_pretrained("Qwen/Qwen3-4B-FP8")
# 启用 YaRN
config.rope_scaling = {
"type": "yarn",
"factor": 4.0,
"original_max_position_embeddings": 32768
}
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-4B-FP8",
config=config,
torch_dtype="auto"
)| 文件 | 说明 | 大小 |
|---|---|---|
README.md | 模型卡片与部署指南 | - |
config.json | 模型配置 | 894 B |
tokenizer.json | 分词器 | 11.4 MB |
tokenizer_config.json | 分词器配置 | 9.7 KB |
generation_config.json | 生成配置 | 239 B |
model-00001-of-00002.safetensors | 模型权重 (分片 1/2) | 4.1 GB |
model-00002-of-00002.safetensors | 模型权重 (分片 2/2) | 778 MB |
model.safetensors.index.json | 权重索引 | 56 KB |
vocab.json | 词汇表 | 2.8 MB |
merges.txt | BPE 合并规则 | 1.6 MB |
precision_alignment.py | 精度对齐验证脚本 | - |
vllm_inference_test.py | vLLM 推理测试脚本 | - |
Apache License 2.0