vLLM私有化部署大语言模型LLM
目录
一、vLLM介绍
二、安装vLLM
1、安装环境
2、安装步骤
三、运行vLLM
1、运行方式
2、切换模型下载源
3、运行本地已下载模型
四、通过http访问vLLM
一、vLLM介绍
vLLM(官方网址:https://www.vllm.ai)是一种用于大规模语言模型(LLM)推理的框架,旨在提高模型的吞吐量和降低延迟。vLLM通过优化内存管理和调度策略,显著提升了模型在高并发场景下的性能。vLLM利用了一种名为PagedAttention的注意力机制,该机制借鉴了虚拟内存和分页技术,以减少缓存内存(KV Cache)的浪费,并允许在请求之间灵活共享KV缓存。这种设计使得vLLM在保持与现有系统相同延迟水平的情况下,能够将吞吐量提高2到4倍。特点:
-
速度快: 在每个请求需要 3 个并行输出完成时的服务吞吐量。vLLM 比 HuggingFace Transformers(HF)的吞吐量高出 8.5 倍-15 倍,比 HuggingFace 文本生成推理(TGI)的吞吐量高出 3.3 倍-3.5 倍
-
优化的 CUDA 内核
-
灵活且易于使用
-
与流行的 Hugging Face 模型(和魔塔社区)无缝集成
-
高吞吐量服务,支持多种解码算法,包括并行抽样、束搜索等
-
支持张量并行处理,实现分布式推理
-
支持流式输出
-
兼容 OpenAI API
二、安装vLLM
1、安装环境
- 硬件CPU:12 vCPU Intel(R) Xeon
- 内存MEM:48GB
- 显卡:RTX 3080单卡
- 操作系统:Ubuntu 22.04.1 LTS
- CUDA版本:cuda_11.8 (通过nvcc --version查看结果)
- 已安装:miniconda3版本:conda 22.11.1
2、安装步骤
根据vLLM官网的安装说明(网址:https://docs.vllm.ai/en/latest/getting_started/installation/ ),分为三大类:GPU、CPU、其他。 每类中根据具体的安排硬件平台不同还进行不同的细分。

由于本文所用硬件环境是带CUDA的GPU,因此选择GPU-CUDA方式进行安装。
步骤如下:
1) 前置准备:对git增加LFS能力。Git LFS是一个扩展,允许将大文件(如音频、视频、数据集等)存储在Git仓库中,而不会显著增加仓库的大小或影响性能。通过安装Git LFS钩子(hooks),Git LFS能够自动处理这些大文件的上传和下载,确保它们以优化的方式存储在远程仓库中,并在需要时检索到本地。
#若Linux中未安装Git LFS(Large File Storage),则先安装
sudo apt-get install git-lfs#初始化,用于在本地Git仓库中安装Git Large File Storage(LFS)的钩子(hooks)。
git lfs install
2) 通过miniconda创建虚拟环境,名为env-vllm
#通过conda创建一个新虚拟环境,指定虚拟环境中包括python3.12的packages
conda create -n env-vllm python=3.12 -y#激活使用该虚拟环境
conda activate env-vllm
3) 在虚拟环境中,通过pip自动下载并安装vllm,过程可能需要几十分钟。注意需根据CUDA版本选择安装(由于低版本vLLM存在bug #8443导致VLLM_USE_MODELSCOPE环境变量不生效。在v0.6.3版本修复了该bug,所以直接下载适配CUDA 11.8的新版vllm)
#截止2025年初,默认安装vLLM’s binaries are compiled with CUDA 12.1 and public PyTorch release versions
pip install vllm#根据自身环境,若希望安装vLLM binaries compiled with CUDA 11.8 and public PyTorch release versions,则:
export VLLM_VERSION=0.6.1.post2
export PYTHON_VERSION=312
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#由于低版本vLLM存在bug #8443导致VLLM_USE_MODELSCOPE环境变量不生效。在v0.6.3版本修复了该bug,所以直接下载适配CUDA 11.8的新版vllm
pip install https://github.com/vllm-project/vllm/releases/download/v0.6.6.post1/vllm-0.6.6.post1+cu118-cp38-abi3-manylinux1_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu118
4) 在虚拟环境中,可以使用pip show vllm对查看安装结果:

