什么是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% | | Ollama 牺牲精度换显存,vLLM 牺牲显存换计算效率 | | 优化目标 | | 高吞吐量、低延迟,预加载完整模型到显存,支持高并发 | | | 显存管理机制 | | PagedAttention + 全量预加载,保留完整参数和中间激活值 | | | 硬件适配 | 针对消费级GPU(如RTX 3060)优化,显存需求低 | 依赖专业级GPU(如A100/H100),需多卡并行或分布式部署 | Ollama 可在 24GB 显存运行 32B 模型,vLLM 需至少 64GB | | 性能与资源平衡 | | | 量化后 Ollama 速度可提升,但仍低于 vLLM | | 适用场景 | | | |
总结:Ollama更适合个人开发和轻量级应用,而vLLM则更适合企业级服务和高并发场景。
DeepSeek-R1-Distill-Qwen-32B模型对比DeepSeek-R1-Distill-Qwen-32B模型在Ollama和vLLM框架下的显存占用、存储需求及性能对比 | 指标 | Ollama (4-bit) | vLLM (FP16) | 说明 |
|---|
| 显存占用 | | | Ollama通过4-bit量化压缩参数,vLLM需保留完整FP16参数和激活值 | | 存储空间 | | | Ollama存储量化后模型,vLLM存储原始FP16精度模型 | | 推理速度 | | | Ollama因量化计算效率降低,vLLM通过批处理和并行优化提升吞吐量 | | 硬件门槛 | | | 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 服务开机启动 systemctlenabledocker
验证 Docker 安装查看 Docker 版本 docker -v
环境准备更新软件包列表并安装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容器 dockerimages
启动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服务重启。- -v /data/deepseek-ai:/data将主机上的/data/deepseek-ai目录挂载到容器的/data目录,用于存储模型文件和数据。
- 将容器的8000端口映射到主机的18005端口,用于通过主机端口访问容器内的服务。
-itd 命令选项组合,-i和-t、-d,保持容器在后台运行,同时允许用户通过Docker logs或attach命令查看输出。 --gpus all --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密钥,用于身份验证和授权,确保只有有权限的用户才能访问服务。
docker logs -f b05b9c3646ec
访问vLLM容器dockerexec-it b05b9c3646ec /bin/bash
vLLM API 调用测试curlhttp://192.168.1.34:18005/v1/completions\-H"Content-Type:application/json"\-H"Authorization:Bearertoken-abc123"\-d'{"model":"DeepSeek-R1-Distill-Llama-70B","prompt":"北京的著名景点有哪些","max_tokens":1000,"temperature":0.3}'
Chatbox设置
DeepSeek-R1 模型 Ollama VS vLLM 占用显存对比 | | | |
|---|
| DeepSeek-R1-Distill-Qwen-1.5B | | | | | DeepSeek-R1-Distill-Qwen-7B | | | | | DeepSeek-R1-Distill-Llama-8B | | | | | DeepSeek-R1-Distill-Qwen-14B | | | | | DeepSeek-R1-Distill-Qwen-32B | | | | | DeepSeek-R1-Distill-Llama-70B | | | | | | | |
PyTorch、cuDNN、CUDA、NVIDIA驱动和NVIDIA GPU之间的关系- PyTorch作为应用层,调用cuDNN和CUDA提供的接口来加速计算。
- cuDNN作为加速库层,依赖于CUDA提供的GPU计算能力,优化了深度学习任务。
- CUDA作为计算平台层,依赖于NVIDIA驱动与GPU硬件通信,提供了通用的GPU计算接口。
- NVIDIA驱动作为驱动层,管理着NVIDIA GPU的硬件资源,允许上层软件与GPU进行交互。
- NVIDIA GPU作为硬件层,执行实际的计算任务,提供了强大的并行计算能力。
|