百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

关于多显卡并行部署大模型

ztj100 2025-03-03 21:14 15 浏览 0 评论

随着deepseek的爆火,和vllm和ollama等框架的加持,是的部署一个大语言模型变得越来越简单,但是大模型往往是分参数级别的,以billion(十亿)为单位,分7B,32B,40B,72B等,deepseek的最高版(满血版)是685B,不通的参数级别对显存的要求大小不一样,有的需要显存24g,48g等等,如果想运行参数太大,一张显卡的显存不够怎么办,这就需要一台电脑上装多个显卡,也就涉及到部署框架同时使用多个显卡的显存来运行大模型的情况。

下面我列出vllm和ollama,两种最常用的部署框架的多显卡并行的对比。

vLLM 的张量并行(Tensor Parallelism)和 Ollama 的层级并行(Layer Parallelism)是两种不同的多 GPU 并行策略,适用于不同的场景和需求。以下是对它们的优缺点对比,结合技术原理和实际应用:

1. vLLM 的张量并行(Tensor Parallelism)

原理

  • 分割方式:将模型的每一层的权重矩阵(例如 Transformer 的注意力层或全连接层)按列或行分割,分摊到多个 GPU 上。每个 GPU 负责计算矩阵的一部分,然后通过通信(如 NCCL)汇总结果。
  • 依赖:需要 GPU 间的高速通信(例如 NVLink 或 PCIe),因为每一步计算都需要跨 GPU 同步中间结果。
  • 目标:扩展显存容量,适合超大模型推理。

优点

  1. 显存扩展能力强
    通过将权重分片到多个 GPU,可以支持比单 GPU 显存更大的模型。例如,一个 70B 参数模型可能需要 140GB 显存,张量并行可以将它分布到 4 张 40GB 的 GPU 上。
  2. 高吞吐量
    vLLM 针对推理服务优化,结合张量并行和高效的批处理(如 PagedAttention),能在多用户请求场景下提供更高的吞吐量。
  3. 灵活性
    可与流水线并行(Pipeline Parallelism)结合,适用于跨节点分布式推理,进一步扩展规模。
  4. 适合现代大模型
    对于参数量巨大的模型(如 LLaMA 70B 或更大的混合专家模型 MoE),张量并行是主流选择。

缺点

  1. 通信开销高
    每层计算都需要跨 GPU 通信(All-Reduce 或 All-Gather 操作),如果 GPU 间带宽不足(如无 NVLink,仅用 PCIe),性能会显著下降。
  2. 计算加速有限
    张量并行的主要目的是扩展显存,而非加速单次推理。对于小批次或单次请求,速度提升不明显,甚至可能因通信延迟变慢。
  3. 配置复杂
    需要手动指定 tensor_parallel_size,且硬件配置(如 NVLink 支持)会对效果产生很大影响。
  4. 资源利用率可能不均
    如果模型权重无法均匀分割,或者输入批次较小,某些 GPU 的计算能力可能未被充分利用。

适用场景

  • 高吞吐量推理服务(如 API 服务器)。
  • 超大模型(显存需求超过单 GPU 容量)。
  • 有高速通信硬件支持的场景(如 DGX 系统或多 GPU 服务器)。

2. Ollama 的层级并行(Layer Parallelism)

原理

  • 分割方式:基于 llama.cpp 的实现,将模型的层(layers,例如 Transformer 的多层结构)分配到不同 GPU 上。每个 GPU 负责计算模型中的一部分层,依次传递中间激活值(activation)。
  • 依赖:层间通信较少,主要在层与层之间传递数据,通信开销低于张量并行。
  • 目标:分散计算负载,同时扩展显存。

优点

  1. 通信开销低
    只需要在层与层之间传递激活值(通常是较小的张量),相比张量并行的频繁矩阵通信,带宽需求更低,适合普通 PCIe 连接的硬件。
  2. 计算加速潜力
    如果层分配合理,多个 GPU 可以并行处理不同层的计算,可能加速单次推理,尤其在模型层数较多时。
  3. 简单性
    Ollama 的层级并行是内置于 llama.cpp 的,默认情况下会尝试利用所有可用 GPU,无需过多手动配置。
  4. 适合中小模型
    对于中小规模模型(例如 7B 或 13B 参数),层级并行能有效利用多 GPU 的计算能力,而无需复杂设置。

缺点

  1. 显存扩展有限
    每个 GPU 需要存储部分层及其激活值。如果单层权重仍然很大(例如某些超大模型),单个 GPU 的显存可能不足,导致无法运行。
  2. 负载不均衡
    不同层的计算复杂度可能不同(例如注意力层和全连接层的计算量差异),导致某些 GPU 忙碌而其他 GPU 空闲。
  3. 吞吐量优化不足
    Ollama 更注重单机推理的简便性,缺乏 vLLM 那样的批处理优化,难以应对高并发请求。
  4. 依赖底层实现
    层级并行的效果受限于 llama.cpp 的实现,可能不如 vLLM 的张量并行在特定硬件上优化得彻底。

