ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何让多GPU训练快人一步:Vesuvius墨迹检测AMP混合精度与DDP分布式训练性能优化指南

如何让多GPU训练快人一步:Vesuvius墨迹检测AMP混合精度与DDP分布式训练性能优化指南 如何让多GPU训练快人一步Vesuvius墨迹检测AMP混合精度与DDP分布式训练性能优化指南【免费下载链接】Vesuvius-Grandprize-Winner项目地址: https://gitcode.com/gh_mirrors/ve/Vesuvius-Grandprize-WinnerVesuvius-Grandprize-Winner 是 Vesuvius 挑战赛 2023 大奖金奖方案的官方开源实现核心功能是利用TimeSformer视觉 Transformer 从火山灰碳化纸莎草卷轴的 CT 扫描体数据中检测墨迹。本文面向新手带你读懂该项目如何用AMP 混合精度训练16-mixed与DDP 多卡分布式训练把动辄数小时的单轮训练压缩到可接受的时间并给出 8 个可直接抄走的性能优化技巧。一、项目速览为什么需要高性能训练 训练对象是庞贝古城碳化卷轴的体素数据单片卷轴的 inklabels 标注图常常达到上万像素分辨率例如这张整幅纸莎草片段的墨迹标注这类数据的训练有几个性能杀手体数据量大每帧 64x64 切片、256x256 图块tile、32 像素步长batch size 高达 256模型不轻冠军方案是 TimeSformer small分离时空注意力另有 ResNet3D-101 与带 Non-Local 块的 I3D 三种架构训练轮数多max_epochs150验证与评估穿插进行。单卡 FP32 几乎跑不动所以项目默认配置就是8 卡 AMP 混合精度 DDP的组合拳。二、环境一键准备Docker 是最快路径 项目自带 Dockerfile基于pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel镜像构建时会自动拉取训练依赖与预训练的 TimeSformer 权重。核心命令只有两条docker build -t youssef_gp . docker run --gpus all --shm-size150g -it \ -v /your/path/to/train_scrolls:/workspace/train_scrolls youssef_gp两个细节值得新手注意参数作用为什么重要--gpus all把宿主机所有 GPU 暴露给容器DDP 训练的前提缺了它只能单卡跑--shm-size150g扩大 /dev/shm 共享内存num_workers16的多进程 DataLoader 会在小共享内存下卡死或 OOM依赖清单在 requirements.txt 中固定了pytorch-lightning2.0.9避免新版 API 差异。三、AMP 混合精度16-mixed 是怎么省一半显存的 ⚡AMPAutomatic Mixed Precision的思路很简单前向用 FP16 算得快权重和梯度用 FP32 存得稳。在本项目中AMP 不需要手写任何torch.cuda.amp.autocast/GradScaler样板代码全部交给 PyTorch Lightning 的 Trainer 一个参数搞定trainer pl.Trainer( acceleratorgpu, devices8, precision16-mixed, # ← AMP 混合精度开关 strategyddp_find_unused_parameters_true, ... )对应源码见 train_timesformer_deduped.py 中pl.Trainer(...)的构造段以及 train_resnet3d.py 的同款配置。对新手而言precision16-mixed的收益是实打实的显存占用下降约 40%~50%TimeSformer 的注意力中间激活全部以半精度存放batch 256 的体数据块不再爆显存训练吞吐提升 1.5~2 倍现代 NVIDIA 显卡的 Tensor Core 对 FP16 矩阵乘有专门加速数值安全Lightning 内部自动管理损失缩放loss scalingFP16 下常见的梯度下溢由框架兜底。另外项目还在全局加了一行隐藏加速torch.set_float32_matmul_precision(medium)它允许 FP32 矩阵乘内部走 TF32 指令对残差类网络几乎无损却额外提速AMP 与 TF32 叠加使用是竞赛代码的常见组合。四、DDP 分布式训练8 卡并行的关键三行配置 DDPDistributed Data Parallel让每张卡持有完整模型副本各吃 1/N 的数据再反向同步梯度。本项目里 DDP 的关键配置有三处4.1strategyddp_find_unused_parameters_true冠军模型的 I3D 编码器带 Non-Local 模块部分参数在某些前向分支中不参与计算。默认 DDP 会因为未使用参数报错死锁打开find_unused_parameters是绕开它的标准做法。代价是每次迭代多一次参数遍历精度类任务上完全值得。4.2devices8与acceleratorgpuTrainer 会自动为 8 张卡各起一个进程torchrun 风格启动单卡 batch 256 等价于全局 batch 2048学习率 6e-5AdamW即按此规模调好的。4.3 梯度裁剪兜底gradient_clip_val1.0, gradient_clip_algorithmnorm,混合精度 大 batch 偶发梯度尖峰按范数裁剪到 1.0 是防止 loss 突刺的保险丝配置区还有max_grad_norm 100作为二次防线。五、8 个可直接抄走的性能优化技巧 ✅按投入产出比排序数据加载不拖后腿num_workers16pin_memoryTruedrop_lastTrueCPU 解码 GPU 消费零等待共享内存开大容器--shm-size150g多 worker 场景的第一坑AMP 一把梭precision16-mixed一行代码换取近 2 倍吞吐TF32 叠加torch.set_float32_matmul_precision(medium)免费加速DDP 适配动态分支find_unused_parameters保证 I3D/Non-Local 这类网络可分布式梯度裁剪norm 裁剪 1.0稳住混合精度训练曲线学习率调度OneCycleLRmax_lr3e-415% 预热段配合大 batch后期收敛快显存卫生训练循环结束后del大张量 gc.collect()torch.cuda.empty_cache()长周期任务不泄漏。六、验证数据怎么管理all_labels 目录里的宝藏 ️仓库的all_labels/目录保存了约 37 个卷轴片段的整幅墨迹标注inklabels从 28KB 的小碎片到 1.5MB 的长条样本都有。训练集构建脚本 prepare.py 会把它们按片段分发到各自的训练目录download.sh 则负责从数据服务器批量拉取体数据。下图是一片大片段标注的局部效果黑白即墨迹像素七、总结冠军级配置的三板斧 AMPprecision16-mixed一行开启混合精度显存减半、吞吐翻倍DDP8 卡ddp_find_unused_parameters_true策略大 batch 稳定跑 150 轮工程细节大共享内存、16 worker 数据管线、梯度裁剪、TF32全是不写就亏的免费加速。把这套配置照搬到你自己的 3D / Transformer 训练项目里单轮训练时间通常能砍掉一半以上——这正是金奖方案能在大体量体数据上反复迭代 15 轮数据清洗的核心底气。【免费下载链接】Vesuvius-Grandprize-Winner项目地址: https://gitcode.com/gh_mirrors/ve/Vesuvius-Grandprize-Winner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表