当前位置: 首页 > news >正文

分布式训练下的多进程环境

核心就是创建一个包含多个进程的进程组,进程之间可以相互通信

使用torch.distributed 在单机多进程环境中启动多个进程,实现分布式训练。
首先,在单个机器节点上生成两个进程,每个进程通过相同的主机IP地址和端口号进行通信。
然后,设置分布式环境,初始化进程组,旨在允许进程通过共享位置来相互通信。

  1. 导入需要的模块
import os
import torch
import torch.distributed as dist
import torch.multiprocessing as mp
  • os:设置环境变量。
  • torch.distributed:用于分布式通信。
  • torch.multiprocessing:用于多进程启动,与 Python 原生的 multiprocessing 类似,但兼容 CUDA。
  1. 启动多个进程
if __name__ == "__main__":size = 2  # 总进程数(即 world size)processes = []mp.set_start_method("spawn")  # 设置启动方法,推荐使用 "spawn" 以兼容性更好for rank in range(size):p = mp.Process(target=init_process, args=(rank, size, run))  # 为每个 rank 创建一个进程p.start()processes.append(p)for p in processes:p.join()  # 等待所有子进程完成
  • 启动两个子进程(size = 2),每个进程都会执行 init_process
  • 每个进程分配一个唯一的 rank,从 0size-1
  • 设置 spawn 模式更安全,尤其是多平台/多 GPU 情况下。
  1. 初始化进程组
def init_process(rank, size, fn, backend="gloo"):os.environ['MASTER_ADDR'] = "127.0.0.1"      # 主节点 IPos.environ['MASTER_PORT'] = '29500'          # 主节点端口dist.init_process_group(backend, rank=rank, world_size=size)  # 初始化分布式进程组fn(rank, size)  # 执行实际的任务函数
  • 设置通信的主节点地址和端口(因为我们在单机上跑,IP 就用本地地址)。
  • 使用 dist.init_process_group 创建一个通信上下文,这样不同进程之间可以互相通信。
  • 初始化后执行传入的 fn 函数(即 run 函数)。
  1. 定义任务逻辑
def run(rank, size):"""具体要执行的分布式函数"""pass
  • 每个进程在初始化好分布式环境后会执行这里的逻辑。
  • 你可以在这里写 all_reducebroadcastsend/recv 等具体的分布式通信逻辑。
  • rank 是当前进程的编号,size 是总进程数。

简单总结一下:
几点:
创建进程,设置主机地址和端口号,然后初始化进程组

来源于PyTorch文档:https://docs.pytorch.org/tutorials/intermediate/dist_tuto.html#collective-communication

http://www.xdnf.cn/news/875863.html

相关文章:

  • [Java 基础]枚举
  • NLP中的input_ids是什么?
  • Pycharm 配置解释器
  • mybatis实现插入postgresql的json类型数据
  • DA14531_beacon_大小信标设备开发
  • 如何安装并使用RustDesk
  • Java Fork/Join框架:三大核心组件深度解析
  • 功率估计和功率降低方法指南(1~2)
  • 2025年6月4日收获
  • 如何进行股票回测?
  • 第三方检测:软件适配测试报告
  • SAFe/LeSS/DAD等框架的核心适用场景如何选择?
  • Paraformer分角色语音识别-中文-通用 FunASR
  • SEO长尾关键词布局优化法
  • 二维码生成器
  • 宝马集团推进数字化转型:强化生产物流与财务流程,全面引入SAP现代架构
  • expect程序交互学习
  • 电子电路:共集电极放大器原理与作用解析
  • GO语言----基础类型取别名
  • PhpStorm设置中文
  • 数据库MySQL基础(3)
  • OpenAI API 流式传输
  • NX963NX970美光固态闪存NX978NX983
  • 基于单片机的FFT的频谱分析仪设计
  • Linux 系统 rsyslog 配置
  • 1.1随机试验与随机事件
  • Java 2D 图形变换方法
  • Linux 云服务器部署 Flask 项目(含后台运行与 systemd 开机自启)
  • 在java中不同数据类型的运算与内存占用分析
  • WordToCard,一键将Markdown内容转换为精美知识卡片(使用Qwen3)