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> 停止。