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

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

ztj100 2025-03-03 21:14 5 浏览 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 利用率和显存占用,调整策略以优化性能。

相关推荐

从IDEA开始,迈进GO语言之门(idea got)

前言笔者在学习GO语言编程的时候,GO语言在国内还没有像JAVA/Php/Python那样普及,绕了不少的弯路,要开始入门学习一门编程语言,最好就先从选择一个好的编程语言的开发环境开始,有了这个开发环...

基于SpringBoot+MyBatis的私人影院java网上购票jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍基于SpringBoot...

基于springboot的个人服装管理系统java网上商城jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍基于springboot...

基于springboot的美食网站Java食品销售jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍基于springboot...

贸易管理进销存springboot云管货管账分析java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目描述贸易管理进销存spring...

SpringBoot+VUE员工信息管理系统Java人员管理jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍SpringBoot+V...

目前见过最牛的一个SpringBoot商城项目(附源码)还有人没用过吗

帮粉丝找了一个基于SpringBoot的天猫商城项目,快速部署运行,所用技术:MySQL,Druid,Log4j2,Maven,Echarts,Bootstrap...免费给大家分享出来前台演示...

SpringBoot+Mysql实现的手机商城附带源码演示导入视频

今天为大家带来的是基于SpringBoot+JPA+Thymeleaf框架的手机商城管理系统,商城系统分为前台和后台、前台用的是Bootstrap框架后台用的是SpringBoot+JPA都是现在主...

全网首发!马士兵内部共享—1658页《Java面试突击核心讲》

又是一年一度的“金九银十”秋招大热门,为助力广大程序员朋友“面试造火箭”,小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》!...

SpringBoot数据库操作的应用(springboot与数据库交互)

1.JDBC+HikariDataSource...

SpringBoot 整合 Flink 实时同步 MySQL

1、需求在Flink发布SpringBoot打包的jar包能够实时同步MySQL表,做到原表进行新增、修改、删除的时候目标表都能对应同步。...

SpringBoot + Mybatis + Shiro + mysql + redis智能平台源码分享

后端技术栈基于SpringBoot+Mybatis+Shiro+mysql+redis构建的智慧云智能教育平台基于数据驱动视图的理念封装element-ui,即使没有vue的使...

Springboot+Mysql舞蹈课程在线预约系统源码附带视频运行教程

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的Springboot+Mysql舞蹈课程在线预约系统,系统项目源代码在【猿来入此】获取!https://www.yuan...

SpringBoot+Mysql在线众筹系统源码+讲解视频+开发文档(参考论文

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的在线众筹管理系统,主要实现了普通用户在线参与众筹基本操作流程的全部功能,系统分普通用户、超级管理员等角色,除基础脚手架外...

Docker一键部署 SpringBoot 应用的方法,贼快贼好用

这两天发现个Gradle插件,支持一键打包、推送Docker镜像。今天我们来讲讲这个插件,希望对大家有所帮助!GradleDockerPlugin简介...

取消回复欢迎 发表评论: