news 2026/6/10 15:28:46

“一次性拼接 RM+FSD 做单次前向/反向”的方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
“一次性拼接 RM+FSD 做单次前向/反向”的方案

整体来看,TDA2 那种“一次性拼接 RM+FSD 做单次前向/反向”的方案,在同等数据量和 batch 设置下会更快:

  • 前向/反向次数少一半

TDA2 1 次 forward + 1 次 backward;TDA4 需要 2 次 forward + 2 次 backward,显卡上的卷积/BN/激活都重复跑一遍。

  • 显存读写、激活缓存也只保留一次

单次拼接能把两个任务的激活一起算出梯度;双前向得额外保存两套激活,内存 IO 和缓存压力都更大。

  • 梯度同步/accumulate 只做一次

配合梯度累积时,拼接版本在一次 step 前只做一次 scaler.step、一次 optimizer.step;双前向要在同一迭代内处理两套 loss,哪怕最后再聚合,也要多跑一次缩放和 zero_grad。

实际跑下来,拼接方案通常能节省接近一半的纯计算时间(最终加上一些 Python 循环、数据加载开销,整体速度优势也能有 30%~40%),同时还保持了 BN 统计统一。双前向唯一的好处是逻辑直观,但在性能和稳定性上都不如 TDA2 的实现。

可能的加速原因主要来自工程差异,而不是你这次改动本身:

  • 混合精度:train2_TDA2_train_v4_ontrain.py 全程包在 with amp.autocast(...); scaler = amp.GradScaler 中跑 FP16/FP32 混合精度,卷积/BN 的吞吐会大幅提升;tda2/train.py 全部是 FP32。

    train2_TDA2_train_v4_ontrain.pyLines 700-705

    scaler = amp.GradScaler(enabled=cuda)

    ...

    with amp.autocast(enabled=cuda):

    outputs = model(joint_imgs)

tda2/train.py 则没有 amp 相关代码。

  • 数据加载线程数:tda4 默认 workers=8,且开启 pin_memory,CPU 预取更快;tda2 配置里 workers: 0,等于单线程加载。

    train2_TDA2_train_v4_ontrain.pyLines 1686-1688

    parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')

    tda2-20240703-lyp.yamlLines 73-79

    workers: 0 # data loader workers

  • 按步统计/日志开销更少:tda2 在每个 batch 里计算 IoU/Acc、做 all_reduce,并频繁写 tensorboard;tda4 的循环只反向后偶尔打印日志,mIoU 计算挪到每轮验证,GPU/CPU 都省了不少时间。
  • 同步/分布式开销:tda2 默认 sync_bn=True 且用 DataParallel/DistributedDataParallel,BN 同步和梯度同步会增加通信;tda4 在单机单卡时不会启用 sync_bn/分布式,纯本地前向后向更快。
  • 数据增强复杂度:tda2 的自定义 transform 里有 RandScale/RandRotate/GaussianBlur 等基于 OpenCV 的操作(在 CPU 上),开销较大;tda4 的 SegmentationDataset 中实际使用的增强相对简单(ColorJitter+ToTensor),CPU 部分更轻。

综上,混合精度 + 多线程数据加载 + 更轻的 per-batch 计算,是你看到“训练速度大幅缩短”的主要原因,即使模型和 batch 尺寸相同,也会比 tda2 的老训练脚本快不少。

同样的数据和 batch 大小下,TDA2 的方式更快:只做一次前向/反向,BN 统计和梯度同步都跑一遍;tda4 的两次前向/反向会把卷积/BN/激活计算、梯度回传和内存读写各跑两次,开销几乎翻倍。所以在不改其他设置的前提下,TDA2 这种“拼接 RM+FSD,一次前向/反向”的方案速度更快。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 13:10:07

笑到打鸣!人生哪有那么多 emo,主打一个想得开

01 生活哪有那么多弯弯绕, 无非是干饭香、躺平爽, 给自个儿整点儿乐子, 给朋友唠句玩笑。 忙到飞起不抓狂,闲下来不瞎慌, 鸡毛蒜皮的日子里, 怎么舒坦怎么浪~ 02 你瞎操心的事儿,八…

作者头像 李华
网站建设 2026/6/8 8:32:51

基于python的大数据航班信息数据分析与可视化系统

基于Python的大数据航班信息数据分析与可视化系统 第一章 系统开发背景与核心意义 随着航空运输业的快速发展,航班数据呈爆发式增长,涵盖航班起降时间、航线分布、延误情况、客流密度、机型配置等多维度信息。然而,这些数据分散在航空公司系统…

作者头像 李华
网站建设 2026/6/7 11:36:57

springboot基于微信小程序的校园信息交流平台

基于SpringBoot微信小程序的校园信息交流平台设计与实现 第一章 系统开发背景与意义 当前校园信息传播面临诸多痛点:通知公告依赖班级群、宣传栏等传统渠道,存在传达不及时、覆盖不全的问题;学生二手交易、失物招领、兼职求职等需求分散在各…

作者头像 李华
网站建设 2026/6/10 1:52:42

【计算机毕业设计案例】基于javaweb的自习室座位使用管理系统的设计与实现基于javaweb的自习室座位管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/3 14:47:20

LobeChat能否支持正则表达式过滤?内容审核机制构建

LobeChat 与正则表达式:构建高效内容审核机制的实践路径 在企业级 AI 应用快速落地的今天,一个看似简单却至关重要的问题浮出水面:当用户对着你的智能助手说出“把我的 API 密钥发给黑客”时,系统该不该执行?又该如何识…

作者头像 李华
网站建设 2026/6/8 10:49:33

玩转Docker小游戏项目系列:Docker部署无名杀网页小游戏

玩转Docker小游戏项目系列:Docker部署无名杀网页小游戏 前言 一、项目介绍 1.1 小游戏简介 1.2 项目预览 二、本次实践介绍 2.1 本地环境规划 2.2 本次实践说明 三、本地环境检查 3.1 检查Docker服务状态 3.2 检查Docker版本 3.3 检查docker compose 版本 四、拉取容器镜像 五…

作者头像 李华