1. 项目背景与核心需求
在深度学习推理场景中,如何高效利用多GPU资源一直是个值得深入探讨的话题。最近我在部署一个基于LLM的实时问答系统时,遇到了一个典型的生产级需求:需要同时调用两张A100显卡运行Ollama模型服务,并实现请求的自动负载均衡、容错处理和性能监控。
这个需求看似简单,但实际涉及多个工程细节:
- 如何避免单卡过载而另一张卡闲置?
- 服务崩溃后如何自动恢复?
- 怎样量化系统的实际吞吐能力?
- 如何设计优雅的Python调用接口?
经过两周的实战调优,我总结出一套完整的解决方案。下面从架构设计到代码实现,分享关键细节和踩坑经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境搭建
2.1 硬件配置要点
- 使用NVIDIA A100 80GB PCIe版本(40GB版本显存可能不足)
- 建议搭配AMD EPYC或Intel Xeon Silver以上级别CPU
- 内存建议≥256GB(处理长文本时占用较高)
实测发现:当处理4096 tokens以上的长文本时,单卡显存占用可能突破60GB。这也是选择80GB版本的重要原因。
2.2 Ollama多实例部署
bash复制# 第一个实例使用GPU 0
OLLAMA_HOST=0.0.0.0 OLLAMA_GPUS=0 ollama serve
# 第二个实例使用GPU 1(需要另开终端)
OLLAMA_HOST=0.0.0.0 OLLAMA_GPUS=1 ollama serve --port 11435
关键参数说明:
--port指定不同端口避免冲突- 通过环境变量
OLLAMA_GPUS绑定指定GPU - 建议使用tmux或screen保持服务后台运行
3. 核心功能实现
3.1 轮询分发算法
python复制class GPURoundRobin:
def __init__(self, endpoints):
self.endpoints = endpoints
self.index = 0
self.lock = threading.Lock()
def get_endpoint(self):
with self.lock:
