news 2026/6/10 23:42:18

Vllm框架入门与本地私有化部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vllm框架入门与本地私有化部署

目前主流的大模型部署框架以llama.cppOllamaVllm为主,其各自项目在Github上的Stars增长曲线如下所示。其中OllamaStars增长曲线是断档式领先,而llama.cppVllmStars增长曲线则相对平缓,处于一个稳步增长的趋势。

所以会呈现出这种现状,其实与各个框架的定位有本质的区别。首先,llama.cpp是使用没有任何依赖关系的纯 C/C++ 实现,性能很高,可定制化和优化项非常多,但也因为底层是C语言,直接导致上手难度极高。Ollama之所以能够受到最多开发者的关注,一个最根本的原因就是其部署和使用太简单了,兼容多种操作系统,且都提供了一键安装、单命令启动的快捷方式,可以极大降低初学者使用开源大模型的门槛,同时Ollama框架提供原生REST APIOpenAI API兼容性,也可以非常轻松的接入到其他的客户端中。

Vllm框架整体概览

Ollama的优势在于其简洁性,Vllm则是优先考虑性能和可扩展性的大模型部署框架,其核心的优化点在高效内存管理持续批处理功能张量并行性,从而在生产环境中的高吞吐量场景中表现极佳,同时这也是为什么Vllm框架是目前最适用于企业真实生产环境部署的根本原因。、

Gtihub开源地址为:https://github.com/vllm-project/vllm

主要特性为:

  • 高级 GPU 优化:利用CUDAPyTorch最大限度地提高GPU利用率,从而实现更快的推理速度。Ollama其实是对CPU-GPU的混合应用,但vllm是针对纯GPU的优化。
  • 高级内存管理:通过PagedAttention算法实现对KV cache的高效管理,减少内存浪费,从而优化大模型的运行效率。
  • 批处理功能:支持连续批处理和异步处理,从而提高多个并发请求的吞吐量。
  • 安全特性:内置API密钥支持和适当的请求验证,不像其他完全跳过身份验证的框架。
  • 易用性vLLMHuggingFace模型无缝集成,支持多种流行的大型语言模型,并兼容OpenAIAPI服务器。

vllm框架主要支持纯文本和多模态两种模式的模型,其中对支持的纯文本类语言模型可以在这里看到:https://docs.vllm.ai/en/latest/models/supported_models.html#supported-text-models

其次是多模态模型,Vllm框架目前已经支持文本、图片、视频和音频四种模态的输入输出格式兼容规范,但是多模态模型官方并没有给出具体的模型列表,所以这里我们要进入到源码中对模型的集成文件中去匹配:https://github.com/vllm-project/vllm/tree/main/vllm/model_executor/models

Linux部署Vllm

首先需要重点说明的是:Vllm框架仅支持Linux操作系统,官方并没有提供Windows的兼容版本。同时除了有操作的限制,对运行的Python版本也要求在Python 3.8~Python 3.12之间。这两个条件限制为部署Vllm的先决条件,即必须满足才可以顺利使用Vllm启动大模型并提供推理服务。

  1. 首先需要安装conda
  2. 创建conda的虚拟环境,可以使用"conda create --name vllm python=3.12"
  3. 安装vllm,可以使用"pip install vllm"
  4. 查看vllm版本号,可以使用"pip show vllm"

在安装完成Vllm框架后,就可以开始进行大模型推理服务的启动和调用了。Vllm框架提供了两种启动并调用大模型生成推理服务的方式,分别是离线推理和在线推理。其中:

  • 离线推理: 离线推理类似于使用Pytorch模块一样,当我们需要使用大模型生成推理服务时,先加载模型,然后使用输入数据运行该模型,并获取输出结果。
  • 在线推理: 在线推理类似于有一个服务器,可以先启动大模型,然后等待来自客户端的请求,一旦接收到请求,就会使用大模型生成推理服务,并返回结果,并且可以同时处理多个请求。

这是两种不同推理方式最本质的区别,毫无疑问在线推理是更加符合实际生产环境的。但为了帮助大家更好的理解Vllm框架,这里我们还是先从离线推理开始讲解,然后再重点讲解在线推理。

Vllm离线推理

from vllm import LLM # 加载模型 llm = LLM(model="deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B") # 传输数据 outputs = llm.generate("你好,我是guslegend") # 获取结果 for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

我们就以DeepSeek-R1-Distill-Qwen-32B大模型为例,默认情况下,LLM(model="deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B")这行命令的执行逻辑是:先检测当前服务器中是否存在deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B的模型权重,如果存在则直接加载该目录下的模型权重,否则会从Hugging Face上下载大模型权重。其存在的主要问题是:国内的服务器是没有办法访问Hugging Face网站的,所以一定会报错。因此,国内的开发者需要采用更有效的方式来确保大模型权重的正确下载,即使用国内镜像源ModelScope来执行模型权重的本地化存储。

首先我们需要安装ModelScope:"pip install modelscope"

