VLLM部署大模型完整教程

VLLM部署大模型完整教程

1. 简介

VLLM(Very Large Language Model)是一个高效、可扩展的框架,用于部署和推理大规模语言模型。它支持多种主流大模型架构,如LLaMA、ChatGLM、Bloom等,并提供了高性能的推理能力。

本文将详细介绍如何使用VLLM部署大模型,涵盖环境准备、模型加载、推理服务搭建以及性能优化等内容。

vLLM 是 GPU-first 框架,CPU 推理几乎不可用

2. 环境准备

2.1 安装依赖

⚠️ 注意:
vLLM 主要面向 GPU 推理场景设计。
在纯 CPU 环境下虽然可以强制启动,但性能极差,不适合实际使用。
如仅有 CPU,建议使用 llama.cpp 或 Ollama。

确保你的系统满足以下要求:

  • Python >= 3.8
  • CUDA >= 11.0(GPU支持)
  • PyTorch >= 1.13

安装VLLM及其依赖:

# 安装 vLLM(指定 CUDA 版本,根据你的 CUDA 版本选择)
# 例如 CUDA 12.8:
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:https://mirrors.aliyun.com/pypi/simple/
豆瓣:https://pypi.doubanio.com/simple/

2.2 检查硬件配置

建议使用NVIDIA GPU,至少具备16GB显存以支持较大的模型。可以通过以下命令检查CUDA状态:

nvidia-smi

3. 模型加载与推理

3.1 下载预训练模型

你可以从Hugging Face、魔塔社区或官方渠道下载你需要的大模型。例如,下载LLaMA-2-7B:

git lfs install
git clone https://huggingface.co/meta-llama/Llama-2-7b-hf

3.2 命令部署大模型

普通部署
python3 -m vllm.entrypoints.api_server \
  --model meta-llama/Llama-2-7b-chat-hf \
  --port 8000
指定使用 GPU 2~5(共 4 张卡)
CUDA_VISIBLE_DEVICES=2,3,4,5 python3 -m vllm.entrypoints.api_server \
  --model meta-llama/Llama-2-7b-chat-hf \
  --tensor-parallel-size 4 \
  --port 8000

–tensor-parallel-size = 用来把「一个模型」切成多少份,分布到多少张 GPU 上做“张量级并行推理”

若使用openai规范则
CUDA_VISIBLE_DEVICES=2,3,4,5 python3 -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-2-7b-chat-hf \
  --tensor-parallel-size 4 \
  --port 8000
OpenAI API 规范(最主流)

● 定义方:OpenAI(GPT 系列模型的接口标准)。
● 核心特点:
○ 接口路径以 /v1/ 为前缀,例如:
■ 对话接口:POST /v1/chat/completions
■ 文本生成接口:POST /v1/completions
■ 嵌入接口:POST /v1/embeddings
○ 请求参数标准化(如 model、messages、temperature、max_tokens 等)。
○ 响应格式统一(包含 id、object、created、choices、usage 等字段)。
● 兼容性:几乎所有主流大模型框架(vLLM、Text Generation Inference、 llama.cpp 等)都支持兼容此规范,生态最完善(如 LangChain、LLamaIndex 等工具默认适配)。

vLLM 原生规范

● 定义方:vLLM 自身的接口标准(非兼容模式)。
● 核心特点:
○ 接口路径简单,如 /generate(文本生成)、/health(健康检查)。
○ 参数更贴合 vLLM 的底层功能(如 tensor_parallel_size、gpu_memory_utilization 等)。
○ 响应格式简洁,直接返回生成的文本内容(如 {“text”: “生成结果”})。
● 适用场景:仅用于直接调用 vLLM 部署的模型,不依赖外部生态时更轻量。

3.3 Python使用VLLM加载模型

from vllm import LLM, SamplingParams

# 初始化LLM实例
llm = LLM(model="meta-llama/Llama-2-7b-hf", dtype="float16")

# 设置采样参数
sampling_params = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=256)

# 推理请求
prompt = "Hello, how are you?"
outputs = llm.generate(prompts=[prompt], sampling_params=sampling_params)

for output in outputs:
    print(f"Generated: {output.text}")

4. 搭建推理服务

4.1 使用FastAPI构建API服务

创建一个简单的REST API服务,供外部调用:

from fastapi import FastAPI
from pydantic import BaseModel
from vllm import LLM, SamplingParams

app = FastAPI()

# 初始化LLM
llm = LLM(model="meta-llama/Llama-2-7b-hf", dtype="float16")

class GenerateRequest(BaseModel):
    prompt: str
    max_tokens: int = 256
    temperature: float = 0.7
    top_p: float = 0.9

@app.post("/generate")
async def generate(request: GenerateRequest):
    sampling_params = SamplingParams(
        temperature=request.temperature,
        top_p=request.top_p,
        max_tokens=request.max_tokens
    )
    outputs = llm.generate(prompts=[request.prompt], sampling_params=sampling_params)
    return {"generated_text": outputs[0].text}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

启动服务:

uvicorn main:app --reload

4.2 测试API

使用curl测试接口:

curl -X POST http://localhost:8000/generate -H "Content-Type: application/json" -d '{"prompt": "Tell me a story about space travel.", "max_tokens": 100}'

5. 性能优化建议

  • 量化:使用FP16或INT8量化降低显存占用。
  • 批处理:通过设置max_num_batched_tokens提高吞吐量。
  • 缓存机制:启用KV Cache以减少重复计算。
  • 多GPU支持:通过tensor_parallel_size实现分布式推理。

6. 常见问题与解决方案

  • OOM(显存不足):尝试减小max_tokens或使用量化。
  • 推理速度慢:检查是否启用了正确的CUDA版本及驱动。
  • 模型无法加载:确认模型路径正确且已下载完整文件。

7. 结语

VLLM为大模型的部署提供了强大而灵活的工具链。通过本教程,你应该能够快速上手并部署自己的大模型服务。未来可以结合Docker、Kubernetes等技术进一步实现生产级部署。


参考链接


欢迎在评论区交流经验,提出改进建议!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值