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

推荐订阅源

博客园_首页
C
Check Point Blog
B
Blog RSS Feed
G
Google Developers Blog
H
Help Net Security
博客园 - Franky
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Recent Announcements
Recent Announcements
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
DataBreaches.Net
小众软件
小众软件
T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Y
Y Combinator Blog
T
Tailwind CSS Blog
J
Java Code Geeks
MyScale Blog
MyScale Blog
雷峰网
雷峰网
有赞技术团队
有赞技术团队
博客园 - 聂微东

博客园 - 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