三、运行vLLM
1、运行方式
通过以下可运行vllm,根据模型名称默认自动从 HuggingFace 下载并运行:
# 运行vllm,根据模型名称默认自动从 HuggingFace 下载并运行
vllm serve "模型名称"# 也可以通过以下执行python代码方式运行vllm
python -m vllm.entrypoints.openai.api_server --model="模型名称" --trust-remote-code --port 8000
注:vllm运行有许多选项,可以通过vllm serve --help查看各个选项用途。或者查看官网文档:https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html#command-line-arguments-for-the-server
2、切换模型下载源
vLLM的模型下载默认来源为 HuggingFace 。在国内访问很可能不畅,为此改从国内的 魔搭社区 下载模型。既在运行前先设置VLLM_USE_MODELSCOPE=True既可切换下载源为 魔搭社区 。 (注意:在HuggingFace与魔塔社区上模型名称可能略有不同)。
# 使用魔塔社区,需要先安装package
pip install modelscope
# 设置环境变量VLLM_USE_MODELSCOPE=True切换下载源为:魔搭社区
# 注意:低版本vLLM存在bug #8443导致该环境变量不生效。在v0.6.3版本修复了该bug
export VLLM_USE_MODELSCOPE=True# 运行vllm,由于设置了环境变量,根据模型名称默认自动从 魔搭社区 下载并运行
vllm serve "Qwen/Qwen2.5-0.5B-Instruct"
# 也可以通过以下执行python代码方式运行vllm
python -m vllm.entrypoints.openai.api_server --model="Qwen/Qwen2.5-0.5B-Instruct" --trust-remote-code --port 8000
3、运行本地已下载模型
除了以上自动下载的方式,还可以通过指定模型所在路径方式运行(需要先下载准备好),这样有几个好处:一是模型来源可以丰富多样,不仅仅局限以上两个平台;二是运行vLLM时无需再联网下载,比较适合内网服务器。
下面以模型“Yi-1.5-6B-Chat”为例, 提前通过git下载模型(需要确保lfs已经安装且初始化,具体见前文)。
cd /root/autodl-tmp/my_models
# 提前通过git下载模型(需要确保lfs已经安装且初始化,具体见前文)
git clone https://www.modelscope.cn/01ai/Yi-1.5-6B-Chat.git
通过指定本地模型所在路径运行vLLM:
# 运行vllm,指定本地模型所在路径
vllm serve "/root/autodl-tmp/my_models/Yi-1.5-6B-Chat"
# 也可以通过以下执行python代码方式运行vllm
python -m vllm.entrypoints.openai.api_server --model="/root/autodl-tmp/my_models/Yi-1.5-6B-Chat" --trust-remote-code --port 8000
注:此例中,指定本地模型所在路径运行vLLM的模型名为:/root/autodl-tmp/my_models/Yi-1.5-6B-Chat
四、通过http访问vLLM
vLLM提供了http接口。下面通过curl验证效果。
# Call the vllm server using curl:
curl -X POST http://localhost:8000/v1/chat/completions \-H "Content-Type: application/json" \--data '{"model": "Qwen/Qwen2.5-0.5B-Instruct","messages": [{"role": "user","content": "What is the capital of China?"}]}'
chat返回结果(已经格式化排版)如下
{"id": "chatcmpl-f0cbdea8e1fb41528d1ec2cb0e198498","object": "chat.completion","created": 1736836496,"model": "Qwen/Qwen2.5-0.5B-Instruct","choices": [{"index": 0,"message": {"role": "assistant","content": "The capital of China is Beijing.","tool_calls": []},"logprobs": null,"finish_reason": "stop","stop_reason": null}],"usage": {"prompt_tokens": 36,"total_tokens": 44,"completion_tokens": 8,"prompt_tokens_details": null},"prompt_logprobs": null
}
vLLM还暴露了各类metrics,供检测vllm的运行状态:
curl http://localhost:8000/metrics

