算力集群负载均衡配置,多机分布式推理
多机分布式推理的核心是把用户请求均匀分发到多台推理服务器,同时保证单点故障不影响整体服务。
本文从零开始,带你完成算力集群负载均衡配置,最终实现多台机器协同处理推理任务,适合刚接触集群运维或需要部署AI推理服务的读者。
先理清集群角色和网络条件
在动手前,先确认三件事:负载均衡器、推理工作节点、共享存储或模型分发方式。
负载均衡器负责接收请求并转发,工作节点运行模型服务,共享存储用于存放模型文件(也可以用镜像内置)。
假设你有3台机器:
lb01:负载均衡器,IP192.168.1.10node01:推理节点,IP192.168.1.11node02:推理节点,IP192.168.1.12
所有机器建议使用相同操作系统版本,并确保内网互通。
如果模型较大,提前在每台节点本地准备好模型文件,或者挂载NFS。
配置负载均衡器转发规则
这里使用Nginx做四层或七层转发。
如果推理服务是HTTP接口,用七层更灵活;
如果是gRPC,用四层stream。
安装Nginx:
sudo apt update && sudo apt install nginx -y
编辑配置文件 /etc/nginx/conf.d/inference_lb.conf:
upstream inference_backend {
least_conn;
server 192.168.1.11:8000 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8000 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass http://inference_backend;
proxy_next_upstream error timeout http_502 http_503;
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
}
}
least_conn 表示优先转发给连接数少的节点,适合推理耗时差异较大的场景。
保存后执行:
sudo nginx -t && sudo systemctl reload nginx
部署多机分布式推理服务
在每个推理节点上启动模型服务。
以常见的Python推理框架为例,确保监听地址为 0.0.0.0,端口与Nginx配置一致。
在 node01 和 node02 上分别执行:
python -m your_inference_server --host 0.0.0.0 --port 8000 --model /data/models/llama-7b
如果使用Docker,命令类似:
docker run -d --gpus all -p 8000:8000 -v /data/models:/models inference-image:latest
启动后,在负载均衡器上测试连通性:
curl http://192.168.1.11:8000/health
curl http://192.168.1.12:8000/health
两个节点都应返回正常状态。
然后通过负载均衡器访问:
curl http://192.168.1.10/health
避坑指南:常见配置错误
- 节点健康检查缺失:Nginx默认被动检查,节点挂掉后可能仍转发请求。建议在推理服务中实现
/health接口,并配合max_fails和fail_timeout使用。 - 超时时间过短:推理任务可能耗时较长,
proxy_read_timeout默认60秒,大模型推理建议调整为300秒以上。 - 模型未同步:多节点模型版本不一致会导致输出不同。务必保证模型文件相同,或使用共享存储。
- GPU资源争用:单节点多进程可能显存不足,建议一个节点只运行一个推理实例,通过负载均衡横向扩展。
验证负载均衡是否生效
在负载均衡器上多次请求推理接口,观察请求是否落到不同节点。
可以临时修改节点返回的响应头,或者查看各节点日志。
简单方法:在 node01 和 node02 的推理服务中分别返回不同标识,然后执行:
for i in {1..6}; do curl -s http://192.168.1.10/predict -d '{"input":"test"}'; echo; done
如果输出交替出现两个节点的标识,说明负载均衡配置成功。
另外,手动停止一个节点,再次请求应仍能正常响应,验证故障转移。
多机分布式推理的稳定性取决于负载均衡策略和健康检查机制,建议先用小规模请求压测,再逐步增加流量。
常见疑问
推理服务需要做会话保持吗?
如果推理是无状态的,不需要。有状态服务(如长连接)则需在Nginx中配置 ip_hash 或 sticky 模块。
负载均衡器会成为单点故障吗?
会。生产环境建议部署两个负载均衡器,通过Keepalived做VIP漂移,避免单点。
如何监控各节点负载?
可以在节点上部署Node Exporter,用Prometheus收集GPU利用率、内存和请求延迟,再通过Grafana展示。
Nginx和LVS怎么选?
Nginx适合七层转发和HTTP场景,配置简单;LVS适合四层高性能转发,但配置复杂。中小规模推理集群优先用Nginx。
按照以上步骤操作后,你应该已经拥有一个基本可用的多机推理集群。
后续可根据业务压力调整负载均衡算法,或引入Kubernetes做更细粒度的调度。