Text Generation Inference (TGI)
Text Generation Inference (TGI) 是由 Hugging Face 发布的文本生成推理工具包,专为部署和服务大型语言模型 (LLM) 设计。它实现了多项关键功能以提升推理性能和可扩展性。
核心功能
- 分布式跟踪:集成 Prometheus 指标。
- 张量并行:支持在多个 GPU 上实现更快的推理速度。
- 令牌流:使用服务器发送事件 (SSE) 进行流式输出。
- 连续批处理:动态管理请求批次以提高吞吐量。
- 优化内核:在最流行的架构上使用 Flash Attention 和 Paged Attention 进行推理优化。
- 量化支持:包括 bitsandbytes、GPT-Q、EETQ、AWQ 等。
- 权重加载:支持 Safetensors 格式。
- Logits 处理器:支持温度缩放、top-p、top-k、重复惩罚等。
- 停止序列与对数概率:控制生成结束条件并获取概率信息。
- 自定义提示与微调:支持指导模型输出及利用微调模型提升特定任务性能。
支持的硬件
兼容 NVIDIA、AMD、Intel GPU、Inferentia 及 Gaudi 等硬件设备。
本地运行大模型
环境准备
-
安装 Rust
sudo apt-get install libssl-dev gcc -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
-
安装 Protoc
PROTOC_ZIP=protoc-21.12-linux-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
rm -f $PROTOC_ZIP
-
编译 TGI
git clone https://github.com/huggingface/text-generation-inference.git
cd text-generation-inference
conda activate llm-plus
BUILD_EXTENSIONS=True make install -j
启动模型
使用以下命令启动模型服务:
text-generation-launcher --model-id /path/to/model --trust-remote-code --port 4000
若遇到 ExLlama 相关错误,可修改模型配置文件 config.json,设置 "use_exllama": false。
常用参数说明
可通过 -h 查看完整参数列表。主要参数包括:
--model-id: 模型路径或 HuggingFace Hub ID。
--quantize: 量化类型,可选 awq, eetq, gptq, bitsandbytes 等。
--num-shard: 分片数量,用于多卡并行。
--max-concurrent-requests: 最大并发请求数。
--dtype: 数据类型,如 float16, bfloat16。
--cuda-memory-fraction: CUDA 显存占用比例。
调用示例
使用 curl 发送请求:
curl 127.0.0.1:4000/generate \
-X POST \
-d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":20}}' \
-H 'Content-Type: application/json'
Docker 部署
推荐使用 Docker 简化依赖管理:
docker run --gpus all -p 4000:80 huggingface/text-generation-inference:latest \
--model-id <MODEL_ID> --port 80
TGI Benchmark
TGI 提供了内置的性能基准测试工具,用于评估不同配置下的推理性能。
运行基准测试
-
安装基准工具
make install-benchmark
-
启动服务与测试
text-generation-launcher --model-id <MODEL_PATH> --trust-remote-code --port 4000
text-generation-benchmark --tokenizer-name <TOKENIZER_PATH> \
--batch-size 1 --batch-size 2 --batch-size 4 --batch-size 8 \
--batch-size 16 --batch-size 32 --batch-size 64
-
结果分析
- Batch Size: 通过 Tab 键切换不同批大小,观察性能变化。
- 延迟指标: p50、p90、p99 表示大多数情况下的延迟分布。
- Token 树: 监控 token 数量和延迟关系。若延迟随 Token 增加显著上升,需寻找拐点以确定最佳配置。
- 硬件调整: 若 Token 数量不足导致延迟高,可增加显卡;若 Token 过多,可考虑降低硬件配置以节省成本。
注意事项
TGI 依赖 vllm、flash attention、gptq 等组件。建议按源码编译安装顺序为:vllm >> gptq >> flash attention。确保系统环境变量正确配置,特别是 CUDA 版本与 PyTorch/Rust 版本的兼容性。
常见问题
- 显存溢出: 尝试减小
--max-total-tokens 或 --cuda-memory-fraction。
- 连接拒绝: 检查防火墙设置及端口是否被占用。
- 模型加载失败: 确认
--trust-remote-code 已开启,且模型文件完整。