本文基于
quant_api_server.py脚本,展示如何使用 Flask 封装动态量化后的 GPT-2 模型为 Web 接口,支持 JSON 调用、网页交互与远程部署,适合搭建本地轻量级 NLP 服务。
📁 项目结构建议
.
├── quant_api_server.py
├── gpt2_student_v2_quantized/
│ ├── pytorch_model.bin
│ └── config.json
├── ../python3_distillation/gpt2_student_v2/ # tokenizer
├── templates/index.html # 前端页面(可选)
1️⃣ Flask 服务结构核心
from flask import Flask, request, jsonify, render_template
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
app = Flask(__name__, static_folder="static", template_folder="templates")
# 加载 tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("../python3_distillation/gpt2_student_v2")
# 加载量化模型结构与权重
model = GPT2LMHeadModel.from_pretrained("./gpt2_student_v2_quantized")
state_dict = torch.load("./gpt2_student_v2_quantized/pytorch_model.bin")
model.load_state_dict(state_dict)
model.eval()
2️⃣ 接口路由设置
网页主页(可选)
@app.route("/", methods=["GET"])
def home():
return render_template("index.html")
推理 API 接口
@app.route("/infer", methods=["POST"])
def infer():
data = request.get_json()
prompt = data.get("prompt", "").strip()
if not prompt:
return jsonify({"error": "Missing prompt"}), 400
inputs = tokenizer(prompt, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
token_id = int(logits[0, -1].argmax())
token_text = tokenizer.decode([token_id], clean_up_tokenization_spaces=True).strip()
return jsonify({
"response": f"INT8 模型生成词: {token_text}",
"token_id": token_id
})
3️⃣ 启动服务
python quant_api_server.py
默认监听 http://localhost:6006,可通过浏览器、Postman 或 curl 调用。
4️⃣ 示例调用(Postman)
请求:
POST /infer
Content-Type: application/json
{
"prompt": "I love"
}
返回:
{
"response": "INT8 模型生成词: you",
"token_id": 345
}
5️⃣ 前端网页支持(可选)
你可以在 templates/index.html 添加表单输入页面:
<form id="prompt-form">
<input type="text" id="prompt" placeholder="输入你的问题..." />
<button type="submit">生成</button>
</form>
<div id="result"></div>
<script>
document.getElementById("prompt-form").addEventListener("submit", async (e) => {
e.preventDefault();
const prompt = document.getElementById("prompt").value;
const res = await fetch("/infer", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ prompt })
});
const data = await res.json();
document.getElementById("result").innerText = data.response;
});
</script>
6️⃣ 实战技巧总结
| 场景 | 推荐方式 |
|---|---|
| API 部署 | Flask + Gunicorn |
| 测试调用 | Postman 或 curl |
| 远程公网访问 | 配合 Ngrok 或 Cloudflare Tunnel |
| 容器化部署 | 可封装为 Docker 镜像运行 |
📌 总结
- Flask 可快速封装 INT8 模型为 JSON 接口
from_pretrained + load_state_dict支持加载量化模型- 接口支持网页、Postman、脚本多端调用
- 可拓展为完整对话服务或远程调用平台
🧭 本系列 GPT-2 模型量化部署系列四部曲
- 🧩 第一篇:GPT-2 模型动态量化实战:一键压缩为 INT8 权重,提升部署效率
- 🚀 第二篇:加载 GPT-2 量化模型并推理输出:INT8 推理流程与输出解析战
- 🌐 第三篇:GPT-2 模型量化前后推理性能对比:速度提升与输出一致性实测
- 🧠 第四篇:用 Flask 封装 GPT-2 INT8 推理服务:轻量部署与接口调用实战
📌 YoanAILab 技术导航页
💡 项目源码 × 实战部署 × 转型经验,一页总览
👉 点击查看完整导航页
📚 包含内容:
- 🧠 GPT-2 项目源码(GitHub)
- ✍️ 优快云 技术专栏合集
- 💼 知乎转型日志
- 📖 公众号 YoanAILab 全文合集

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



