当前位置: 首页 > article >正文

使用 vllm 搭建推理加速大模型服务

本文将介绍如下内容:

  • 一、什么是vLLM
  • 二、安装vLLM
  • 三、vLLM 推理加速原理
  • 四、vLLM 推理加速实践

一、什么是 vLLM

vLLM(Vectorized Large Language Model Serving System)是一个大语言模型推理加速工具。

  • vLLM论文链接如下:
    Efficient Memory Management for Large Language Model Serving with PagedAttention
  • vLLM github 如下:
    https://github.com/vllm-project/vllm
  • vllm 官方文档如下:
    https://docs.vllm.ai/en/latest/

二、快速安装 vLLM

1、使用 pip 安装 vLLM
# Install vLLM with CUDA 12.1.
pip install vllm # If you are using pip.
uv pip install vllm # If you are using uv.
2、使用编译的 vLLM 二进制文件
# Install vLLM with CUDA 11.8.
export VLLM_VERSION=0.6.1.post1
export PYTHON_VERSION=310
pip install https://github.com/vllm-project/vllm/releases/download/v${VLLM_VERSION}/vllm-${VLLM_VERSION}+cu118-cp${PYTHON_VERSION}-cp${PYTHON_VERSION}-manylinux1_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu118
3、使用安装最新代码pip
pip install vllm --pre --extra-index-url https://wheels.vllm.ai/nightly

uv pip install vllm --extra-index-url https://wheels.vllm.ai/nightly
4、更多安装方式参考如下官方文档:

参考:https://docs.vllm.ai/en/latest/getting_started/installation/gpu/index.html

三、vLLM 加速原理

1、PagedAttention技术:

PagedAttention 是一种内存管理技术,它可以将注意力机制中的键和值存储在不连续的显存空间中,从而减少显存碎片,提高显存利用率。

2、连续批处理:

vLLM能够连续批处理接入的请求,这使得它能够充分利用GPU资源,提高吞吐量。

3、CUDA核心优化:

vLLM 针对 CUDA 内核,包括与 FlashAttention 和 FlashInfer 的集成优化,确保了速度与效率。

4、分布式推理支持:

vLLM支持分布式推理,这使得它能够在多台GPU上并行运行模型,进一步提高推理速度。

5、量化:

GPTQ、AWQ、INT4、INT8 和 FP8。

四、vLLM 推理加速部署

1、完整参数服务部署
# 方式1:
CUDA_VISIBLE_DEVICES=1,2,3,4 python3 -m vllm.entrypoints.openai.api_server \
--model "/nasdata/zhanjie/models/Qwen2.5-32B-Instruct" \
--host 0.0.0.0 \
--served-model-name Qwen2.5-32B \
--trust-remote-code \
--port 6006 \
--tensor-parallel-size 4 \
--max-model-len 8192 \
--dtype half

# 方式2:
CUDA_VISIBLE_DEVICES=0  vllm serve /home/ai/Models/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 6006 \
--max-model-len 8192 \
--dtype half
2、单、多份 Lora 服务部署
2.1、单份 Lora 服务部署
  • vllm服务部署
CUDA_VISIBLE_DEVICES=1,2,3,4 python3 -m vllm.entrypoints.openai.api_server \
--model "/nasdata/zhanjie/models/Qwen2.5-32B-Instruct" \
--enable-lora \
--lora-modules qwen2.5-lora=/nasdata/zhanjie/models/qwen2_5-32B-lora-1-0-5 \
--served-model-name Qwen2.5-32B-105  \
--trust-remote-code \
--host 0.0.0.0 \
--tensor-parallel-size 4 \
--port 6006 \
--max-model-len 8192 \
--dtype half