接下来回到Linux服务器中,通过vim新建一个model_download.py文件:vim model_download.py

然后,按i键进入编辑模式,将复制的代码粘贴到文件中:

from modelscope import snapshot_download # model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B', cache_dir='/root/autodl-tmp', revision='master') model_dir = snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B', cache_dir='/home/08_vllm', revision='master')

注意,这里cache_dir参数指定的路径是模型权重存储的路径,这里我们指定为/home/08_vllm目录,即模型权重会存储到该目录下。

修改完成后,按Esc键退出编辑模式,再按Shift+:键进入命令模式,输入wq保存并退出。执行如下命令,运行model_download.py文件:" python model_download.py"

耐心等待模型权重下载完成即可。待下载完成后,可以看到/home/08_vllm目录下会多出一个deepseek-ai文件夹,里面存放的就是DeepSeek-R1-Distill-Qwen-1.5B大模型的权重文件。如下图所示:

按照上述流程中model_download.py下载模型的方式,可以允许我们随意下载任意在ModelScope中托管的模型权重至本地,因此这里依次下载了Qwen2.5系列和DeepSeek R1系列的不同尺寸的模型,大家也可以根据自己的需求灵活选择模型。

至此,大模型权重就已经下载完成了。接下来,我们需要做的是配置一个可以加载服务器虚拟环境(即上一步创建的vllm虚拟环境)的Python IDF解释器。这一步就会根据大家实际的开发情况产生不同的配置方法,总的来说会分成以下两种情况:

  1. 部署大模型的服务器和你要执行代码调用的Python IDE是同一台服务器,则可以直接选择到对应的虚拟环境并执行代码;
  2. 部署大模型的服务器和你要执行代码调用的Python IDE不是同一台服务器,则需要通过SSH连接到部署大模型的服务器,然后选择到对应的虚拟环境并执行代码。

同一台服务器的情况非常简单,直接打开Python IDE,选择到对应的虚拟环境并执行代码即可。这里重点介绍第二种情况,即部署大模型的服务器和你要执行代码调用的Python IDE不是同一台服务器。同时这也是最常见的企业开发环境。

这类情况用最通俗的理解是:我们把大模型部署在了局域网/租赁的云服务器中,希望可以在本地电脑上执行代码调用模型服务。这类情况我们要做如下配置:(以Jupyter Notebook为例):

首先进入在局域网/租赁的云服务器的Linux服务器中,在vllm虚拟环境中安装ipykerneljupyter包,执行如下命令:" pip install ipykernel jupyter"

安全起见,对连接时的密码进行加密处理,否则明文写在配置文件中,容易造成数据安全风险,依次执行如下操作:

from jupyter_server.auth import passwd passwd()

完成密码加密后,执行如下命令生成Jupyter Lab 的配置文件(jupyter_lab_config.py):" jupyter lab --generate-config"

使用Vim编辑器,找到如下配置,执行修改:

c.ServerApp.allow_origin = '*' c.ServerApp.allow_remote_access = True c.ServerApp.ip = '0.0.0.0' c.ServerApp.open_browser = False c.ServerApp.password = '加密后的密码'(上一步复制的加密串) c.ServerApp.port = 8002

全部配置完成后,在服务器端启动Jupyter Lab服务,通过如下命令后台启动:

nohup jupyter lab --allow-root > jupyterlab.log 2>&1 &

然后,将虚拟环境的Kernel写入Jupyter Lab,执行如下命令,创建一个ipykernel内核:

python -m ipykernel install --user --name vllm --display-name "vllm"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 23:16:40

基于spring+vue的仓库库存管理系统[spring]-计算机毕业设计源码+LW文档

摘要:仓库库存管理是企业运营中的重要环节,准确高效地管理库存对于企业的成本控制和客户满意度至关重要。本文介绍了一个基于Spring Boot与Vue.js的仓库库存管理系统的设计与实现过程。该系统采用前后端分离架构,利用Spring Boot框架快速搭建…

作者头像 李华
网站建设 2026/6/10 17:22:16

UVa 139 Telephone Tangles

题目分析 本题是一道电话计费模拟题,要求根据拨打的号码和通话时长,结合给定的区号(或国家代码)与费率表,计算出每一通电话的费用。 输入格式 输入分为两部分:费率表 每行格式为: 代码 地区名称…

作者头像 李华
网站建设 2026/6/9 1:43:56

信息系统信创建设方案

第1章 需求分析 1.1 项目需求 自主可控需求网络、计算、存储资源池需求云管理平台、云备份平台建设需求运维、运营管理需求云平台安全系统需求 第2章 云平台基础设施设计 2.1 改造目标与内容 政务外网云平台改造 2.2 设计原则与定位 政务外网云平台安可应用区定位 2.3 …

作者头像 李华
网站建设 2026/6/9 22:31:53

恒温孵化器(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:CP-51-2021-022设计简介:本设计是基于单片机的恒温孵化器系统,主要实现以下功能:可通过LCD1602温湿度和通风翻蛋倒计时&…

作者头像 李华