llama.cpp 多 GPU 分布式计算优化实践
在大模型本地部署中,单卡显存往往成为瓶颈。通过合理配置 llama.cpp 的多 GPU 支持,可以有效利用多卡资源提升推理吞吐并降低延迟。以下从设备调度、编译构建到参数调优的实战经验,帮助你在多卡环境下跑通高性能推理。
设备发现与调度机制
llama.cpp 基于 GGML 后端管理跨设备计算。启动时系统会自动扫描可用硬件,按优先级排序: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

