让大模型跑得更快、更稳,是企业部署AI应用的关键
在人工智能快速发展的今天,越来越多企业开始部署自己的大语言模型。不过面对动辄数十亿参数的大模型,如何高效稳定地运行它们成为技术团队面临的共同挑战。今天我们就来深入解析两款主流的大模型推理引擎——vLLM和Ollama,协助您做出正确的技术选型。

什么是vLLM?它为何如此高效?
vLLM(Vectorized Large Language Model)是由加州大学伯克利分校团队开发的高性能大语言模型推理引擎,专门用于提升大模型推理的效率和速度
vLLM的核心突破在于其创新的PagedAttention技术,这项技术巧妙地借鉴了操作系统的虚拟内存分页机制
传统推理框架在处理大模型时,需要为每个请求分配一块连续的显存空间来存储注意力机制的键值对(KV Cache)。这就像停车场要求每辆车必须停靠在连续的车位中,即使只剩零散车位也无法使用,导致显存利用率一般只有60%左右
而vLLM的PagedAttention技术将KV Cache划分为固定大小的”块”,这些块可以非连续地存储在显存中,并通过页表管理它们的映射关系。这种方法就像让车辆可以分散停放在停车场的任何空位,极大提升了显存利用率,可达到95%以上
除了PagedAttention外,vLLM还有两大核心技术:
连续批处理(Continuous Batching):传统批处理需要等待一批请求全部完成后才能处理下一批,而vLLM允许新请求随时加入处理队列,确保GPU持续工作,显著提高吞吐量
前缀共享(Prefix Sharing):当多个请求有一样提示前缀时,vLLM可以共享这部分计算的KV Cache,避免重复计算
这些技术使得vLLM在一样硬件上能同时服务5-10倍的请求量,成为企业级高并发场景的理想选择
2.vLLM与Ollama
虽然vLLM和Ollama都是大模型推理框架,但它们在设计理念和适用场景上有着显著差异。
2.1定位与核心优势
Ollama是一个轻量级的本地推理平台,主打简单易用和快速部署。它基于Go语言实现,将模型权重、依赖库和运行环境整合为统一容器,用户只需一条命令即可启动模型服务。Ollama特别适合个人开发者、教育演示和本地测试场景
vLLM则专注于高性能推理和服务端扩展,面向需要处理高并发请求的生产环境。它通过先进的内存管理和调度算法,最大化GPU利用率,适合企业级的大规模部署
2.2性能表现对比
从性能数据来看,两个框架有明显差异。以
DeepSeek-R1-Distill-Qwen-32B模型为例:
显存占用:Ollama(4-bit量化)为19-24GB,而vLLM(FP16)为64-96GB
推理速度:Ollama为5-15 tokens/秒,vLLM可达30-60 tokens/秒
硬件需求:Ollama可在高端消费级GPU(≥24GB)上运行,vLLM需要多卡专业级GPU
|
特性 |
Ollama |
vLLM |
|
核心优势 |
易用性、快速启动 |
高性能、高并发 |
|
显存管理 |
动态分块加载 |
PagedAttention分页管理 |
|
批处理 |
基础批处理 |
连续动态批处理 |
|
硬件需求 |
消费级GPU即可 |
需要专业级GPU |
|
部署复杂度 |
简单,一条命令 |
相对复杂,需要调优 |
简单来说,选择标准很清晰:个人开发测试用Ollama,企业生产部署用vLLM。
3.vLLM的软硬件要求与部署实践
3.1硬件要求
vLLM对硬件有较高要求,推荐使用专业级GPU,显存需求:至少能容纳模型参数和KV Cache,例如70B模型需要140-210GB显存,支持张量并行:通过多GPU并行计算加速推理
本次实验采用一张魔改的 2080显卡,22G现存
3.2软件环境
操作系统:Linux(Ubuntu 20.04+或Rocky Linux 9+),驱动要求:NVIDIA驱动版本535+
本次实验环境采用 Rocky Linux 10 版本
3.3操作系统基础安装
# 更换镜像源为阿里云镜像源
sed -e 's|^mirrorlist=|#mirrorlist=|g'
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'
-i.bak
/etc/yum.repos.d/[Rr]ocky*.repo
# 安装EPEL 仓库
dnf install -y epel-release
# 和yum是一样的
dnf clean all
dnf makecache
# 更新系统软件(非必要)
yum -y update
# 禁用 SELinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 获取 SELinux 状态
getenforce
# 关闭防火墙(生产环境慎重)
systemctl stop firewalld
systemctl disable firewalld
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 配置时间同步服务
systemctl status chronyd
# 查看时间是否同步 V 大写
chronyc sources -V
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp8.flashdance.cx 2 7 377 104 +2245us[+2245us] +/- 104ms
^* 211.68.71.26 3 7 377 105 -8679us[-9888us] +/- 124ms
^- mail.moe.cat 2 8 61 94 -14ms[ -14ms] +/- 101ms
^+ ntp1.flashdance.cx 2 7 377 40 +215us[ +215us] +/- 102ms
# 安装常用插件
yum install -y vim wget telnet net-tools lrzsz unzip gcc numactl bind-utils tar tar perl pciutils
显卡检查时会用到 lspci命令,该命令在 pciutils包中
3.4 显卡相关
3.4.1 确认显卡型号
lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A] (rev a1)
01:00.1 Audio device: NVIDIA Corporation TU102 High Definition Audio Controller (rev a1)
01:00.2 USB controller: NVIDIA Corporation TU102 USB 3.1 Host Controller (rev a1)
01:00.3 Serial bus controller: NVIDIA Corporation TU102 USB Type-C UCSI Controller (rev a1)
# 确认你运行的内核版本,然后安装对应的开发包:
# 查看当前运行的内核版本
uname -r
# 安装对应版本的内核开发包
sudo dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
确认内核版本以及安装对应版本内核开发包很重大,要不然驱动无法安装
3.4.2 检查是否存在开源驱动 nouveau
lsmod | grep nouveau
有输出说明存在。 开源驱动会与NVIDA 驱动冲突。我的是有输出的
如果存在,则需要关闭 nouveau 驱动
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
sudo dracut --force
# 重启
sudo reboot
# 重启后确认,如果没有输出则表明已经关闭了
lsmod | grep nouveau
3.4.3 下载驱动
官网:
https://www.nvidia.com/en-us/drivers/


