在深度学习项目中,单机训练往往难以满足大规模模型和海量数据的需求。因此,Ubuntu分布式训练成为提升训练效率的关键技术。本文将从零开始,手把手教你如何在 Ubuntu 系统上搭建基于 PyTorch 的多机多卡训练环境,即使是小白也能轻松上手。
在开始之前,请确保你有以下资源:
首先,在所有节点上执行以下命令安装必要的软件包:
# 更新系统sudo apt update && sudo apt upgrade -y# 安装基础工具sudo apt install -y python3-pip git openssh-server net-tools# 启动 SSH 服务(用于节点间通信)sudo systemctl enable sshsudo systemctl start ssh 在每台机器上安装 NVIDIA 驱动和 CUDA Toolkit。推荐使用官方 NVIDIA 驱动:
# 添加官方仓库wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.debsudo dpkg -i cuda-keyring_1.0-1_all.debsudo apt update# 安装 CUDA 11.8(可根据需求调整版本)sudo apt install -y cuda-toolkit-11-8# 将 CUDA 加入环境变量echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrcecho 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrcsource ~/.bashrc 验证安装是否成功:
nvidia-smi # 应显示 GPU 信息nvcc --version # 应显示 CUDA 编译器版本 使用 pip 安装支持 GPU 的 PyTorch。确保所有节点安装相同版本:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 此外,安装 NCCL(NVIDIA Collective Communications Library),这是 PyTorch 分布式训练的核心通信库:
sudo apt install -y libnccl2 libnccl-dev 为方便管理,建议配置主节点到其他节点的免密登录。假设主节点 IP 为 192.168.1.10,工作节点为 192.168.1.11 和 192.168.1.12。
# 在主节点生成 SSH 密钥(如未生成)ssh-keygen -t rsa -b 4096# 将公钥复制到所有工作节点ssh-copy-id user@192.168.1.11ssh-copy-id user@192.168.1.12# 测试免密登录ssh user@192.168.1.11 'echo "Success!"' 下面是一个简单的 PyTorch 分布式训练示例(使用 torch.distributed.launch):
# train_ddp.pyimport torchimport torch.distributed as distimport torch.multiprocessing as mpfrom torch.nn.parallel import DistributedDataParallel as DDPimport osdef setup(rank, world_size): os.environ['MASTER_ADDR'] = '192.168.1.10' # 主节点 IP os.environ['MASTER_PORT'] = '12355' dist.init_process_group("nccl", rank=rank, world_size=world_size)def cleanup(): dist.destroy_process_group()def main(rank, world_size): setup(rank, world_size) # 创建模型并放到对应 GPU model = torch.nn.Linear(10, 1).to(rank) ddp_model = DDP(model, device_ids=[rank]) # 简单训练循环 loss_fn = torch.nn.MSELoss() optimizer = torch.optim.SGD(ddp_model.parameters(), lr=0.001) for epoch in range(10): optimizer.zero_grad() outputs = ddp_model(torch.randn(20, 10).to(rank)) labels = torch.randn(20, 1).to(rank) loss = loss_fn(outputs, labels) loss.backward() optimizer.step() if rank == 0: print(f"Epoch {epoch}, Loss: {loss.item()}") cleanup()if __name__ == "__main__": world_size = 2 # 总 GPU 数量(跨节点) mp.spawn(main, args=(world_size,), nprocs=world_size, join=True) 在主节点上运行以下命令启动训练(假设有两台机器,每台有1个GPU):
# 在主节点执行python3 -m torch.distributed.run \ --nproc_per_node=1 \ --nnodes=2 \ --node_rank=0 \ --master_addr="192.168.1.10" \ --master_port=12355 \ train_ddp.py# 在工作节点(192.168.1.11)执行python3 -m torch.distributed.run \ --nproc_per_node=1 \ --nnodes=2 \ --node_rank=1 \ --master_addr="192.168.1.10" \ --master_port=12355 \ train_ddp.py 12355 端口(或你指定的端口)在所有节点开放。MASTER_ADDR 是否为主节点内网 IP。通过以上步骤,你已经成功搭建了一个基于 Ubuntu 的深度学习环境搭建平台,能够高效运行PyTorch分布式训练任务。随着模型规模不断增长,掌握多机多卡训练技能将成为 AI 工程师的核心竞争力。希望本教程能为你提供清晰、实用的指导!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128458.html