返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

为什么vLLM做不到?解密Ollama越级部署黑科技:以DeepSeek-R1-8B为例

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 17:27 |阅读模式 打印 上一主题 下一主题

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">最近在折腾双4090GPU,近200g内存服务器vllm部署70b的实验。使用ragflow知识库。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">按照我之前使用ollama的理解,我觉的部署70b应该没啥问题,然后一个个的坑。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">先说下

  • ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">
    • 部署30b,还是很流畅的,但是推理能力确实比较弱
  • ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">
    • 部署70b,通过不断地优化参数,最大tokens,4096 tokens没问题(还部署了一个bge-m3)
  • ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">
    • 但是在ragflow中使用的时候,由于超出最大tokens,经常报oom,因此给ragflow的官方提交了一个issue。官方很快就修复了,这块还是很赞的。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">越折腾疑问越多,然后我就了解下了一些知识点,有了这篇水文。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">我们以RTX3060 12G显存为例拆解下。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(250, 81, 81);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">DeepSeek-R1-8B的显存解剖

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 12px;color: rgb(63, 63, 63);">原始显存需求

  • 权重(直接成本):8B参数 × 2字节(FP16)= 16 GB
  • KV Cache(上下文缓存)
    • • 动态增长:2 × 层数 × 头数 × 头维度 × 序列长度 × 批次大小 × 精度
    • • (以2048 tokens为例):2(K/V) × 32层 × 32头 × 128头维度 × 2048序列长度 × 2字节 = 1.07 GB
  • 总需求:16 + 1.07 ≈ 17.07 GB(远超RTX 3060的12GB上限)

Ollama的“瘦身魔法

  • 4-bit GPTQ量化:权重显存降至8B × 0.5字节 = 4 GB
  • 动态卸载策略:将部分权重临时转存至CPU内存,显存占用降至6.2 GB(实测数据)
  • 代价:CPU-GPU数据传输使Token生成速度从45 tokens/s降至28 tokens/s

最疯狂的是,我一个前同事用ollama,在macbook air 8g内存上部署了70b的模型。

vLLM的“显存洁癖"

  • 设计原则:vllm追求极致吞吐量,拒绝任何可能影响性能的动态卸载
  • 显存硬门槛:要求权重+KV Cache完全驻留GPU,导致DeepSeek-R1-8B在12GB显卡上无法启动

Ollama越级部署的三大核心技术

混合精度量化(灵活度碾压vLLM)

  • 层级敏感量化:对底层MLP层使用4-bit,顶层Attention保留6-bit(减少精度损失)
  • 实测对比(DeepSeek-R1-8B生成任务):
量化方案
显存占用
PPL(困惑度)
Ollama混合精度
6.2 GB
7.1
vLLM官方INT8量化
10.5 GB
6.9

内存-CPU分级存储(vLLM的禁区)

  • 策略:将FP16的Attention权重保留在显存,MLP权重动态加载至内存
  • 技术代价
    • • 每次前向传播增加5-8ms的PCIe传输延迟
    • • 但显存需求直降40%(从10.5GB→6.2GB)

自适应序列切片

  • 长文本处理:当输入超过512 tokens时,自动拆分为多段并行处理
  • 显存优化效果:2048 tokens输入时,峰值显存降低32%

vLLM为何“宁死不做越级部署”?

设计目标的根本冲突

  • vLLM的核心使命:服务化场景下的高吞吐、低延迟(如百人同时访问的API)
  • 拒绝动态卸载的原因
    • • CPU-GPU数据传输会严重拖慢并发请求的处理速度
    • • 显存碎片化可能破坏连续内存分配机制(vLLM依赖的PagedAttention技术)

量化支持的局限性

  • 仅支持静态INT8:无法像Ollama混合使用4/6-bit,导致显存压缩率不足
  • 校准数据固化:vLLM要求离线量化,而Ollama支持运行时动态调整