适用场景

  • 单用户或低并发推理。
  • 中小型模型(显存需求接近但不超过多 GPU 总和)。
  • 普通消费级硬件(无 NVLink,仅 PCIe 连接)。

优缺点对比表

特性

vLLM 张量并行

Ollama 层级并行

显存扩展能力

强(支持超大模型)

中等(受单层显存限制)

计算加速效果

有限(通信开销高)

中等(层间通信少)

通信开销

高(需要高速带宽,如 NVLink)

低(仅层间数据传递)

吞吐量优化

强(服务场景优化)

弱(单机推理为主)

配置复杂度

高(需手动设置参数)

低(默认尝试多 GPU)

硬件依赖

高(需高速互联)

低(普通 PCIe 即可)

适用模型规模

大型到超大型模型

小型到中型模型

适用场景

高并发推理服务

单用户本地推理


实际应用选择建议

  1. 如果你运行超大模型(例如 70B+ 参数)
    选择 vLLM 张量并行,因为它能有效分解显存需求,搭配高速通信硬件(如 NVLink)效果更佳。适合需要服务多人请求的场景。
  2. 如果你运行中小模型(例如 7B 或 13B)
    选择 Ollama 层级并行,因为它简单易用,通信开销低,适合本地单机推理,尤其在普通硬件上。
  3. 硬件条件
    有 NVLink 或高端服务器:优先 vLLM。
    普通消费级多 GPU(如 3090 或 4090):Ollama 更实用。
  4. 性能目标
    高吞吐量:vLLM(结合批处理和张量并行)。
    单次推理速度:Ollama(层级并行可能更直接)。

补充说明

  • 混合使用:在某些情况下,可以结合两种策略。例如,先用 vLLM 的张量并行分片权重,再用流水线并行分配层,但这需要更高复杂度的配置,Ollama 目前不支持这种灵活性。
  • 硬件测试:无论选择哪种方式,建议用 nvidia-smi 监控 GPU 利用率和显存占用,调整策略以优化性能。

相关推荐

Vue3非兼容变更——函数式组件(vue 兼容)

在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组...

利用vue.js进行组件化开发,一学就会(一)

组件原理/组成组件(Component)扩展HTML元素,封装可重用的代码,核心目标是为了可重用性高,减少重复性的开发。组件预先定义好行为的ViewModel类。代码按照template\styl...

Vue3 新趋势:10 个最强 X 操作!(vue.3)

Vue3为前端开发带来了诸多革新,它不仅提升了性能,还提供了...

总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率

SFC单文件组件顾名思义,就是一个.vue文件只写一个组件...

前端流行框架Vue3教程:17. _组件数据传递

_组件数据传递我们之前讲解过了组件之间的数据传递,...

前端流行框架Vue3教程:14. 组件传递Props效验

组件传递Props效验Vue组件可以更细致地声明对传入的props的校验要求...

前端流行框架Vue3教程:25. 组件保持存活

25.组件保持存活当使用...

5 个被低估的 Vue3 实战技巧,让你的项目性能提升 300%?

前端圈最近都在卷性能优化和工程化,你还在用老一套的Vue3开发方法?作为摸爬滚打多年的老前端,今天就把私藏的几个Vue3实战技巧分享出来,帮你在开发效率、代码质量和项目性能上实现弯道超车!一、...

绝望!Vue3 组件频繁崩溃?7 个硬核技巧让性能暴涨 400%!

前端的兄弟姐妹们五一假期快乐,谁还没在Vue3项目上栽过跟头?满心欢喜写好的组件,一到实际场景就频频崩溃,页面加载慢得像蜗牛,操作卡顿到让人想砸电脑。用户疯狂吐槽,领导脸色难看,自己改代码改到怀疑...

前端流行框架Vue3教程:15. 组件事件

组件事件在组件的模板表达式中,可以直接使用...

Vue3,看这篇就够了(vue3 从入门到实战)

一、前言最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是CompositionAPI和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么...

前端流行框架Vue3教程:24.动态组件

24.动态组件有些场景会需要在两个组件间来回切换,比如Tab界面...

前端流行框架Vue3教程:12. 组件的注册方式

组件的注册方式一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册...

焦虑!Vue3 组件频繁假死?6 个奇招让页面流畅度狂飙 500%!

前端圈的朋友们,谁还没在Vue3项目上踩过性能的坑?满心期待开发出的组件,一到高并发场景就频繁假死,用户反馈页面点不动,产品经理追着问进度,自己调试到心态炸裂!别以为这是个例,不少人在电商大促、数...

前端流行框架Vue3教程:26. 异步组件

根据上节课的代码,我们在切换到B组件的时候,发现并没有网络请求:异步组件:...

取消回复欢迎 发表评论: