随着大语言模型(LLM)的普及,如何在本地高效部署和调用模型成为开发者关注的重点。本文将通过Docker容器化技术结合vLLM高性能推理框架,实现本地大模型的快速部署和API服务搭建。

一、技术选型

  1. vLLM

    • 由伯克利大学开发的高吞吐推理框架
    • 支持HuggingFace模型格式
    • 基于PagedAttention的显存优化技术
  2. Docker

    • 实现环境隔离与依赖管理
    • 方便模型服务的部署与迁移
    • 支持GPU加速

二、环境准备

前置条件

  • NVIDIA显卡(建议RTX 3090+/显存≥24GB)
  • Docker 20.10+
  • NVIDIA Container Toolkit
  • CUDA 11.8+
1
2
3
4
# 验证Docker安装
docker --version
# 确认NVIDIA支持
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

三、构建Docker镜像

1. 创建Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04

RUN apt-get update && \
apt-get install -y python3.10 python3-pip git && \
apt-get clean

WORKDIR /app
COPY . .

RUN pip install --no-cache-dir \
vllm==0.4.1 \
fastapi==0.110.0 \
"uvicorn[standard]"==0.27.1

# 创建模型存储目录
RUN mkdir -p /app/models

EXPOSE 8000
CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8000"]

2. 构建镜像

1
docker build -t vllm-api .

四、准备大模型

  1. 下载模型(以Llama-2-7b-chat为例):

    1
    2
    3
    # 需先申请模型权限
    git lfs install
    git clone https://huggingface.co/meta-llama/Llama-2-7b-chat-hf
  2. 转换模型格式(如需):

    1
    2
    3
    4
    from vllm import LLM

    llm = LLM(model="Llama-2-7b-chat-hf")
    llm.save("llama-2-7b-chat-vllm")

五、编写API服务

api.py 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from fastapi import FastAPI
from vllm import SamplingParams
from vllm.engine.arg_utils import AsyncEngineArgs
from vllm.engine.async_llm_engine import AsyncLLMEngine

app = FastAPI()

# 初始化引擎
engine_args = AsyncEngineArgs(
model="/app/models/llama-2-7b-chat-vllm",
tensor_parallel_size=1,
gpu_memory_utilization=0.9
)
engine = AsyncLLMEngine.from_engine_args(engine_args)

@app.post("/generate")
async def generate(prompt: str):
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.9,
max_tokens=512
)

results = await engine.generate(
prompt=prompt,
sampling_params=sampling_params,
request_id="demo_request"
)

return {"response": results[0].outputs[0].text}

六、运行服务

1
2
3
4
5
docker run -d --gpus all \
-p 8000:8000 \
-v /path/to/models:/app/models \
--name vllm-service \
vllm-api

七、测试API

1. 使用curl测试

1
2
3
curl -X POST "http://localhost:8000/generate" \
-H "Content-Type: application/json" \
-d '{"prompt": "如何制作抹茶拿铁?"}'

2. Python客户端示例

1
2
3
4
5
6
7
import requests

response = requests.post(
"http://localhost:8000/generate",
json={"prompt": "解释量子计算的基本原理"}
)
print(response.json()["response"])

八、优化建议

  1. 性能调优

    • 调整tensor_parallel_size匹配GPU数量
    • 使用--disable-log-stats提升吞吐量
    • 启用量化(AWQ/GPTQ)
  2. 注意事项

    • 模型文件建议使用SSD存储
    • 首次加载需要较长时间(约2-5分钟)
    • 监控显存使用情况

总结

通过Docker与vLLM的结合,我们实现了:
✅ 一键式环境部署
✅ 高效的模型推理
✅ 便捷的API服务
✅ 资源隔离与可移植性


相关资源

欢迎在评论区交流部署经验! 🚀