选择一个版本下载

将下载的文件存放到 /usr/local/src目录备用

3.4.4 执行安装
cd /usr/local/src
# 添加可执行权限
chmod +x NVIDIA-Linux-x86_64-580.105.08.run
# 执行安装
sudo ./NVIDIA-Linux-x86_64-580.105.08.run
安装的时候,会让你选择许可证,我们直接选择 **NVIDIA Proprietary**即可
|
选项 |
许可证 |
特点 |
推荐选择 |
|
NVIDIA Proprietary |
专有许可证 |
• 传统的NVIDIA专有驱动 • 经过长期测试,稳定性高 • 与各种NVIDIA功能完全兼容 |
大多数用户 |
|
MIT/GPL |
开源许可证 |
• 较新的开源内核模块 • 更好的内核兼容性 • 遵循开源协议 |
特定场景用户 |
如果操作系统安装的是字符界面,则会出现一个警告:
WARNING: nvidia-installer was forced to guess the X library path '/usr/lib64' and X module path '/usr/lib64/xorg/modules';
这个警告信息表明NVIDIA安装程序无法自动检测到X Window系统的开发文件位置,解决这个警告你需要安装X.Org的开发包和pkg-config工具,
这个警告不会影响CUDA计算功能,只会影响图形显示,如果你只在字符界面使用Rocky Linux进行计算任务,可以暂时忽略这个警告
3.4.5 验证驱动是否安装成功
# 若输出显示显卡信息、驱动版本,则安装成功
nvidia-smi

