ChatGLM3-6B 使用 vLLM 部署最佳实践¶
1. 环境准备¶
1.1 硬件要求¶
- NVIDIA GPU:至少 12GB 显存(推荐 16GB 或以上)
- 推荐显卡:NVIDIA A10/A100/H100/L4/T4
- 最低支持:NVIDIA RTX 3060 12GB
- 内存:至少 16GB(推荐 32GB)
- 存储:至少 30GB 可用空间
1.2 软件要求¶
- Ubuntu 20.04/22.04 LTS
- CUDA 11.8 及以上
- Python 3.8+
- Docker(可选,推荐使用)
2. 安装部署¶
2.1 基础环境安装¶
# 创建虚拟环境
python -m venv venv
source venv/bin/activate
# 安装基础依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install vllm transformers accelerate
2.2 Docker 部署(推荐)¶
- 创建 Dockerfile:
FROM nvidia/cuda:11.8.0-devel-ubuntu22.04
WORKDIR /app
# 安装系统依赖
RUN apt-get update && apt-get install -y \
python3.10 \
python3-pip \
git \
&& rm -rf /var/lib/apt/lists/*
# 安装 Python 依赖
RUN pip3 install --no-cache-dir \
torch \
vllm \
transformers \
accelerate \
sentencepiece
# 设置环境变量
ENV CUDA_VISIBLE_DEVICES=all
# 下载模型(可选,也可以通过挂载卷的方式加载模型)
RUN pip3 install modelscope
RUN python3 -c "from modelscope import snapshot_download; snapshot_download('ZhipuAI/chatglm3-6b')"
EXPOSE 8000
CMD ["python3", "-m", "vllm.entrypoints.openai.api_server", \
"--host", "0.0.0.0", \
"--port", "8000", \
"--model", "ZhipuAI/chatglm3-6b", \
"--trust-remote-code"]
- 创建 docker-compose.yml:
version: '3'
services:
chatglm3-vllm:
build: .
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
ports:
- "8000:8000"
volumes:
- ./models:/app/models # 如果使用本地模型
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
- 启动服务:
docker-compose up -d
2.3 直接部署¶
# 下载模型
pip install modelscope
python -c "from modelscope import snapshot_download; snapshot_download('ZhipuAI/chatglm3-6b')"
# 启动服务
python -m vllm.entrypoints.openai.api_server \
--model ZhipuAI/chatglm3-6b \
--trust-remote-code \
--host 0.0.0.0 \
--port 8000
3. 性能优化¶
3.1 显存优化¶
# 启动时添加显存优化参数
python -m vllm.entrypoints.openai.api_server \
--model ZhipuAI/chatglm3-6b \
--trust-remote-code \
--gpu-memory-utilization 0.85 \
--max-num-batched-tokens 4096 \
--max-num-seqs 256
3.2 多 GPU 部署¶
# 使用张量并行
python -m vllm.entrypoints.openai.api_server \
--model ZhipuAI/chatglm3-6b \
--trust-remote-code \
--tensor-parallel-size 2
3.3 量化部署¶
# 使用 4bit 量化(如果模型支持)
python -m vllm.entrypoints.openai.api_server \
--model ZhipuAI/chatglm3-6b \
--trust-remote-code \
--quantization awq \
--dtype float16
4. API 调用示例¶
4.1 Python 示例¶
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")
# 单轮对话
completion = client.chat.completions.create(
model="chatglm3-6b",
messages=[
{"role": "user", "content": "你好,请介绍一下你自己"}
],
temperature=0.7,
max_tokens=2048
)
print(completion.choices[0].message.content)
# 多轮对话
messages = [
{"role": "system", "content": "你是一个专业的AI助手"},
{"role": "user", "content": "你好,请介绍一下你自己"},
{"role": "assistant", "content": "我是 ChatGLM3-6B,一个由智谱AI训练的语言模型"},
{"role": "user", "content": "你能做什么?"}
]
completion = client.chat.completions.create(
model="chatglm3-6b",
messages=messages,
temperature=0.7,
max_tokens=2048
)
print(completion.choices[0].message.content)
4.2 CURL 示例¶
# 发送请求
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "chatglm3-6b",
"messages": [
{"role": "user", "content": "你好,请介绍一下你自己"}
],
"temperature": 0.7,
"max_tokens": 2048
}'
5. 监控和日志¶
5.1 GPU 监控¶
# 安装 nvidia-smi 工具
apt-get install nvidia-utils-525
# 实时监控 GPU 使用情况
watch -n 1 nvidia-smi
# 使用 dcgm-exporter 进行 Prometheus 监控
docker run -d --gpus all --rm -p 9400:9400 nvidia/dcgm-exporter:3.1.7-3.1.5
5.2 服务监控¶
# 添加 Prometheus 监控
from prometheus_client import Counter, Histogram, start_http_server
# 定义指标
request_count = Counter('chatglm_requests_total', 'Total requests')
latency = Histogram('chatglm_request_latency_seconds', 'Request latency')
# 启动 Prometheus 服务器
start_http_server(8001)
6. 常见问题处理¶
6.1 显存不足¶
# 降低批处理大小
--max-num-batched-tokens 2048
# 降低显存使用率
--gpu-memory-utilization 0.75
# 使用量化版本
--quantization awq
6.2 模型加载失败¶
# 清理模型缓存
rm -rf ~/.cache/huggingface/
rm -rf ~/.cache/modelscope/
# 重新下载模型
python -c "from modelscope import snapshot_download; snapshot_download('ZhipuAI/chatglm3-6b', cache_dir='./models')"
6.3 性能调优¶
# 使用 Flash Attention
export VLLM_USE_FLASH_ATTENTION=True
# 启用异步执行
export VLLM_ASYNC_EXECUTE=True
# 调整批处理参数
--max-num-seqs 128
--max-num-batched-tokens 4096
7. 生产环境配置¶
7.1 负载均衡配置¶
使用 Nginx 配置示例:
upstream chatglm_backend {
server localhost:8000;
# 如果有多个实例,添加更多服务器
# server localhost:8001;
# server localhost:8002;
}
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://chatglm_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
7.2 高可用配置¶
- 使用 Kubernetes 部署多个实例
- 配置健康检查
- 设置自动扩缩容
- 实现故障转移
8. 参考资源¶
9. 更新日志¶
- 2024-03-22: 初始版本
- 2024-03-23: 添加多 GPU 部署说明
- 2024-03-24: 更新性能优化建议