什么是vLLM?
vLLM(Vectorized Large Language Model Serving System)是由加州大学伯克利分校团队开发的高性能、易扩展的大语言模型推理引擎。它专注于通过创新的内存管理和计算优化技术,实现高吞吐、低延迟、低成本的模型服务。
核心特点:
-
高性能推理
:支持分布式推理,能高效利用多机多卡资源。
-
显存优化
:采用PagedAttention内存管理技术,显著提升GPU显存利用率。
-
多场景适配
:无论是低延迟的在线服务,还是资源受限的边缘部署,vLLM都能提供卓越的性能表现。
中文站点:https://vllm.hyper.ai/docs/
英文站点:https://docs.vllm.ai/en/latest/index.html
*vLLM vs Ollama:对比分析*
在LLM推理引擎的选择上,vLLM和Ollama是两个常见的选项。对比如下:
对比维度 | Ollama | vLLM | 备注 |
---|---|---|---|
量化与压缩策略 | 默认采用4-bit/8-bit量化,显存占用降至25%-50% | 默认使用FP16/BF16精度,保留完整参数精度 | Ollama 牺牲精度换显存,vLLM 牺牲显存换计算效率 |
优化目标 | 轻量化和本地部署,动态加载模型分块,按需使用显存 | 高吞吐量、低延迟,预加载完整模型到显存,支持高并发 | Ollama 适合单任务,vLLM 适合批量推理 |
显存管理机制 | 分块加载 + 动态缓存,仅保留必要参数和激活值 | PagedAttention + 全量预加载,保留完整参数和中间激活值 | vLLM 显存占用为 Ollama 的 2-5 倍 |
硬件适配 | 针对消费级GPU(如RTX 3060)优化,显存需求低 | 依赖专业级GPU(如A100/H100),需多卡并行或分布式部署 | Ollama 可在 24GB 显存运行 32B 模型,vLLM 需至少 64GB |
性能与资源平衡 | 显存占用低,但推理速度较慢(适合轻量级应用) | 显存占用高,但吞吐量高(适合企业级服务) | 量化后 Ollama 速度可提升,但仍低于 vLLM |
适用场景 | 个人开发、本地测试、轻量级应用 | 企业级API服务、高并发推理、大规模部署 | 根据显存和性能需求选择框架 |
总结:Ollama更适合个人开发和轻量级应用,而vLLM则更适合企业级服务和高并发场景。
*DeepSeek-R1-Distill-Qwen-32B模型对比*
DeepSeek-R1-Distill-Qwen-32B模型在Ollama和vLLM框架下的显存占用、存储需求及性能对比
指标 | Ollama (4-bit) | vLLM (FP16) | 说明 |
---|---|---|---|
显存占用 | 19-24 GB | 64-96 GB | Ollama通过4-bit量化压缩参数,vLLM需保留完整FP16参数和激活值 |
存储空间 | 20 GB | 64 GB | Ollama存储量化后模型,vLLM存储原始FP16精度模型 |
推理速度 | 较低(5-15 tokens/s) | 中高(30-60 tokens/s) | Ollama因量化计算效率降低,vLLM通过批处理和并行优化提升吞吐量 |
硬件门槛 | 高端消费级GPU(≥24GB) | 多卡专业级GPU(如2×A100 80GB) | Ollama勉强单卡运行,vLLM需多卡并行或分布式部署 |
*ModelScope:开源模型即服务(MaaS)平台*
ModelScope是由阿里巴巴集团推出的开源模型即服务(MaaS)平台,旨在简化模型应用的过程,为AI开发者提供灵活、易用、低成本的一站式模型服务产品。
核心功能:
- 汇集多种最先进的机器学习模型,涵盖NLP、CV、语音识别等领域。
- 提供丰富的API接口和工具,方便开发人员集成和使用模型。
- 支持模型的下载、部署和推理,降低开发门槛。
安装与使用:
-
下载DeepSeek模型
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
-
创建模型存放目录
mkdir -p /data/deepseek-ai/models/deepseek-70b
-
下载DeepSeek-R1-Distill-Llama-70B模型
modelscope download --local_dir /data/deepseek-ai/models/deepseek-70b --model deepseek-ai/DeepSeek-R1-Distill-Llama-70B
docker部署
下载 Docker 二进制包
Docker 官方网站下载二进制包文件
wget https://download.docker.com/linux/static/stable/x86_64/docker-26.1.4.tgz
解压 Docker 压缩包
tar -zxvf docker-26.1.4.tgz
移动二进制文件到系统目录
mv docker/* /usr/bin/
创建 Docker 用户和组
-
创建 Docker 组
groupadd docker
-
创建 Docker 用户,并将其添加到 Docker 组
useradd -s /sbin/nologin -M -g docker docker
配置 Docker 服务
创建并配置 docker.service
文件
-
打开或创建
docker.service
文件vim /usr/lib/systemd/system/docker.service
-
添加以下内容:
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
配置国内 Docker 镜像加速
-
创建 Docker 配置目录:
mkdir -p /etc/docker
-
打开或创建
daemon.json
文件:vim /etc/docker/daemon.json
-
添加以下内容:
{ "registry-mirrors": ["https://docker.rainbond.cc"] }
启动 Docker 服务
-
启动 Docker 服务
systemctl start docker
-
设置 Docker 服务开机启动
systemctl enable docker
验证 Docker 安装
-
查看 Docker 版本
docker -v
vLLM容器化部署指南
环境准备
-
更新软件包列表并安装NVIDIA容器工具包
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
-
配置NVIDIA容器运行时
sudo nvidia-ctk runtime configure --runtime=docker
-
重加载系统服务并重启Docker
sudo systemctl daemon-reload sudo systemctl restart docker
-
下载vllm/vllm-openai容器
docker pull vllm/vllm-openai
-
查看vllm/vllm-openai容器
docker images
启动vLLM容器
docker run -itd --restart=always --name vllm_ds70 \
-v /data/deepseek-ai:/data \
-p 18005:8000 \
--gpus all \
--ipc=host \
vllm/vllm-openai:latest \
--dtype bfloat16 \
--served-model-name DeepSeek-R1-Distill-Llama-70B \
--model "/data/models/deepseek-70b" \
--gpu-memory-utilization 0.9 \
--tensor-parallel-size 8 \
--max-model-len 30000 \
--api-key token-abc123
参数解释:
-
–restart=always
:容器退出后自动重启,除非显式停止或dockerd服务重启。
-
–name vllm_ds70
为容器指定一个名称,便于后续管理和操作。
-
-v /data/deepseek-ai:/data
将主机上的/data/deepseek-ai目录挂载到容器的/data目录,用于存储模型文件和数据。
-
-p 18005:8000
将容器的8000端口映射到主机的18005端口,用于通过主机端口访问容器内的服务。
-
-itd
命令选项组合,-i和-t、-d,保持容器在后台运行,同时允许用户通过Docker logs或attach命令查看输出。
-
–gpus all
:允许容器使用宿主机的所有GPU资源。
-
–dtype bfloat16
-
–dtype {auto,half,float16,bfloat16,float,float32}
:指定数据类型,优化内存使用和计算效率。auto模式会根据模型类型自动选择精度,而half或float16则常用于半精度计算以节省显存。
-
–tensor-parallel-size 8
:设置张量并行的大小,通过将模型分割到多个GPU上进行并行计算,提升模型推理的速度和效率。
-
–ipc=host
:配置容器的IPC(Inter-Process Communication)模式,允许容器与宿主机或其他容器共享共享内存,提升模型并行性能。
-
–served-model-name DeepSeek-R1-Distill-Llama-70B
:指定服务的模型名称,标识当前服务的模型,便于管理和路由
-
–model “/data/models/deepseek-70b”
指定模型文件的路径,告诉服务从哪里加载模型权重和配置文件,确保模型能够正确加载。
-
–gpu-memory-utilization 0.95
设置GPU内存使用率,限制模型使用的GPU内存占比,避免因内存不足导致服务崩溃。
-
–tensor-parallel-size 8
设置张量并行的大小,通过将模型分割到多个GPU上进行并行计算,提升模型推理的速度和效率。
-
–max-model-len 30000
设置模型的最大上下文长度,限制模型在一次推理中能处理的最大输入长度,避免因过长输入导致性能问题。
-
–api-key token-abc123
指定API密钥,用于身份验证和授权,确保只有有权限的用户才能访问服务。
查看vLLM容器日志
docker logs -f b05b9c3646ec
*访问vLLM容器*
docker exec -it b05b9c3646ec /bin/bash
*vLLM API 调用测试*
curl http://192.168.1.34:18005/v1/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer token-abc123" \-d '{"model": "DeepSeek-R1-Distill-Llama-70B","prompt": "北京的著名景点有哪些","max_tokens": 1000,"temperature": 0.3}'
Chatbox设置
DeepSeek-R1 模型 Ollama VS vLLM 占用显存对比
Model | Base Model | Ollama | vLLM |
---|---|---|---|
DeepSeek-R1-Distill-Qwen-1.5B | Qwen2.5-Math-1.5B | 1.1GB | 3-6 GB |
DeepSeek-R1-Distill-Qwen-7B | Qwen2.5-Math-7B | 4.7GB | 14-21 GB |
DeepSeek-R1-Distill-Llama-8B | Llama-3.1-8B | 4.9GB | 16-24 GB |
DeepSeek-R1-Distill-Qwen-14B | Qwen2.5-14B | 9.0GB | 28-42 GB |
DeepSeek-R1-Distill-Qwen-32B | Qwen2.5-32B | 20GB | 64-96 GB |
DeepSeek-R1-Distill-Llama-70B | Llama-3.3-70B-Instruct | 43GB | 140-210 GB |
DeepSeek-R1-671B | DeepSeek-R1-671B | 404GB | 1342-2013 GB |
PyTorch、cuDNN、CUDA、NVIDIA驱动和NVIDIA GPU之间的关系
-
PyTorch
作为应用层,调用cuDNN和CUDA提供的接口来加速计算。
-
cuDNN
作为加速库层,依赖于CUDA提供的GPU计算能力,优化了深度学习任务。
-
CUDA
作为计算平台层,依赖于NVIDIA驱动与GPU硬件通信,提供了通用的GPU计算接口。
-
NVIDIA驱动
作为驱动层,管理着NVIDIA GPU的硬件资源,允许上层软件与GPU进行交互。
-
NVIDIA GPU
作为硬件层,执行实际的计算任务,提供了强大的并行计算能力。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。