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 Large File Storage)是一个扩展, 官网:https://git-lfs.com/  通过hooks钩子方式拦截原有的git命令,将音频样本、视频、数据集和图形等大文件替换为Git内的文本指针,同时将文件内容存储在远程服务器上。Git LFS能够自动处理这些大文件的上传和下载,确保仅在需要的时候才检索到本地,比如git clone时并不会下载这些LFS大文件。

    因为模型中,许多训练参数文件都非常大,基本都使用了LFS来管理。为了能通过git获取模型中这些LFS文件,需要在本地操作系统安装git的LFS扩展。

#(若已安装则忽略)对于Ubuntu、Debian等采用apt/deb包管理的Linux系统通过如下方式安装Git LFS
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs

#(若已安装则忽略)对于CentOS等采用yum/rpm包管理的Linux系统通过如下方式安装Git LFS
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
sudo yum install git-lfs

#安装完毕后,查看LFS版本
git lfs --version

#安装完毕后,通过初始化使git增加LFS扩展(对git安装hooks钩子)。初始化就是在当前用户的~/.gitconfig增加一段关于lfs的配置。每个操作系统用户只需要执行一次
git lfs install

 2) 通过miniconda创建虚拟环境,名为env-vllm。 该虚拟环境中包括包python 3.12

#通过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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955096.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32的集成开发环境STM32CubeIDE安装

STM32CubeIDE - STM32的集成开发环境 - 意法半导体STMicroelectronics

硬件学习笔记--31 IEC62053-21相关内容介绍

IEC 62053-21是一项由国际电工委员会(International Electrotechnical Commission,简称IEC)发布的国际标准,全称为《交流电能测量设备(a.c.)-特殊要求-第21部分:静止式有功能量计量表&#xff0…

C++类与对象(一)—学习记录

序言:要想开发一款成功的应用程序,其开发者必须充分了解并实现用户的需求。作为一个设计良好的类,既要有直观且易于使用的接口,也必须具备高效的实现过程。 一、类与对象基本概念 面向对象程序设计的主要特点为抽象、封装、继承与…

七大排序算法

文章目录 排序的概念及引用1.插入排序2.希尔排序(缩小增量排序)3.选择排序4.堆排序5.冒泡排序6.快速排序7.归并排序8.代码排序部分的测试9.代码加效果大致测试时间(仅供参考) 排序的概念及引用 排序:将数据按照特定的规律排成递增或递减的操作 稳定性:…

Windows 蓝牙驱动开发-蓝牙设备栈

蓝牙设备栈 蓝牙驱动程序堆栈包含 Microsoft 为蓝牙协议提供支持的核心部分。 有了这个堆栈,已启用蓝牙的设备可以彼此定位并建立连接。 在此类连接中,设备可以通过各种应用程序交换数据并彼此交互。 下图显示了蓝牙驱动程序堆栈中的模块,以…

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。…

第十三章:数据库技术

文章目录: 一:基础 1.概念 2.特点 3.常见数据库品牌 4.数据库应⽤系统 4.1 C/S 4.2 B/S 5.数据模型的分类 6.名词解析 7.关系运算 二:Access 1.基础 2.操作 2.1 建立表 2.2 维护表 2.3 创建查询 2.4 创建窗体 2.5 创建报表…

目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析

目录 引言 YOLO系列 网络结构 多尺度检测 损失函数 关键特性 SSD 锚框设计 损失函数 关键特性 Faster R-CNN 区域建议网络(RPN) 两阶段检测器 损失函数 差异分析 共同特点 基于深度学习 目标框预测 损失函数优化 支持多类别检测 应…

浏览器输入http形式网址后自动跳转https解决方法

一、问题描述 使用浏览器 网上冲浪 时会遇到一个情况: 在浏览器中输入“http域名”后会自动变成“https 域名”的形式,此时“https 域名”的网站可能已停止对外提供服务了,这时会出现如下不友好的网页提示: 二、处理方法&#x…

