随着大语言模型(LLM)的普及,如何在本地高效部署和调用模型成为开发者关注的重点。本文将通过Docker容器化技术结合vLLM高性能推理框架,实现本地大模型的快速部署和API服务搭建。
一、技术选型
vLLM
由伯克利大学开发的高吞吐推理框架
支持HuggingFace模型格式
基于PagedAttention的显存优化技术
Docker
实现环境隔离与依赖管理
方便模型服务的部署与迁移
支持GPU加速
二、环境准备 前置条件
NVIDIA显卡(建议RTX 3090+/显存≥24GB)
Docker 20.10+
NVIDIA Container Toolkit
CUDA 11.8+
1 2 3 4 docker --version 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 .
四、准备大模型
下载模型(以Llama-2-7b-chat为例):
1 2 3 git lfs install git clone https://huggingface.co/meta-llama/Llama-2-7b-chat-hf
转换模型格式(如需):
1 2 3 4 from vllm import LLMllm = 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 FastAPIfrom vllm import SamplingParamsfrom vllm.engine.arg_utils import AsyncEngineArgsfrom vllm.engine.async_llm_engine import AsyncLLMEngineapp = 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 requestsresponse = requests.post( "http://localhost:8000/generate" , json={"prompt" : "解释量子计算的基本原理" } ) print (response.json()["response" ])
八、优化建议
性能调优
调整tensor_parallel_size
匹配GPU数量
使用--disable-log-stats
提升吞吐量
启用量化(AWQ/GPTQ)
注意事项
模型文件建议使用SSD存储
首次加载需要较长时间(约2-5分钟)
监控显存使用情况
总结 通过Docker与vLLM的结合,我们实现了: ✅ 一键式环境部署 ✅ 高效的模型推理 ✅ 便捷的API服务 ✅ 资源隔离与可移植性
相关资源
欢迎在评论区交流部署经验! 🚀