惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
小众软件
小众软件
博客园 - 【当耐特】
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
H
Help Net Security
博客园_首页
P
Proofpoint News Feed
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
N
Netflix TechBlog - Medium
爱范儿
爱范儿
MyScale Blog
MyScale Blog
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News

博客园 - longbigfish

部署(https证书) https证书问题(本地) 参数更新 Ubuntu 24安装Neo4j详细教程 protect 紧急 手机 刷脏页的两种模式 git之复合指令和submodule rpc编程示例 mpi编程 cifs远程挂载 使用脚本进入一个命令行控制台,并预设执行的命令列表 cifs挂载远程文件出现 No such device or address错误 longtable 跨越多个页面时,如何在跨页时自动断行并加上横线及去掉页眉 matplotlib中文显示-微软雅黑 latex编译过程-关于嵌入所有字体 python做图笔记 linux启动全过程 连接并同步windows下的git仓库 反向ssh
python中的多线程陷阱与pytorch分布式执行机制
longbigfish · 2024-06-04 · via 博客园 - longbigfish

1. 多线程

运行pytorch,设置 work 不为0时的一个怪异现象。

一个类有 __init__ 函数,也有__del__ 函数,以及其他正常函数。

__init__  被运行后,进行了多线程复制,可能多个线程各自复制了一分这个类的实例。

各个线程在各自空间进行。

最后 __del__  操作进行一次回收。也就是 __del__  和 __init__  是一一对应的,中间的其他线程是独立运行的。

2. 分布式执行

https://lambdalabs.com/blog/multi-node-pytorch-distributed-training-guide

https://www.cnblogs.com/rossiXYZ/p/15553670.html

(1)第一种方式,使用 torchrun 或python3 -m torch.distributed.launch。这种方式要求在每个节点上都要执行命令。每个命令传入了节点数量,节点rank号,主节点地址端口等。该命令根据传入参数创建环境变量,训练程序从环境变量获取rank号等。

参数传入主要是为了方便,也可以直接在训练程序里指定ran号,只要不同节点上运行的程序能区分开rank号并且总的word size符合。

(2)第二种方式,使用mpi,即mpirun。这种方式相当于使用mpi程序启动 python程序。首先需要在mpi程序命令中指定节点列表,也可以通过参数文件传入,设置比较灵活。其次,需要在python程序命令中执行主节点,即rank为0的节点地址,以用来进行 init_process_group 。

  一般来说,mpi参数节点列表第一个就是rank为0的节点,因此python参数的节点要填写mpi参数节点列表第一个节点。

      也可以子在训练程序中通过rank 0节点广播,让其他节点获取主节点进行 init_process_group  。

     mpi运行节点不必须是节点列表的第一个节点,也就是不必须是rank 0