YOLO多机多GPU训练环境

部署运行你感兴趣的模型镜像

本文介绍如何使用多台电脑的GPU进行YOLO模型的分布式训练,适合初学者跟着操作。

准备工作

硬件要求

  • 多台带GPU的电脑(GPU型号最好相同)
  • 高速网络连接(建议千兆以上)
  • 所有电脑在同一局域网下

软件要求

所有电脑需要安装相同版本的:

  • Python
  • PyTorch(带CUDA支持)
  • YOLO代码(如YOLOv5/YOLOv8)
  • NCCL库(用于多机通信)

环境配置步骤

1. 安装基础软件

在所有电脑上执行以下命令:

# 安装PyTorch
pip install torch torchvision torchaudio

# 下载YOLOv5
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt

2. 配置SSH免密登录

选择一台作为主电脑,执行:

# 生成密钥(一直按回车即可)
ssh-keygen -t rsa

# 将密钥复制到所有电脑(包括自己)
ssh-copy-id username@电脑1的IP
ssh-copy-id username@电脑2的IP
...

启动分布式训练

在主电脑上运行:

python -m torch.distributed.launch \
    --nproc_per_node=4 \        # 每台电脑的GPU数量
    --nnodes=4 \                # 总电脑数量
    --node_rank=0 \             # 主电脑编号为0
    --master_addr="主电脑IP" \  # 主电脑的IP地址
    --master_port=12345 \       # 任意空闲端口号
    train.py \
    --batch-size 64 \           # 每GPU的批大小
    --data coco.yaml \          # 数据集配置
    --weights yolov5s.pt \      # 预训练权重
    --device 0,1,2,3 \          # 使用所有GPU
    --epochs 300

在其他电脑上运行:

命令与主电脑相同,只需将node_rank改为各自编号(1,2,3...):

python -m torch.distributed.launch \
    --nproc_per_node=4 \
    --nnodes=4 \
    --node_rank=1 \            # 第二台电脑改为1,第三台改为2,以此类推
    --master_addr="主电脑IP" \
    --master_port=12345 \
    train.py \
    ...                        # 其他参数与主电脑保持一致

重要提醒

  1. 数据准备​:所有电脑需要能访问相同的数据集
  2. 网络要求​:电脑之间网络连接要稳定
  3. 版本一致​:所有电脑的软件版本必须完全相同
  4. 参数调整​:使用多GPU时,学习率需要适当增大

验证训练效果

训练开始后检查:

  • 所有GPU是否都在工作
  • 训练损失是否正常下降
  • 批量大小是否正确(每GPU批量×GPU总数)

按照以上步骤,你应该能成功搭建YOLO的多机训练环境。遇到问题时,请确保所有电脑的配置完全一致。

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### YOLOv11 GPU 训练代码示例 以下是基于 PyTorch 的 YOLOv11 模型 GPU 训练的一个通用实现框架。此代码假设已经安装了必要的依赖库并配置好了环境。 ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset import torchvision.transforms as transforms from torch.nn.parallel import DistributedDataParallel as DDP import torch.distributed as dist # 定义一个简单的YOLO-like模型作为占位符 class YOLOv11(nn.Module): def __init__(self): super(YOLOv11, self).__init__() self.conv_layers = nn.Sequential( nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=2, stride=2) ) self.fc_layers = nn.Linear(32 * 16 * 16, 10) def forward(self, x): x = self.conv_layers(x) x = x.view(x.size(0), -1) x = self.fc_layers(x) return x def train(model, dataloader, optimizer, criterion, device): model.train() total_loss = 0.0 for images, labels in dataloader: images, labels = images.to(device), labels.to(device) optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(dataloader) print(f"Avg Loss: {avg_loss}") if __name__ == "__main__": # 初始化分布式训练环境 (如果使用GPU) local_rank = int(os.environ["LOCAL_RANK"]) dist.init_process_group(backend="nccl", init_method="env://") # 设置设备为当前进程的本地GPU device = torch.device(f"cuda:{local_rank}") torch.cuda.set_device(local_rank) # 创建模型实例 model = YOLOv11().to(device) # 使用DistributedDataParallel封装模型 model = DDP(model, device_ids=[local_rank], output_device=local_rank) # 数据加载器设置 transform = transforms.Compose([transforms.ToTensor()]) dataset = CustomDataset(root_dir="data/", transform=transform) # 自定义数据集类 sampler = torch.utils.data.distributed.DistributedSampler(dataset) dataloader = DataLoader(dataset, batch_size=16, shuffle=False, num_workers=4, sampler=sampler) # 定义优化器和损失函数 optimizer = optim.Adam(model.parameters(), lr=0.001) criterion = nn.CrossEntropyLoss() # 开始训练循环 for epoch in range(10): # 假设训练10个epoch print(f"Epoch [{epoch+1}/10]") train(model, dataloader, optimizer, criterion, device) # 清理分布式组 dist.destroy_process_group() ``` #### 关键点说明 - **DDP(Distributed Data Parallel)** 是一种高效的 GPU 并行化方法,能够显著提升大规模模型训练的速度[^2]。 - 如果需要同步 Batch Normalization 层,则可以替换 `nn.BatchNorm` 为 `torch.nn.SyncBatchNorm` 来进一步提高精度,尽管这可能会稍微降低性能[^2]。 - 在实际应用中,建议根据具体硬件资源调整批量大小和其他超参数。对于较小的数据集(如几千张图片),较低规格的 GPU 即可满足需求[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值