加载 GPT-2 量化模型并推理输出:INT8 推理流程与输出解析

本文基于 quant_infer.py 脚本,讲解如何加载动态量化后的 GPT-2 小模型并完成 prompt 推理,展示 from_pretrained + load_state_dict 的加载技巧,封装输出预测函数 infer(prompt),实现完整的 INT8 推理流程。


📦 模型准备说明

在第一篇文章中,我们通过动态量化保存了如下模型:

gpt2_student_v2_quantized/
├── pytorch_model.bin       # INT8 权重
├── config.json             # 模型结构配置

模型结构保持不变,只是 Linear 层的参数被压缩为 INT8 格式。


1️⃣ 加载量化模型(INT8 权重)

import torch
from transformers import GPT2LMHeadModel

model_path = "./gpt2_student_v2_quantized"

# 1. 初始化空模型结构
model = GPT2LMHeadModel.from_pretrained(model_path)

# 2. 加载量化权重
state_dict = torch.load(f"{model_path}/pytorch_model.bin")
model.load_state_dict(state_dict)

# 3. 设置 eval 模式
model.eval()

⚠️ 说明:

  • from_pretrained() 会自动读取 config.json
  • load_state_dict() 加载的是量化参数
  • 必须 model.eval() 否则推理结果不稳定

2️⃣ 加载 tokenizer(原始路径)

from transformers import GPT2Tokenizer

tokenizer = GPT2Tokenizer.from_pretrained("../python3_distillation/gpt2_student_v2")

量化模型与 tokenizer 没有冲突,词表结构不变。


3️⃣ 封装推理函数 infer(prompt)

def infer(prompt):
    inputs = tokenizer(prompt, return_tensors="pt")
    with torch.no_grad():
        outputs = model(**inputs)

    logits = outputs.logits
    top1_token_id = int(logits[0, -1].argmax())
    token = tokenizer.decode([top1_token_id], clean_up_tokenization_spaces=True).strip()

    return {
        "prompt": prompt,
        "token_id": top1_token_id,
        "token": token
    }

4️⃣ 多 prompt 测试示例

prompts = [
    "你好,今天是",
    "I love",
    "Artificial intelligence is",
    "GPT-2 is a",
]

for prompt in prompts:
    result = infer(prompt)
    print(f"📝 Prompt: {result['prompt']}")
    print(f"🔹 Token ID: {result['token_id']}")
    print(f"🔹 Token: {result['token']}")

输出示例:

📝 Prompt: I love
🔹 Token: you

📝 Prompt: GPT-2 is a
🔹 Token: powerful

5️⃣ 输出结构说明

  • logits shape 为 [B, L, V]
  • logits[:, -1, :] 取最后一个 token 的预测结果
  • argmax(dim=-1) 得到最可能的下一个 token id
  • tokenizer.decode() 转为字符串输出

✅ 总结

  • 量化模型加载需配合 from_pretrained + load_state_dict
  • infer(prompt) 函数支持批量封装与 API 接入
  • 推理输出与原始模型基本一致,速度明显提升
  • 推荐用于 CPU 本地服务、嵌入式部署、轻量级任务调用

🧭 本系列 GPT-2 模型量化部署系列四部曲


📌 YoanAILab 技术导航页

💡 项目源码 × 实战部署 × 转型经验,一页总览
👉 点击查看完整导航页

📚 包含内容:

  • 🧠 GPT-2 项目源码(GitHub)
  • ✍️ CSDN 技术专栏合集
  • 💼 知乎转型日志
  • 📖 公众号 YoanAILab 全文合集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoanAILab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值