本文基于
quant_compare.py脚本,对比 GPT-2 小模型在量化前(FP32)和量化后(INT8)两种状态下的推理速度与输出结果是否一致,帮助你评估动态量化对部署性能的实际影响。
📊 对比目标
| 对比维度 | 内容说明 |
|---|---|
| 推理耗时 | 单次 infer(prompt) 所花时间 |
| Top-1 输出 | logits 的最大值所对应 token 是否一致 |
| 运行设备 | 本地 CPU |
| 输出差异 | 是否引入语义偏移 |
1️⃣ 环境与模型路径配置
import time
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
model_fp32_path = "../python3_distillation/gpt2_student_v2"
model_int8_path = "./gpt2_student_v2_quantized"
2️⃣ 封装推理函数:FP32 模型
def infer_fp32(prompt):
model = GPT2LMHeadModel.from_pretrained(model_fp32_path).eval()
tokenizer = GPT2Tokenizer.from_pretrained(model_fp32_path)
inputs = tokenizer(prompt, return_tensors="pt")
start = time.time()
with torch.no_grad():
logits = model(**inputs).logits
end = time.time()
token_id = int(logits[0, -1].argmax())
token = tokenizer.decode([token_id]).strip()
elapsed_ms = (end - start) * 1000
return token_id, token, elapsed_ms
3️⃣ 封装推理函数:INT8 模型
def infer_int8(prompt):
model = GPT2LMHeadModel.from_pretrained(model_int8_path)
state_dict = torch.load(f"{model_int8_path}/pytorch_model.bin")
model.load_state_dict(state_dict)
model.eval()
tokenizer = GPT2Tokenizer.from_pretrained("../python3_distillation/gpt2_student_v2")
inputs = tokenizer(prompt, return_tensors="pt")
start = time.time()
with torch.no_grad():
logits = model(**inputs).logits
end = time.time()
token_id = int(logits[0, -1].argmax())
token = tokenizer.decode([token_id]).strip()
elapsed_ms = (end - start) * 1000
return token_id, token, elapsed_ms
4️⃣ 对比测试样例
prompts = [
"Hello world",
"I love",
"The sky is",
"Artificial intelligence is",
"GPT-2 is a"
]
for prompt in prompts:
id_fp32, token_fp32, t1 = infer_fp32(prompt)
id_int8, token_int8, t2 = infer_int8(prompt)
print(f"\n📝 Prompt: {prompt}")
print(f"🔹 FP32 输出: {token_fp32} ({t1:.2f} ms)")
print(f"🔹 INT8 输出: {token_int8} ({t2:.2f} ms)")
print("✅ 是否一致:", "✔️ 是" if id_fp32 == id_int8 else "❌ 否")
print(f"⚡️ 加速比: {t1 / t2:.2f}x")
🧪 实测结果示例
| Prompt | FP32 输出 | FP32耗时 | INT8输出 | INT8耗时 | 是否一致 | 加速倍数 |
|---|---|---|---|---|---|---|
| Hello world | ! | 82.45 ms | ! | 36.17 ms | ✔️ 是 | 2.28x |
| I love | you | 80.03 ms | you | 34.69 ms | ✔️ 是 | 2.31x |
| Artificial intelligence is | transforming | 84.20 ms | transforming | 37.28 ms | ✔️ 是 | 2.26x |
✅ 总结
- 推理加速:INT8 动态量化模型在 CPU 上平均加速约 2.3 倍
- 输出一致性:Top-1 输出与原始 FP32 模型一致,语义保持
- 部署建议:在资源受限或高并发场景中推荐使用 INT8 版本
🧭 本系列 GPT-2 模型量化部署系列四部曲
- 🧩 第一篇:GPT-2 模型动态量化实战:一键压缩为 INT8 权重,提升部署效率
- 🚀 第二篇:加载 GPT-2 量化模型并推理输出:INT8 推理流程与输出解析战
- 🌐 第三篇:GPT-2 模型量化前后推理性能对比:速度提升与输出一致性实测
- 🧠 第四篇:用 Flask 封装 GPT-2 INT8 推理服务:轻量部署与接口调用实战
📌 YoanAILab 技术导航页
💡 项目源码 × 实战部署 × 转型经验,一页总览
👉 点击查看完整导航页
📚 包含内容:
- 🧠 GPT-2 项目源码(GitHub)
- ✍️ 优快云 技术专栏合集
- 💼 知乎转型日志
- 📖 公众号 YoanAILab 全文合集
1900

被折叠的 条评论
为什么被折叠?



