llama.cpp 多 GPU 分布式计算优化实践指南
在大模型推理场景中,单卡显存往往成为瓶颈。当模型参数量超过单 GPU 显存上限时,如何高效利用多卡资源进行分布式推理是本地部署的关键。本文将从实战角度出发,梳理 llama.cpp 在多 GPU 环境下的设备调度、显存分配和并行效率优化方案。
多 GPU 架构解析:从设备发现到任务调度
llama.cpp 基于 GGML 后端实现跨设备计算调度,核心逻辑位于设备管理模块。系统启动时会扫描所有可用计算设备,按优先级分为独立 GPU、集成显卡 (iGPU) 和 RPC 服务器三类。代码层面的设备选择遵循'能力优先'原则,即独立 GPU 优于集成显卡,本地设备优于网络节点。
// src/llama.cpp:190-248 设备分类与优先级排序
std::vector<ggml_backend_dev_t> gpus;
std::vector<ggml_backend_dev_t> igpus;
std::vector<ggml_backend_dev_t> rpc_servers;
// 优先添加 RPC 服务器,减少网络传输
model->devices.insert(model->devices.begin(), rpc_servers.begin(), rpc_servers.end());
// 其次添加独立 GPU
model->devices.insert(model->devices.end(), gpus.begin(), gpus.end());
// 最后添加集成 GPU(仅当无其他设备时)
if (model->devices.empty()) {
model->devices.insert(model->devices.end(), igpus.begin(), igpus.end());
}
设备初始化后,控制台会输出类型、ID 及可用显存信息,典型日志如下:
llama_model_load_from_file: using device 0 (GPU) (NVIDIA GeForce RTX 4090) (PCIe 4.0) - 23028 MiB free
llama_model_load_from_file: using device 1 (GPU) (NVIDIA GeForce RTX 3060) (PCIe 3.0) - 11019 MiB free

