随着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 同步中间结果。
- 目标:扩展显存容量,适合超大模型推理。
优点
- 显存扩展能力强:
通过将权重分片到多个 GPU,可以支持比单 GPU 显存更大的模型。例如,一个 70B 参数模型可能需要 140GB 显存,张量并行可以将它分布到 4 张 40GB 的 GPU 上。 - 高吞吐量:
vLLM 针对推理服务优化,结合张量并行和高效的批处理(如 PagedAttention),能在多用户请求场景下提供更高的吞吐量。 - 灵活性:
可与流水线并行(Pipeline Parallelism)结合,适用于跨节点分布式推理,进一步扩展规模。 - 适合现代大模型:
对于参数量巨大的模型(如 LLaMA 70B 或更大的混合专家模型 MoE),张量并行是主流选择。
缺点
- 通信开销高:
每层计算都需要跨 GPU 通信(All-Reduce 或 All-Gather 操作),如果 GPU 间带宽不足(如无 NVLink,仅用 PCIe),性能会显著下降。 - 计算加速有限:
张量并行的主要目的是扩展显存,而非加速单次推理。对于小批次或单次请求,速度提升不明显,甚至可能因通信延迟变慢。 - 配置复杂:
需要手动指定 tensor_parallel_size,且硬件配置(如 NVLink 支持)会对效果产生很大影响。 - 资源利用率可能不均:
如果模型权重无法均匀分割,或者输入批次较小,某些 GPU 的计算能力可能未被充分利用。
适用场景
- 高吞吐量推理服务(如 API 服务器)。
- 超大模型(显存需求超过单 GPU 容量)。
- 有高速通信硬件支持的场景(如 DGX 系统或多 GPU 服务器)。
2. Ollama 的层级并行(Layer Parallelism)
原理
- 分割方式:基于 llama.cpp 的实现,将模型的层(layers,例如 Transformer 的多层结构)分配到不同 GPU 上。每个 GPU 负责计算模型中的一部分层,依次传递中间激活值(activation)。
- 依赖:层间通信较少,主要在层与层之间传递数据,通信开销低于张量并行。
- 目标:分散计算负载,同时扩展显存。
优点
- 通信开销低:
只需要在层与层之间传递激活值(通常是较小的张量),相比张量并行的频繁矩阵通信,带宽需求更低,适合普通 PCIe 连接的硬件。 - 计算加速潜力:
如果层分配合理,多个 GPU 可以并行处理不同层的计算,可能加速单次推理,尤其在模型层数较多时。 - 简单性:
Ollama 的层级并行是内置于 llama.cpp 的,默认情况下会尝试利用所有可用 GPU,无需过多手动配置。 - 适合中小模型:
对于中小规模模型(例如 7B 或 13B 参数),层级并行能有效利用多 GPU 的计算能力,而无需复杂设置。
缺点
- 显存扩展有限:
每个 GPU 需要存储部分层及其激活值。如果单层权重仍然很大(例如某些超大模型),单个 GPU 的显存可能不足,导致无法运行。 - 负载不均衡:
不同层的计算复杂度可能不同(例如注意力层和全连接层的计算量差异),导致某些 GPU 忙碌而其他 GPU 空闲。 - 吞吐量优化不足:
Ollama 更注重单机推理的简便性,缺乏 vLLM 那样的批处理优化,难以应对高并发请求。 - 依赖底层实现:
层级并行的效果受限于 llama.cpp 的实现,可能不如 vLLM 的张量并行在特定硬件上优化得彻底。
适用场景
- 单用户或低并发推理。
- 中小型模型(显存需求接近但不超过多 GPU 总和)。
- 普通消费级硬件(无 NVLink,仅 PCIe 连接)。
优缺点对比表
特性 | vLLM 张量并行 | Ollama 层级并行 |
显存扩展能力 | 强(支持超大模型) | 中等(受单层显存限制) |
计算加速效果 | 有限(通信开销高) | 中等(层间通信少) |
通信开销 | 高(需要高速带宽,如 NVLink) | 低(仅层间数据传递) |
吞吐量优化 | 强(服务场景优化) | 弱(单机推理为主) |
配置复杂度 | 高(需手动设置参数) | 低(默认尝试多 GPU) |
硬件依赖 | 高(需高速互联) | 低(普通 PCIe 即可) |
适用模型规模 | 大型到超大型模型 | 小型到中型模型 |
适用场景 | 高并发推理服务 | 单用户本地推理 |
实际应用选择建议
- 如果你运行超大模型(例如 70B+ 参数):
选择 vLLM 张量并行,因为它能有效分解显存需求,搭配高速通信硬件(如 NVLink)效果更佳。适合需要服务多人请求的场景。 - 如果你运行中小模型(例如 7B 或 13B):
选择 Ollama 层级并行,因为它简单易用,通信开销低,适合本地单机推理,尤其在普通硬件上。 - 硬件条件:
有 NVLink 或高端服务器:优先 vLLM。
普通消费级多 GPU(如 3090 或 4090):Ollama 更实用。 - 性能目标:
高吞吐量:vLLM(结合批处理和张量并行)。
单次推理速度:Ollama(层级并行可能更直接)。
补充说明
- 混合使用:在某些情况下,可以结合两种策略。例如,先用 vLLM 的张量并行分片权重,再用流水线并行分配层,但这需要更高复杂度的配置,Ollama 目前不支持这种灵活性。
- 硬件测试:无论选择哪种方式,建议用 nvidia-smi 监控 GPU 利用率和显存占用,调整策略以优化性能。