多机分布式大模型部署,算力集群搭建教程
多机分布式大模型部署的核心是把多台服务器的 GPU 通过高速网络连接起来,让它们协同训练或推理同一个模型。
本文面向零基础用户,从硬件准备到任务启动,给出可照做的步骤和常见报错处理,读完你就能搭建一个基础算力集群并跑通分布式任务。
硬件与网络准备
搭建算力集群前,先确认每台机器满足以下条件:
- GPU:建议同型号、同显存,避免通信瓶颈。例如 4 台机器各配 8 张 A100 或 4090。
- 网络:多机通信推荐 InfiniBand 或 RoCE 高速网卡。如果没有,至少使用万兆以太网,千兆网会严重拖慢训练。
- 存储:共享存储(如 NFS)方便代码和数据同步,也可以每台机器本地存放相同副本。
- 系统:Ubuntu 20.04/22.04 较常见,内核版本尽量一致。
检查 GPU 是否识别:
nvidia-smi
检查机器间网络延迟和带宽:
# 在机器 A 上
ping 机器B_IP
# 用 iperf3 测带宽
iperf3 -s # 服务端
# 客户端
iperf3 -c 机器A_IP
基础软件环境配置
所有机器执行相同操作,保证环境一致。
1. 安装驱动和 CUDA
根据 GPU 型号安装对应驱动,CUDA 版本需与后续 PyTorch 匹配。
sudo apt update
sudo apt install -y nvidia-driver-535
# 重启后验证
nvidia-smi
2. 安装 Python 环境
建议用 conda 管理,避免系统 Python 冲突。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
conda create -n llm python=3.10 -y
conda activate llm
3. 安装 PyTorch 和分布式库
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install deepspeed transformers
4. 配置免密 SSH
多机启动需要从主节点免密登录其他节点。
# 在主节点生成密钥
ssh-keygen -t rsa
# 复制到所有节点
ssh-copy-id user@节点IP
# 测试
ssh user@节点IP hostname
通信与分布式参数设置
多机训练依赖正确的网络接口和通信后端。
- NCCL:NVIDIA 的集合通信库,PyTorch 分布式默认使用。
- 环境变量:指定网卡和通信超时。
export NCCL_SOCKET_IFNAME=eth0 # 替换为实际网卡名
export NCCL_IB_DISABLE=1 # 如果没有 InfiniBand 则禁用
export NCCL_DEBUG=INFO # 调试时打开
export NCCL_TIMEOUT=1800
查看网卡名:
ip addr show
关键判断:如果 NCCL_DEBUG=INFO 输出中看到 NET/IB 或 NET/Socket 建立成功,说明通信正常;
若卡在 NCCL INFO Bootstrap 则通常是网络或防火墙问题。
启动分布式训练任务
以 PyTorch 的 torchrun 为例,在主节点执行:
torchrun \
--nnodes=2 \
--nproc_per_node=8 \
--node_rank=0 \
--master_addr="主节点IP" \
--master_port=29500 \
train.py
在其他节点执行相同命令,但修改 --node_rank=1、2 等。
验证是否成功:
- 每个节点日志出现
Initializing process group和rank=...。 nvidia-smi显示所有 GPU 显存被占用。- 训练 loss 开始下降。
常见报错与避坑指南
1. NCCL 超时或连接失败
- 检查防火墙是否放行 master_port 和 NCCL 使用的随机端口。
- 确认所有节点时间同步:
sudo ntpdate ntp.aliyun.com。 - 尝试
export NCCL_DEBUG=INFO查看具体卡在哪一步。
2. 显存不足(OOM)
- 减小 batch size,或使用梯度累积。
- 启用 ZeRO 优化:DeepSpeed 配置中设置
"zero_optimization": {"stage": 2}。
3. 节点间速度不一致
- 确保所有机器 GPU 型号和驱动版本相同。
- 用
nvidia-smi topo -m检查 GPU 间连接是 NVLink 还是 PCIe。
4. 共享存储读写慢
- 数据先拷贝到本地 SSD,避免训练时频繁读 NFS。
效果验证与日常维护
跑通后,建议做一次基准测试:
# 简单的 all_reduce 测试
python -c "import torch; import torch.distributed as dist; dist.init_process_group('nccl'); print('ok')"
日常维护要点:
- 定期检查 GPU 温度和功耗:
nvidia-smi -q -d TEMPERATURE。 - 监控网络流量,避免其他任务抢占带宽。
- 保存训练日志和 checkpoint,方便断点续训。
多机分布式大模型部署的难点主要在环境一致性和网络通信。
只要按本文步骤逐项配置,并利用 NCCL 调试信息定位问题,大多数报错都能解决。
如果你在搭建算力集群时遇到其他异常,优先回看避坑部分并检查节点间连通性。