超参数解释含义如下:

  • CUDA_VISIBLE_DEVICES=1,2,3,4
    这个环境变量用于指定要使用的 GPU 设备。这里选择了编号为 1, 2, 3, 4 的 4 个 GPU 设备。这个参数对于在多 GPU 环境中运行模型非常重要。

  • python3 -m vllm.entrypoints.openai.api_server
    这条命令启动了 vllm 的 API 服务器。vllm 是一个优化的深度学习推理框架,支持 OpenAI API 风格的接口。

  • enable-lora
    启用 LoRA(Low-Rank Adaptation)技术。LoRA 是一种用于高效微调预训练大模型的方法,通过低秩矩阵来修改模型,使得它在资源受限的情况下也能有效地进行特定任务的调整。

  • lora-modules qwen2.5-lora=/nasdata/zhanjie/models/qwen2_5-32B-lora-1-0-5
    这是指定 LoRA 模块的路径。qwen2.5-lora 是 LoRA 微调模块,路径指定了相关的模型文件。这会将 LoRA 微调应用到 Qwen2.5-32B-Instruct 模型。

  • served-model-name Qwen2.5-32B-105
    这是在 API 服务器中暴露的模型名称。这个名称用于 API 调用时,用户可以通过这个名称访问模型。

  • trust-remote-code
    这个参数表示信任远程代码执行。它允许从模型仓库或者远程资源加载并执行代码。这对于加载需要外部代码支持的模型(例如某些自定义实现)很有用。

  • host 0.0.0.0
    这个参数指定了服务器的绑定地址,0.0.0.0 表示该服务将监听所有网络接口上的请求。这通常用于让 API 服务在局域网或广域网上访问。

  • tensor-parallel-size 4
    这个参数设置了张量并行的大小。由于模型非常大,通常需要将计算分布到多个 GPU 上进行并行计算。这里设置了 4,意味着会使用 4 个 GPU 来进行张量并行计算。

  • port 6006
    指定 API 服务器监听的端口号。默认情况下,6006 是 TensorBoard 的端口号,但在此用于 API 服务器监听。客户端可以通过该端口进行 API 请求。

  • max-model-len 8192
    该参数设置模型的最大输入长度为 8192。即模型在一次推理中最多可以处理 8192 个标记(tokens)。这是一个与序列长度相关的限制,过长的输入会被截断。

  • dtype half
    这个参数指定了数据类型为 half(即 16 位浮点数)。使用 16 位浮点数可以大幅减少内存使用和计算资源,通常用于推理过程中的加速和资源节省。

2.2、多份 Lora 服务部署
BASE_MODEL="/nasdata/zhanjie/models/Qwen2.5-32B-Instruct"
LORA_MODULES="adapter1=/nasdata/zhanjie/models/qwen2_5-32B-lora-1-0-5 adapter2=/nasdata/zhanjie/models/qwen2_5-32B-lora-1-0-7"
SERVED_MODEL_NAME="qwen2.5-32b"

CUDA_VISIBLE_DEVICES=1,2,3,4 python3 -m vllm.entrypoints.openai.api_server \
    --model $BASE_MODEL \
    --served-model-name $SERVED_MODEL_NAME \
    --enable-lora \
    --lora-modules $LORA_MODULES \
    --trust-remote-code \
    --tensor-parallel-size 4 \
    --max-model-len 8192 \
    --dtype half \
    --host 0.0.0.0 \
    --port 6006
3、Openai 范式调用模型推理服务
Todo
4、多模态大模型 vLLM 部署
Todo
5、Embedding 模型 vLLM 部署
Todo
6、推理性能对比
Todo

http://www.kler.cn/a/530099.html

相关文章:

  • FBX SDK的使用:基础知识
  • 星际智慧农业系统(SAS),智慧农业的未来篇章
  • Ollama+OpenWebUI部署本地大模型
  • 操作系统和中间件的信息收集
  • 索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实?(中英双语)
  • Python-列表
  • OpenAI 实战进阶教程 - 第二节:生成与解析结构化数据:从文本到表格
  • 想品客老师的第天:类
  • Java集合+并发(部分)
  • MultiResUNet学习笔记(2019 Neural Networks【SCI 1区】)
  • 用结构加法3ax+1预测第4点的分布
  • 掌握Spring MVC异常处理的艺术
  • ICLR 2025收录论文:为什么动作分块对于机器人灵活性至关重要?
  • makailio-alias_db模块详解
  • 蓝桥杯备考:六大排序算法
  • Hive重点面试题
  • #define,源文件与头文件,赋值表达式
  • Java项目: 基于SpringBoot+mybatis+maven+mysql实现的疾病防控综合管理系统(含源码+数据库+毕业论文)
  • springboot中路径默认配置与重定向/转发所存在的域对象
  • react注意事项
  • 6 [新一代Github投毒针对网络安全人员钓鱼]
  • 【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO
  • 双指针算法思想——OJ例题扩展算法解析思路
  • 悬浮按钮和可交互提示的使用
  • 设计数据库表会考虑哪些内容?
  • 文字投影效果