关键要点
- 多GPU:将大模型分割到2+个GPU上。示例:70B模型均匀分割到2× RTX 4090 = 总计48 GB VRAM。
- 速度损失:~5-10%(GPU间通信开销)。
- 最适用于: 70B+模型,高并发服务(50+并发用户)。
- 自动化: 现代工具(vLLM、Ollama、llama.cpp)自动检测多GPU。
- 截至2026年4月,这是生产部署的标准做法。
层分割和张量并行如何工作?
70B Transformer模型有80层。 使用层分割,Ollama可能会这样放置:
- GPU 1:第1-40层
- GPU 2:第41-80层
生成token时,它通过GPU 1流向GPU 2,然后回到GPU 1以生成下一个token。通信开销最小。
•💡: 专业提示:层很轻——重要的是GPU间通信速度。第1–40层在GPU1上,第41–80层在GPU2上意味着每个token有一次GPU传输。这是为什么NVLink重要。
vLLM多GPU设置
vLLM开箱即用地支持张量并行,只需一个命令。 使用`--tensor-parallel-size`标志指定GPU数量:
# 在2个GPU上运行70B模型
vllm serve meta-llama/Llama-3.1-70B \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.95 \
--port 8000
# API现在位于 http://localhost:8000/v1
# 相同API,自动多GPU处理•⚠️: 警告:两个GPU必须具有相同的VRAM。如果配对RTX 4090(24 GB)+ RTX 4080(16 GB),vLLM将被限制为每个GPU 16 GB。使用匹配的GPU以获得最佳性能。
Ollama多GPU设置
Ollama自动检测多GPU并自动分割:
1. 正常运行Ollama:`ollama serve`
2. Ollama检测2+个GPU并自动分割模型
3. 无需配置——它就是有效的。
通过`nvidia-smi`或`rocm-smi`验证两个GPU都在加载。
•🛠️: 最佳实践:通过运行`nvidia-smi`验证多GPU设置是否有效,并检查两个GPU内存使用情况。如果只有一个GPU在加载,Ollama可能未检测到第二个GPU。检查驱动版本,如果需要升级。
2个GPU的性能
| Setup | Model | Speed | Cost |
|---|---|---|---|
| 1× RTX 4090 (24GB) | 7B | 150 tok/sec | $1,800 |
| 1× RTX 4090 (24GB) | 70B | 无法运行 | $1,800 |
| 2× RTX 4090 (48GB) | 70B Q4 | 100 tok/sec | $3,600 |
| 2× RTX 4090 (48GB) | 70B Q5 | 90 tok/sec | $3,600 |
| 1× RTX 5090 (32GB) | 70B Q4 | 40–50 tok/sec | $2,000 |
| 2× RTX 5090 (64GB) | 70B Q8 | 120 tok/sec | $4,000 |
| 2× RTX 5090 (64GB) | 405B Q4 | 25–35 tok/sec | $4,000 |
| RTX 6000 Ada + RTX 4090 | 70B FP16 | 110 tok/sec | $6,800 |
•📌: 关键点:两个RTX 4090在70B模型上提供约100 tok/sec——大约是单GPU速度的90%,因为5–10%通信开销。RTX 5090(32 GB GDDR7,2026年1月发布)改变了游戏规则:单个5090在40–50 tok/sec下运行70B Q4,无需分割。双5090(64 GB合计)是首个能处理405B Q4模型的消费级设置。
何时使用多GPU?
当您需要70B+模型或高并发服务时,多GPU具有成本效益。 在以下情况下使用多个GPU:
- 您需要运行70B+模型。
- 您服务50+并发用户(批处理)。
- 您想同时运行多个13B模型。
- 您运行生产服务(不是实验)。
•💡: 专业提示:对于70B模型的实验,先尝试单GPU CPU卸载(RTX 4090上8–10 tok/sec)。一旦确认生产需求,投资第二个RTX 4090以实现多GPU设置(100 tok/sec)。
常见多GPU错误
- 期望2个GPU有2倍加速。 您获得单GPU速度的约90%(GPU通信5-10%开销)。
- 假设GPU必须相同。 您可以混合RTX 4090 + RTX 4080,但vLLM将受到较慢GPU的限制。
- 不使用NVLink通信。 没有NVLink,多GPU通信更慢。NVLink在消费级GPU上很少见。
- 忽视PCIe带宽。 GPU间通信通过PCIe进行,限制带宽(PCIe 4.0上约16 GB/sec)。
- 在尝试单GPU选项之前购买第二个GPU。 在投资$1,800+购买第二个RTX 4090之前,尝试:(1) Q4量化而不是Q5/Q8(减半VRAM),(2) 通过Ollama的CPU卸载(单4090上70B的8–10 tok/sec),(3) RTX 5090 32 GB单卡(无分割运行70B Q4,$2,000)。多GPU应该是最后的优化,不是第一选择。
•⚠️: 警告:匹配GPU型号对一致的性能至关重要。不匹配的GPU(例如4090 + 4080)会产生瓶颈,其中较慢的卡决定系统速度。在生产中,始终配对相同的GPU。
常见问题
•💬: 您知道吗?NVLink带宽(900 GB/sec)vs PCIe带宽(64 GB/sec)是多GPU性能的隐藏因素。具有NVLink的A100/H100专业GPU可以实现近似线性扩展(例如2个GPU实现2倍加速)。消费级RTX卡限制在PCIe上,导致5–10%开销。
我何时应该为本地LLM使用多个GPU?
当单个GPU对您的目标模型VRAM不足时,使用多个GPU。两个RTX 4090(合计48 GB)在Q5量化下以约100 tokens/sec运行70B模型。带卸载的单GPU仅为同一模型实现8–10 tokens/sec。当您已经拥有或可以获得第二个GPU时,多GPU对70B+模型具有成本效益。
vLLM张量并行如何跨GPU工作?
vLLM使用张量并行(`--tensor-parallel-size 2`)跨GPU分割模型层。每个GPU持有一半的模型权重矩阵;计算并行发生,结果通过NVLink或PCIe通信。NVLink(NVLink 4.0:900 GB/sec双向)对于GPU间通信显著快于PCIe(64 GB/sec)。
NVLink对LLM推理有显著差异吗?
NVLink相对于PCIe为需要频繁GPU间通信的大模型提高吞吐量10–30%。对于跨两个GPU分割的70B模型,NVLink将通信开销从~15%降低到~3–5%。消费级RTX卡使用PCIe;NVLink在专业A100/H100 GPU上可用。对于家庭使用,PCIe足够。
我可以混合不同的GPU型号(例如RTX 4090 + RTX 4080)进行层分割吗?
技术上可以——vLLM和llama.cpp支持混合GPU设置。实际上,较慢的GPU成为瓶颈。4090+4080对的性能更接近两个4080而不是两个4090。强烈建议为生产部署匹配GPU型号。
70B和405B模型需要多少个GPU?
70B @ Q4:适合2× RTX 4090(需要35 GB,可用48 GB)。70B @ Q8:需要4× RTX 4090(需要70 GB)。405B @ Q4:需要4× RTX 4090(需要200 GB——勉强适合)。对于405B,推荐的平台是专业A100 80GB×4(合计320 GB)。
层分割vs单GPU的速度损失是多少?
层分割增加5–10%开销来自GPU间通信。两个RTX 4090运行70B模型实现约100 tokens/sec——大约是单个理论48 GB GPU能达到的90%。这远好于CPU卸载(8–10 tokens/sec)或单个4090运行不可能的70B模型。
我可以在单个RTX 5090上无多GPU运行70B吗?
可以——RTX 5090(32 GB GDDR7,2026年1月)在Q4_K_M量化下适合Llama 3.3 70B(~40 GB与KV缓存在短上下文,32 GB下4K上下文处于紧张状态)。性能:40–50 tok/sec。对于更长上下文(32K+)或更高量化(Q5+)的70B,仍需要双GPU。5090消除了短上下文下70B Q4的多GPU需求。
对于多GPU LLM设置,PCIe 5.0值得吗?
PCIe 5.0相对于PCIe 4.0的~128 GB/sec带宽增加一倍到64 GB/sec。对于双GPU 70B推理,这将通信开销从~10%降低到~6–7%。改进明显但非革命性——NVLink(900 GB/sec)仍然是实现近似线性扩展的唯一方式。对于消费者构建,如果购买新的,建议使用PCIe 5.0主板,但仅为多GPU升级PCIe 4.0不具有成本效益。
来源
- vLLM张量并行文档 -- 关于分布式服务和张量并行的官方vLLM文档。
- Ollama多GPU支持 -- Ollama GitHub文档用于GPU检测和层分割。
- PyTorch分布式张量 -- 分布式张量操作的核心框架文档。