Unity2017 控制.abc格式的三维动画播放

首先需要导入插件Alembic,否则导入abc动画,Unity是不会识别的。 Unity2017版本及以下直接从我这儿下载:https://download.csdn.net/download/qq_41603955/90272382 高版本Unity,请移步AssetStore商店搜找。 导入abc之后&#x…

python管理工具:conda部署+使用

python管理工具:conda部署使用 一、安装部署 1、 下载 - 官网下载: https://repo.anaconda.com/archive/index.html - wget方式: wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh2、 安装 在conda文件的…

挖掘机检测数据集,准确识别率91.0%,4327张原始图片,支持YOLO,COCO JSON,PASICAL VOC XML等多种格式标注

挖掘机检测数据集,准确识别率91.0%,4327张图片,支持YOLO,COCO JSON,PASICAL VOC XML等多种格式标注 数据集详情 数据集分割 训练组70% 3022图片 有效集20% 870图片 测试集10&…

vue 学习笔记 - 创建第一个项目 idea

1、安装Vue CLI 查看npm版本号 (可跳过) % npm -v 11.0.0安装Vue CLI % npm install -g vue/cli2、创建项目 进入工程文件目录 % cd /Users/ruizhifeng/work/aina-client查看vue 版本号 (可跳过) % vue --version vue/cli 5…

BIO、NIO、AIO

第一章 BIO、NIO、AIO课程介绍 1.1 课程说明 ​ 在Java的软件设计开发中,通信架构是不可避免的,我们在进行不同系统或者不同进程之间的数据交互,或者在高并发下的通信场景下都需要用到网络通信相关的技术,对于一些经验丰富的程序员来说,Java早期的网络通信架构存在一些缺…

SpringMVC复习笔记

文章目录 SpringMVC 概念和基本使用SpringMVC 简介SpringMVC 核心组件和调用流程SpringMVC 基本使用第一步:导入依赖第二步:Controller 层开发第三步:SpringMVC 配置类配置核心组件第四步:SpringMVC 环境搭建第五步:部…

NEC纪实 :2024全国机器人大赛 Robocon 常州工学院团队首战国三

全国机器人大赛 Robocon 常州工学院团队首战国三 通宵7天7夜,常州工学院RC团队,首次闯入全国机器人大赛国赛,并成功得分! 不同于老牌强队,常州工学院(下面用"常工"代替)的这只队伍&…

Golang结合MySQL和DuckDB提高查询性能

要在Golang中组合MySQL和DuckDB以提高查询性能,请考虑使用混合查询执行方法。这种方法利用了MySQL强大的事务管理和DuckDB闪电般的分析处理能力。本文介绍如何充分利用两者的方法。 各取所长 用MySQL处理事务,用DuckDB处理分析 MySQL应该处理常规的INS…

数据结构-单向不带头不循环链表

链表知识总结 逻辑结构:线性结构(元素之间存在一对一关系) 存储结构(物理结构):链式存储(存储顺序和逻辑顺序不在乎是否一致) 1.链表的特点:擅长进行动态删除和增加操作&…

28:CAN总线入门一:CAN的基本介绍

CAN总线入门 1、CAN总线简介和硬件电路1.1、CAN简要介绍1.2、硬件电路1.3、CAN总线的电平标准 2、帧格式2.1、数据帧(掌握)2.2、遥控帧(掌握)2.3、错误帧(了解)2.4、过载帧(了解)2.5…

2018年西部数学奥林匹克几何试题

2018G1 在 △ A B C \triangle ABC △ABC 中, O O O 为外心, M M M 为边 B C BC BC 的中点, 延长 A B AB AB 交 ( A O M ) (AOM) (AOM) 于点 D D D, ( A O M ) (AOM) (AOM) 交 A C AC AC 于点 E E E. 求证: E C D M ECDM ECDM. 证明: 设点 G G G 为 △ A B C …