news 2026/6/13 18:06:08

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/10 12:48:54

基于spring+vue的校园二手图书交易[spring]-计算机毕业设计源码+LW文档

摘要:随着环保意识的增强和资源共享需求的提升,校园二手图书交易成为学生间资源高效利用的重要方式。本文设计并实现了一个基于Spring Boot与Vue.js的校园二手图书交易平台,旨在为学生提供一个便捷、安全、高效的图书交易环境。平台采用前后端…

作者头像 李华
网站建设 2026/6/13 12:58:29

忘掉代码:关于量化投资,你应该知道的3个反直觉真相

很多人一提到量化投资,脑海里浮现的都是复杂的代码、闪烁的屏幕和神秘的“黑箱”。但实际上,量化投资的真正精髓并不在于编程,而在于一个更根本、更直观的概念:“因子”。本文将为你揭示三个关于量化投资的反直觉真相,…

作者头像 李华
网站建设 2026/5/30 5:14:52

使用秒哒快速开发一个在线预约系统

前面介绍都是国外的产品,这次用国内的产品来开发应用。国内某度推出的 秒哒(对话式应用开发平台),基于大模型能力,让开发者通过“描述需求”的方式即可生成完整应用,包括:前端页面后端接口数据库…

作者头像 李华
网站建设 2026/6/6 5:53:39

USB接口终极指南:从2.0到USB4全解析

目录 USB 接口类型全解析(完整版) 一、按物理接口形态分类(硬件外观,核心识别依据) 主流通用型(日常 99% 场景接触) 淘汰 / 小众专用型(仅老旧 / 专业场景可见) 二、…

作者头像 李华
网站建设 2026/6/10 21:49:15

百万级数据查询加速:SQL调优实战手册

百万级数据查询加速:SQL调优实战手册 在数字化转型加速的今天,企业数据库的查询性能直接决定着业务系统的响应速度与用户体验。SQL作为数据库操作的核心语言,其优化效果往往能带来指数级的性能提升——一条精心设计的索引可能让查询时间从秒级…

作者头像 李华