相关文章:
vLLM私有化部署大语言模型LLM
目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM(官方网址:https://www.vllm.ai)是一种用于大规模语言模型&#x…...
OpenAI Whisper:语音识别技术的革新者—深入架构与参数
当下语音识别技术正以前所未有的速度发展,极大地推动了人机交互的便利性和效率。OpenAI的Whisper系统无疑是这一领域的佼佼者,它凭借其卓越的性能、广泛的适用性和创新的技术架构,正在重新定义语音转文本技术的规则。今天我们一起了解一下Whi…...
基于当前最前沿的前端(Vue3 + Vite + Antdv)和后台(Spring boot)实现的低代码开发平台
项目是一个基于当前最前沿的前端技术栈(Vue3 Vite Ant Design Vue,简称Antdv)和后台技术栈(Spring Boot)实现的低代码开发平台。以下是对该项目的详细介绍: 一、项目概述 项目名称:lowcode-s…...
【Rust】错误处理机制
目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误(Recoverable Errors) 2.2 不可恢复错误(Unrecoverable Errors) 三、Rust 的错误处理机制 3…...
Logback日志技术
Logback日志技术 日志 日志(Logging)是软件开发和运维中用于记录系统或应用程序运行期间发生的运行信息、状态变化、错误信息等的一种机制,这种记录的方式就好像我们日常生活中写日记一样。它提供了一种持久化的方式,使得开发者…...
9分布式微服务架构
分布式微服务架构不光需要从架构上的设计优化系统,还要在编码上优化达到最好的效果 中心化的设计 中心化的设计比较简单,分布式集群中的角色分为两种,管理者和被管理者。 在一个分布式或者集群中,管理者角色管理着其他处理实际…...
Leecode刷题C语言之统计重新排列后包含另一个字符串的子字符串数目②
执行结果:通过 执行用时和内存消耗如下: void update(int *diff, int c, int add, int *cnt) {diff[c] add;if (add 1 && diff[c] 0) {// 表明 diff[c] 由 -1 变为 0(*cnt)--;} else if (add -1 && diff[c] -1) {// 表明 diff[c] 由 0 变为 -…...
HTML和CSS相关的问题,为什么页面加载速度慢?
页面加载速度慢是网站优化中一个常见的问题,可能由于多种原因,包括HTML和CSS的代码编写方式、资源的加载顺序、页面渲染的复杂性等。以下是一些常见的原因和优化方法,结合实际项目代码示例进行讲解。 1. 过多的资源请求 如果页面包含大量的…...
LiveGBS流媒体平台GB/T28181常见问题-没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理?
LiveGBS没有收到视频流播放时候提示none rtp data receive未收到摄像头推流如何处理? 1、none rtp data receive2、搭建GB28181视频直播平台 1、none rtp data receive LiveSMS 收不到下级推流 首先需要排查服务器端 UDP & TCP 30000-30249 端口是否开放其次排…...
Flask表单处理与验证
Flask是一个轻量级的Python框架,它通过扩展库提供了对表单处理与验证的支持。WTForms是一个流行的Flask扩展库,用于创建和验证Web表单。它提供了一种声明式的方法来定义表单结构和验证逻辑,使得表单处理更为简洁和优雅。下面,我们…...
正泰电工携手图扑:变电站数字孪生巡检平台
随着电力行业的快速发展与智能化转型,传统的人工巡检方式难以匹配现代电网对于效率、安全和精细化管理的高标准要求。在此背景下,构建智慧变电站巡检系统已成为推动变电站智能化进程、实现高效运营和保障电网可靠性的重要战略。 图扑软件与正泰电工联合…...
瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 视频硬件编解码-代码版
前言 在上一篇文章中,我们讲解了如何使用 ffmpeg-rockchip 通过命令来实现 MPP 视频硬件编解码和 RGA 硬件图形加速,在这篇文章,我将讲解如何使用 ffmpeg-rockchip 用户空间库(代码)实现 MPP 硬件编解码。 本文不仅适…...
uniapp 预加载分包,减少loading
在 uniapp 中,可以通过配置 pages.json 文件中的 preloadRule 属性来实现页面预加载功能。以下是具体操作步骤: 1. 在 pages.json 中配置 preloadRule preloadRule 用于指定哪些页面需要预加载,以及预加载时机。下面是一个示例配置…...
c#删除文件和目录到回收站
之前在c上遇到过这个问题,折腾许久才解决了,这次在c#上再次遇到这个问题,不过似乎容易了一些,亲测代码如下,两种删除方式都写在代码中了。 直接上完整代码: using Microsoft.VisualBasic.FileIO; using Sy…...
GESP2024年12月认证C++六级( 第三部分编程题(1)树上游走)
参考程序: #include <iostream> #include <string>using namespace std;int main() {long long n, s; // n为移动次数,s为初始节点编号string moves; // 移动指令串// 输入处理cin >> n >> s;cin >> moves;long long…...
Redis数据结构服务器
Redis数据结构服务器 什么是Redis数据结构服务器 的概念和特点 是一个开源(BSD许可),内存中的数据结构存储服务器,可用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)…...
【向量数据库 Milvus】centos8源码安装和部署 Milvus 2.5.3
在龙晰操作系统(LoongArch 架构)的 CentOS 8 环境中通过源码安装和部署 Milvus 2.5.3 可能会面临一些挑战,因为 Milvus 的官方支持主要集中在 x86 和 ARM 架构上。以下是一个详细的安装步骤,但需要注意,某些依赖项可能…...
MySQL数据库(SQL分类)
SQL分类 分类全称解释DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改DQLData Query Languag…...
C++实现设计模式---原型模式 (Prototype)
原型模式 (Prototype) 原型模式 是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化。 意图 使用原型实例指定要创建的对象类型,并通过复制该原型来生成新对象。提供一种高效创建对象的方式,尤其是当对象的…...
鸿蒙面试 2025-01-10
写了鉴权工具,你在项目中申请了那些权限?(常用权限) 位置权限 : ohos.permission.LOCATION_IN_BACKGROUND:允许应用在后台访问位置信息。 ohos.permission.LOCATION:允许应用访问精确的位置信息…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...
二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...
