2. 加载预训练模型并生成文本
任务目标
本案例将使用 Hugging Face TGI(Text Generation Inference)框架加载一个预训练语言模型(),启动推理服务后,通过 HTTP API 发送提示词并获取生成的文本。完成本案例后,你将掌握 TGI 服务的最小可用部署与调用流程。
环境与依赖
需要一台具备 Docker 的 Linux 环境(或支持 Docker Desktop 的 macOS/Windows)。 模型约 500MB,首次启动时会自动从 Hugging Face Hub 下载。若网络受限,可提前执行 huggingface-cli download 手动缓存。
实现步骤
本案例不编写自定义 Python 代码,而是直接使用 TGI 官方镜像启动服务,并通过 curl 验证生成能力。核心操作分为两步:启动容器、调用 API。
1. 启动 TGI 服务
在终端执行以下命令,将模型 加载到 TGI 运行时中。宿主机端口 8080 映射到容器内的 80 端口:
docker run --gpus all -p 8080:80 \
ghcr.io/huggingface/text-generation-inference:2.2.0 \
--model-id \
--max-input-tokens 512 \
--max-total-tokens 1024
若在纯 CPU 环境运行,去掉 --gpus all 即可。启动日志中出现 Starting server 或 Ready 表示服务已就绪。
2. 通过 API 生成文本
服务启动后,打开另一个终端,使用 curl 发送 POST 请求。以下命令请求模型续写提示词 "The meaning of life is",并限制生成 50 个新 :
curl http://localhost:8080/generate \
-H "Content-Type: application/json" \
-d '{
"inputs": "The meaning of life is",
"parameters": {
"max_new_tokens": 50,
"temperature": 0.8,
"do_sample": true
}
}'
验证方法与判定标准
请求成功后,API 会返回 JSON 格式的响应,其中 generated_text 字段包含模型续写的完整文本。判定标准如下:
- HTTP 状态码为
200 OK; - 响应 JSON 中包含
generated_text字段,且内容以"The meaning of life is"开头,后续为模型生成的英文自然语言文本; - 生成文本长度明显大于输入提示词(约 50 个 左右),且语义连贯。
预期输出示例(实际生成内容具有随机性,但结构一致):
{"generated_text": "The meaning of life is to find your gift. The purpose of life is to give it away. ..."}
常见问题
- 端口冲突:若 8080 被占用,修改
-p参数左侧端口,并同步修改 curl 中的地址。 - 模型下载超时:首次启动需下载模型,若网络不稳定可设置环境变量
HF_HUB_ENABLE_HF_TRANSFER=1加速,或提前手动下载。 - GPU 显存不足: 约需 1.5GB 显存,若显存较小,可改用
distilgpt2模型(约 300MB),命令中替换--model-id即可。
验证完成后,在启动服务的终端按 Ctrl+C 停止容器,或执行 docker ps 查看容器 ID 后使用 docker stop <容器ID> 停止。