3.5.安装CUDA
CUDA 是 Compute Unified Device Architecture 的缩写,是NVIDIA推出的并行计算平台和编程模型。
**本质:**让GPU不仅能处理图形,还能进行通用计算的平台
**作用:**允许开发者使用C/C++等语言直接在GPU上编写程序
**应用领域:**AI/深度学习、科学计算、数据分析、图形渲染等
前提条件,需要先安装 NVIDIA 驱动
nvidia-smi # 有输出,则确认驱动正常工作
3.5.1 下载CUDA Toolkit并安装
RTX 2080 Ti 的最优 CUDA 版本为 11.7 或 11.8,我们选择 11.8 版本下载,下载地址:
https://developer.nvidia.com/cuda-toolkit-archive ,找到对应的版本,选择合适的环境下载。下载后,文件存放到 /usr/local/src

cd /usr/local/src
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
安装的时候,会出现错误:unsupported compiler version: 14.2.1. Use –override to override this check. 此时使用下面命令跳过检查。 缘由是当前系统版本的gcc版本过高 ,cuda_11.8.0 不识别这个gcc版本。生产环境可以降低 gcc版本,列如gcc 10 版本。由于目前是测试,直接跳过检查
sudo sh cuda_11.8.0_520.61.05_linux.run –override

由于驱动已经安装了,所以这里需要将 “Driver” 选项去掉
安装完毕后,Toolkit 被安装在了 /usr/local/cuda-11.8, 同时有个链接文件 /usr/local/cuda指向了这个目录
3.5.2 配置环境变量
# 编辑bash配置文件
vim ~/.bashrc
# 添加以下内容(版本号根据实际安装调整)
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda
# 使配置生效
source ~/.bashrc
3.5.3 验证安装
# 检查CUDA编译器
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
# 检查CUDA工具包版本
nvidia-smi # 查看右上角的CUDA Version

nvidia-smi 显示的CUDA版本是驱动程序支持的最高 CUDA版本,不是实际安装的CUDA版本,使用 nvcc –version显示的才是实际安装的版本。
3.6 安装Conda
Conda 是一个开源的包管理和环境管理系统,最初由 Anaconda 公司开发,主要用于 Python 及其他语言(如 R、Ruby、Lua、Perl、Haskell、C/C++)的包管理和环境管理。它可以安装、更新、卸载软件包,并创建隔离的虚拟环境,使得不同项目之间的依赖不会相互干扰。Conda与pip的区别:

cd /usr/local/src
# 下载安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 执行安装
sh Miniconda3-latest-Linux-x86_64.sh
# 手动激活 base环境
eval "$(/root/miniconda3/bin/conda shell.bash hook)"
# 接收许可
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
# 查看源
conda config --show-sources
==> /root/miniconda3/.condarc <==
channels:
- defaults
conda config --set show_channel_urls yes
conda config --show channels
# 关闭自动激活base环境
conda config --set auto_activate_base false
3.7 安装vLLM GPU版本
# 创建vllm虚拟环境
conda create -n vllm_env python=3.11 -y
# 激活vllm虚拟环境
conda activate vllm_env
# 查看已创建的所有Conda环境
conda env list
# 安装vllm 包
pip install vllm
# 检查vLLM命令行工具是否可用
vllm --help
# 在Python交互环境中尝试导入vLLM的核心模块
python -c "from vllm import LLM; print('vLLM导入成功!')"
3.8 模型下载
这里先试用国内的 魔搭ModelScope社区 提供的SDK 来下载模型
# 安装ModelScope SDK
pip install modelscope
# 创建模型存放目录
mkdir -p /home/models/modelscope/Qwen/Qwen3-0.6B
# 下载模型
modelscope download --model Qwen/Qwen3-0.6B --local_dir /home/models/modelscope/Qwen/Qwen3-0.6B
3.9 加载本地模型
# 加载。完全启动过后,会打开 8000 端口对外提供服务
vllm serve /home/models/modelscope/Qwen/Qwen3-0.6B
GET
http://192.168.6.133:8000/v1/models 此时会显示模型信息
单独开启一个窗口,执行命令:
curl http://localhost:8000/v1/completions -H "Content-Type: application/json" -d '{"prompt": "请介绍一下你自己"}'
有相应则加载成功
注意:控制台上按 Ctrl +C 服务将会停止,回到命令行


















- 最新
- 最热
只看作者