跳转至

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 部署(推荐)

  1. 创建 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"]
  1. 创建 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]
  1. 启动服务:
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 高可用配置

  1. 使用 Kubernetes 部署多个实例
  2. 配置健康检查
  3. 设置自动扩缩容
  4. 实现故障转移

8. 参考资源

9. 更新日志

  • 2024-03-22: 初始版本
  • 2024-03-23: 添加多 GPU 部署说明
  • 2024-03-24: 更新性能优化建议
回到页面顶部