硬件兼容性差异

  • Ollama的“妥协艺术”
    • • 为兼容消费级显卡(如RTX 3060),允许牺牲速度换取显存
    • • 甚至支持通过系统内存模拟显存(性能下降但能运行)
  • vLLM的“精英主义”
    • • 仅优化Tesla系列显卡(如A100/H100),依赖高带宽显存
    • • 在消费卡上性能反而不如Ollama(RTX 4090实测低15%吞吐量)

实战测试——RTX 3060上的生死对决

测试环境

  • • 显卡:NVIDIA RTX 3060 12GB
  • • 测试任务:DeepSeek-R1-8B生成512 tokens回答

结果对比

框架显存占用生成速度可用性
vLLM
报错退出
-
完全不可用
Ollama
6.2/12 GB
22 tokens/s
流畅运行
原版Hugging Face
17.1/12 GB
报错退出
不可用

关键结论

  • Ollama的生存逻辑:通过量化+动态卸载,将显存需求压缩至硬件的60%以下
  • vLLM的哲学缺陷:为追求工业级性能,放弃对资源受限场景的适配

开发者选型指南

选Ollama的场景

  • • 个人开发者/小团队:硬件有限(≤24GB显存)
  • • 需要快速验证模型效果,对延迟容忍度高
  • • 长文本生成需求(利用切片策略降低峰值显存)

选vLLM的场景

  • • 企业级API服务:需要支持高并发(≥100 QPS)
  • • 拥有A100/H800等专业显卡,追求极致吞吐量
  • • 需兼容现有Kubernetes集群调度系统

终极避坑建议

  • 警惕“虚假越级”:部分工具声称支持低显存运行,实则大幅裁剪模型参数(如DeepSeek-8B被阉割成6B)
  • 验证量化完整性:使用llm-int8工具检查Attention层是否真的保留高精度
  • 压测保平安:对Ollama需测试长时生成的显存泄漏问题(部分版本存在累积占用bug)

结语:没有神话,只有取舍

Ollama的“越级”本质是技术民主化——让更多人用上大模型,哪怕牺牲速度;vLLM的“高冷”则是商业现实的抉择。未来二者的融合或许会出现(如vLLM引入动态卸载),但在此之前,开发者仍需认清需求,选择最适合的战场。

相关术语

内存(RAM)与显存(VRAM)

  • 系统内存(RAM):由CPU直接管理的主内存,通常称为“内存”,物理上通过主板插槽连接,供所有系统进程共享。
  • 显存(VRAM):GPU专用内存,通过PCIe总线与CPU通信,专为高吞吐并行计算设计。
  • 关键区别
    • • CPU不直接拥有内存,而是通过内存控制器访问RAM;
    • • GPU显存是独立硬件,与CPU内存物理分离。

Ollama显存优化的本质:CPU-GPU异构内存交换

当Ollama声称“将部分权重转存至CPU内存”时,其技术本质是:
将GPU显存中暂时不用的权重数据,通过PCIe总线转移到系统内存(RAM),并在需要时动态加载回显存
这一过程涉及以下核心技术:

(1)内存分级策略(Memory Tiering)

  • 热数据:当前计算所需的权重(如正在执行的Attention层)保留在显存。
  • 冷数据:后续步骤才需要的权重(如下一层的MLP参数)暂存至系统内存。
  • 交换粒度:通常以层(Layer)为单位,例如将DeepSeek-R1-8B的32层分成多个组按需加载。

(2)预取与缓存(Prefetching & Caching)

  • 预加载机制:在计算当前层时,异步将下一层权重从系统内存提前传输至显存。
  • 缓存策略:对频繁使用的权重(如Embedding层)在显存中永久保留副本。

(3)硬件加速传输

  • Pinned Memory:使用torch.cuda.Stream配合锁页内存(Pinned Memory),减少CPU-GPU数据传输延迟。
  • Direct Memory Access(DMA):绕过CPU直接由GPU控制器管理传输,实测带宽可达PCIe 4.0 x16的32GB/s。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