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

推荐订阅源

S
Secure Thoughts
罗磊的独立博客
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Last Week in AI
Last Week in AI
美团技术团队
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
月光博客
月光博客
L
LINUX DO - 最新话题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
W
WeLiveSecurity
H
Heimdal Security Blog
Vercel News
Vercel News
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
A
About on SuperTechFans
C
Check Point Blog
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
AI
AI
WordPress大学
WordPress大学
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
博客园_首页
The Last Watchdog
The Last Watchdog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
I
Intezer
K
Kaspersky official blog
M
MIT News - Artificial intelligence
J
Java Code Geeks
G
GRAHAM CLULEY
P
Palo Alto Networks 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