深度学习-分布式训练机制
1、分布式训练时,包括train.py的全部的代码都会在每个gpu上运行吗?
- 在分布式训练(如使用 PyTorch 的 DistributedDataParallel,DDP)时,每个 GPU 上运行的进程会执行 train.py 的全部代码,但通过分布式机制(如 rank、world_size、torch.distributed 等)控制不同进程的行为,确保它们协作完成训练任务。
- 每个 GPU 对应一个独立的进程,每个进程都会从头到尾完整执行 train.py 的代码(包括数据加载、模型初始化、前向/反向传播等)。但通过条件判断和分布式通信,不同进程会执行不同的逻辑分支(例如:仅 rank=0 的进程保存模型、打印日志等)。
2、解释下面分布式训练的启动代码
CONFIG=$1
GPUS=$2
PORT=${PORT:-28651}PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
python3 -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \$(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3}
这段代码是一个用于启动分布式训练的 Bash 脚本,通常用于 PyTorch 的 DistributedDataParallel (DDP) 训练。它通过 torch.distributed.launch 启动多个进程(每个 GPU 一个进程),并传递必要的参数。
3、torch.distributed.launch后面接的train.py的位置可以任意吗?
Python 解释器在执行脚本时,会根据提供的路径(绝对路径、相对路径或模块名)动态定位文件,只要路径有效即可。torch.distributed.launch 只是将 train.py 的路径传递给 Python 解释器,由解释器负责加载文件,因此路径格式只需符合 Python 的规则即可。
torch.distributed.launch 后面接的训练脚本名称 可以是任意有效的 Python 脚本文件名,只需满足以下条件:
后缀必须是 .py:因为 torch.distributed.launch 最终会调用 Python 解释器执行该文件。
文件名允许任意命名:如 train.py、main.py、custom_script.py 均可,只需文件内容符合训练逻辑。
4、解释下面分布式训练的初始化代码
dist_params = dict(backend="nccl")
init_dist(args.launcher, timeout=timedelta(seconds=3600), **cfg.dist_params)
- 指定启动器为pytorch,指定gpu间的通信为"nccl",设置通信超时为1小时,定义一个字典 dist_params,指定分布式训练的后端通信库为 NCCL(NVIDIA Collective Communications Library)。“nccl” 指定分布式训练使用的通信后端,nccl 是 NVIDIA GPU 间高效通信的库,适用于多 GPU 训练。
- 底层实现(PyTorch 分布式核心)
init_dist 函数内部通常会调用 PyTorch 的 torch.distributed.init_process_group,关键逻辑如下:
import torch.distributed as dist
def init_dist(launcher, **kwargs):if launcher == "pytorch":dist.init_process_group(**kwargs) # 实际初始化分布式环境elif launcher == "slurm":# SLURM 集群的特殊处理...
init_process_group 的关键参数
backend:通信后端(如 “nccl”)。
init_method:进程组初始化方式(如 “env://” 表示通过环境变量自动发现)。
world_size:全局进程数(通常由启动器自动设置)。
rank:当前进程的全局编号(由启动器自动设置)。
进程组操作的超时时间(timeout) 是指分布式进程组(Process Group)在执行集体通信操作(如梯度同步、数据广播等)时的最大等待时间。如果操作在指定时间内未完成,会触发超时错误(torch.distributed.DistBackendError)。
5、梯度同步
梯度同步的基本流程
(1) 前向传播
每个 GPU 独立处理自己分配到的数据(一个 mini-batch 的子集),计算 本地损失(local loss)。
注意:每个 GPU 的损失是基于其本地数据计算的,不是全局所有数据的平均损失。
(2) 反向传播
每个 GPU 根据本地损失计算 本地梯度(即对模型参数的偏导数)。
此时各 GPU 的梯度可能不同(因数据不同)。
(3) 梯度同步(关键步骤)
通过 All-Reduce 操作(通常是求和或平均)将所有 GPU 的梯度同步,得到全局一致的梯度。
同步后的梯度 = 所有 GPU 本地梯度的均值(若使用 平均)或总和(若使用 求和)。
(4) 参数更新
所有 GPU 使用同步后的全局梯度更新模型参数(保证所有 GPU 的模型始终保持一致)。
6、既然每个gpu独立计算本地损失,那每次训练迭代后,可视化的损失是如何计算的
在分布式训练中,可视化的损失值通常是通过对多个 GPU 的本地损失进行聚合计算得到的。具体计算方式和实现逻辑如下:
损失计算的基本流程
在分布式训练(如 PyTorch 的 DistributedDataParallel)中,每个 GPU 独立处理一部分数据(batch_size / num_gpus),并按以下步骤计算损失:
前向传播:
每个 GPU 用当前模型参数计算其本地数据的预测结果。
计算 本地损失(如交叉熵、MSE),假设为 loss_local。
反向传播:
根据本地损失计算梯度(loss_local.backward())。
通过 All-Reduce 同步梯度(梯度取平均或求和,取决于配置)。
损失聚合:
为了可视化或日志记录,需要将所有 GPU 的本地损失聚合为 全局损失。
2. 损失聚合的常见方法
(1) 直接求平均(默认推荐)
公式:
global_loss=1N∑i=1Nloss_locali
global_loss=N1i=1∑Nloss_locali
NN 是 GPU 数量(world_size)。
物理意义:所有 GPU 本地损失的均值,等价于单卡使用全局 batch 计算的损失。
PyTorch 实现:
import torch.distributed as dist
# 计算本地损失(每个 GPU 的 batch 是总 batch 的一部分)
loss_local = criterion(output, target)
# 聚合所有 GPU 的损失(求平均)
dist.all_reduce(loss_local, op=dist.ReduceOp.SUM) # 先求和
global_loss = loss_local / dist.get_world_size() # 再除以 GPU 数量
相关文章:
深度学习-分布式训练机制
1、分布式训练时,包括train.py的全部的代码都会在每个gpu上运行吗? 在分布式训练(如使用 PyTorch 的 DistributedDataParallel,DDP)时,每个 GPU 上运行的进程会执行 train.py 的全部代码,但通过…...

[Mamba轻量化]DefMamba: Deformable Visual State Space Model,CVPR2025
paper 文章目录 AbstractMethod整体模型架构可变形状态空间模型 Experiments Abstract 然而,大多数现有的视觉Mamba方法使用预定义的扫描顺序将图像展平为1D序列,导致模型在特征提取过程中对图像空间结构信息的利用能力减弱。为解决这一问题࿰…...
CSRF 和 XSS 攻击分析与防范
CSRF 和 XSS 攻击分析与防范 CSRF (跨站请求伪造) 什么是 CSRF? CSRF (Cross-Site Request Forgery) 是一种攻击方式,攻击者诱使用户在已登录目标网站的情况下,执行非预期的操作。 攻击流程: 用户登录可信网站 A在不登出 A 的…...

找银子 题解(c++)
题目 思路 首先,这道题乍一看,应该可以用搜索来做。 但是,搜索会不会超时间限制呢? 为了防止时间超限,我们可以换一种做法。 先创立两个二维数组,一个是输入的数组a,一个是数组b。 假设 i 行 j 列的数…...
中国版 Cursor?腾讯推出 AI 编程助手 CodeBuddy,重新定义编程体验
人工智能(AI)技术的迅猛发展正深刻地变革着各个行业,编程领域也不例外。以原生 IDE 体验见长的 Cursor,凭借其 Agent 模式在 AI 编程领域脱颖而出,对 GitHub Copilot 以及 VS Code 与 JetBrains 全家桶的地位发起挑战。…...

JVM学习专题(二)内存模型深度剖析
目录 1.JVM结构体系 编辑 2.跨平台特性 3.JVM整体结构及内存模型 1.栈内存 1、栈帧: 1.局部变量表 2.操作数栈 3.动态链接 4.方法出口 2、创建对象 2.程序计数器: 3.方法区 4.堆 5.本地方法区 6.总结 1.JVM结构体系 JDK、JRE 和 JVM…...

密码学实验:凯撒密码
密码学实验:凯撒密码 一、实验目的 掌握凯撒密码的数学原理:理解字符移位与模运算的结合,实现加解密算法。理解暴力破解本质:通过穷举有限密钥空间,掌握利用语言特征破解密文的方法。编程实践:用Python实…...
linux备份与同步工具rsync
版权声明:原创作品,请勿转载! 文章目录 版权声明:原创作品,请勿转载! 实验环境介绍: 1.工具介绍 2.详细介绍 2.1 本地模式(用得少) 2.2 远程模式 2.3 守护进程模式…...
PYTHON训练营DAY26
一、函数 (一)不带参数的函数 # 定义一个简单的问候函数 def greet():"""打印一句问候语。"""message "大家好!欢迎学习Python函数定义!"print(message)greet()(二&#x…...

WPS一旦打开,就会修改默认打开方式,怎么解?
目录 前言 解决方法 结语 前言 电脑上同时存在WPS和微软的Office全家桶,但是我更喜欢用Office全家桶。前几天刚在设置改过来,忘记更改pdf文件打开默认应用。结果没过几天,不小心用WPS打开pdf文件时候,给我把默认设置全改回去了…...
从概念到可工程化智能体的转变路径——以“知识奇点工程师”为例
产品部门定义了一个如下概念性的“知识奇点工程师”,他们构建的不仅仅是一个数据库或知识图谱,而是一个活的、能自我进化的知识生态系统,是整个“Neuralink for Education”宏伟蓝图的基石。他们的工作难度和重要性,不亚于为AI引擎…...

单片机-STM32部分:12、I2C
飞书文档https://x509p6c8to.feishu.cn/wiki/MsB7wLebki07eUkAZ1ec12W3nsh 一、简介 IIC协议,又称I2C协议,是由PHILP公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备,IIC属于半双工同步通信方式。 IIC是一种同步…...

Payload的定义及核心概念
在IT领域,Payload(有效载荷) 指数据传输或操作中承载实际功能或信息的主体部分,与协议头、元数据等辅助内容区分。其核心特点是完成特定目标,例如传递关键数据、执行代码逻辑或实现攻击行为。 主要应用场景及技术解析 …...
idea插件使用
文章目录 在哪里安装插件常用插件 在哪里安装插件 离线下载插件请参考我的文章–>可复用性代码 在线下载 插件 :File(文件) —> Settings(设置) —> Plugins(插件) 常用插件 汉化插件:Chinese (Simplified) Language Pack /中文语言包。作者:…...

计算机网络笔记(二十四)——4.6互联网的路由选择协议
4.6.1有关路由选择协议的几个基本概念 路由选择协议是计算机网络中维护和生成路由表的核心机制。 1. 路由选择的核心目标 转发(Forwarding):路由器基于本地转发表,将分组从输入链路转移到输出链路(单台路由器的本地…...
UniApp 微信小程序绑定动态样式 :style 避坑指南
在使用 UniApp 开发跨端应用时,绑定动态样式 :style 是非常常见的操作。然而,很多开发者在编译为 微信小程序 时会遇到一个奇怪的问题: 原本在 H5 中可以正常渲染的样式,在微信小程序中却不生效! 让我们通过一个示例来…...

论文阅读与写作:《从探索到突破:解密科研和论文写作的思维密码》
文章目录 一、如何做科研1.科研的步骤2.课题选择3.快速入门一个新领域:读论文,先读综述(1)自己看论文的时候,每篇论文花3-5分钟记录一下自己的idea和一些瞬间的想法(2)高质量文献:顶会顶刊(3)如何检索 4.注重团队协作与学术交流5.…...

致远OA绩效考核管理应用【附百度网盘下载链接,官方售价8K】
产品概述 绩效考核管理预置三种考核方式:工作事务考核、关键绩效考核、360度考评,满足不同企业考核需求,从考核等级定义、考核方案设置、考核分发到员工考核,再到考核结果汇总并审批,对绩效考核全过程进行闭环管理&…...
Vue百日学习计划Day4-8——Gemini版
番茄时钟: 每个番茄钟为25分钟学习,之后休息5分钟。每完成4个番茄钟,进行一次15-30分钟的长休息。灵活性: 这仍然是一个建议性计划。某些主题(尤其是 Flexbox 和 Grid)可能需要比预期更多的时间来练习和理解…...
HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera
HarmonyOS NEXT 适配高德地图 Flutter SDK 实现地图展示,添加覆盖物和移动 Camera 在现代移动应用开发中,地图功能是许多应用的核心组成部分之一。HarmonyOS NEXT 提供了强大的跨平台开发能力,而高德地图 Flutter SDK 则为开发者提供了丰富的…...

DeepSeek执行流程加速指南:跨框架转换与编译优化的核心策略全解析
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
docker-compose——安装redis
文章目录 一、编写docker-compose.yaml文件二、编写redis.conf文件三、启动docker-compose 一、编写docker-compose.yaml文件 version: 3.3 services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis/data:/data- ./redis/…...

manuskript开源程序是面向作家的开源工具
一、软件介绍 文末提供程序和源码下载 manuskript开源程序是面向作家的开源工具,Manuskript 可在 GNU/Linux、Mac OS X 和 Windows 上运行。 二、Features 特征 Manuskript provides a rich environment to help writers create their first draft and then furt…...

游戏引擎学习第281天:在房间之间为摄像机添加动画效果
回顾并为今天的内容定下基调 这次我们要继续深入处理实体系统。在前一阶段对实体系统做了一些很酷的改动,但现在到了要认真面对和完善它的时候。 今天的主要目标是修复并优化摄像机在房间之间移动时的逻辑。在上一次的实现中,我们重新启用了基于房间的…...

Kaamel隐私合规洞察:Temu在韩被罚事件分析
Kaamel隐私合规与数据安全团队分析报告 韩国个人信息保护委员会(PIPC)对中国电子商务巨头Temu处以巨额罚款,原因是其严重违反了用户数据保护法律 。核心违规行为包括未经适当披露或用户同意非法跨境传输数据、未能指定当地代表、账户注销流程…...

计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法
本文所提算法如下: 叙述按时间顺序 你也可以把本文当作快速阅读这几篇文献的一个途径 所有重要的部分我都已经标注并弄懂其原理 方便自己也是方便大家 Line-CNN:基于线提议单元的端到端交通线检测 摘要 交通线检测是一项基础且具有挑战性的任务。以往的…...

25.5.15
没有比水题更令人开心的事情了 典型的并查集题目,并查集分为并和查,并就是把有关系的父亲根结点设为同一个,查就是在成功构造后对其进行查询 查通过递归实现 if (x f[x])return x; return f[x] find(f[x]); 由于并查集的特点࿰…...

5.重建大师数据管理模块介绍
摘要:本文主要介绍重建大师数据管理模块,包含:照片、点云数据可视化管理工具。 数据管理界面主要包含工具栏、可视化界面和照片组列表三部分。 图 数据管理界面 1.工具栏 工具栏包含以下功能按钮,包含添加照片、视频、点云、控制…...

MATLAB安装常见问题及解决方案详解(含代码示例)
MATLAB作为科学计算和工程分析的核心工具,其安装过程可能因操作系统版本、硬件配置或网络环境等因素而出现各种问题。本文基于MATLAB官方文档和社区经验,系统总结了安装过程中常见的问题,并提供详细的解决方案和代码示例,帮助用户…...

微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)
一、系统介绍 本智能商城系统是基于当今主流技术栈开发的一款多端商城解决方案,主要包括微信小程序前端、SpringBoot 后端服务以及 Vue 管理后台三大部分。系统融合了线上商城的核心功能,支持商品浏览、下单、支付、订单管理等操作,适用于中小…...