YOLOv5系列(四十八) 解读多GPU,SyncBatchNorm训练

文章目录

  • 前言
  • 训练
    • 单 GPU
    • 多[GPU数据并行](https://pytorch.org/docs/stable/nn.html#torch.nn.DataParallel)模式(不推荐)
    • 多GPU [DistributedData并行](https://pytorch.org/docs/stable/nn.html#torch.nn.parallel.DistributedDataParallel)模式(推荐)
  • 使用特定GPU
  • 使用SyncBatchNorm
  • 使用DistributedDataParallel
    • 笔记
  • 结果

介绍了如何在单台或多台机器上正确使用 多个 GPU 通过 YOLOv5 训练数据集。

前言

克隆存储库和安装要求.txt在 Python>=3.8.0 环境中,包括 PyTorch>=1.8模型数据集从最新的 YOLOv5 版本自动下载。

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

专业提示!建议将 Docker Image 用于所有多 GPU 训练。

专业

### YOLOv8 GPU 训练常见错误及其解决方案 #### SyncBatchNorm 使用不当引起的性能下降 当使用 `--sync-bn` 参数时,虽然可以提升GPU训练的精度[^1],但这通常会导致显著的速度减慢。此参数仅推荐用于分布式数据并行模式下的小批量处理(每张显卡上的 batch size 小于等于 8)。如果不需要特别高的精度或者批次大小较大,则建议关闭同步批标准化选项。 #### MKL_THREADING_LAYER 不兼容问题 对于因MKL线程层设置不匹配而导致的错误消息:“mkl-service + Intel(R) MKL: MKL_THREADING_LAYER=INTEL is incompatible with libgomp-a34b3233.so.1 library”,可以通过调整环境变量来解决这个问题。具体方法是在启动脚本之前执行命令 `export MKL_SERVICE_FORCE_INTEL=1` 或者尝试先导入 NumPy 库再加载其他依赖项[^2]。 #### 数据类型冲突引发的运行时异常 针对 “RuntimeError: expected scalar type Half but found Float”的情况,这通常是由于混合精度计算配置失误造成的。确保模型输入的数据格式一致非常重要;要么全部采用半精度浮点数 (FP16),要么保持全精度浮点数 (FP32)[^3]。可以在训练脚本中通过适当修改 PyTorch 的 AMP 自动混合精度机制来进行修正。 ```python from torch.cuda.amp import GradScaler, autocast scaler = GradScaler() for data in dataloader: optimizer.zero_grad() with autocast(): outputs = model(inputs) loss = criterion(outputs, targets) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小酒馆燃着灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值