分布式启动入门
创始人
2025-01-08 04:34:25
0

一、定义

  1. 定义
  2. 案例

二、实现

  1. 定义

    1. rank:进程号,在多进程上下文中,我们通常假定rank 0是第一个进程或者主进程,其它进程分别具有1,2,3不同rank号,这样总共具有4个进程
    2. node:物理节点,可以是一个容器也可以是一台机器,节点内部可以有多个GPU;nnodes指物理节点数量, nproc_per_node指每个物理节点上面进程的数量
    3. local_rank:指在一个node上进程的相对序号,local_rank在node之间相互独立
    4. WORLD_SIZE:全局进程总个数,即在一个分布式任务中rank的数量
    5. Group:进程组,一个分布式任务对应了一个进程组。只有用户需要创立多个进程组时才会用到group来管理,默认情况下只有一个group在这里插入图片描述
      共有3个节点(机器),每个节点上有4个GPU,每台机器上起4个进程,每个进程占一块GPU,那么图中一共有12个rank,nproc_per_node=4,nnodes=3,每个节点都一个对应的node_rank。
  2. 案例1

    1. 使用torch.multiprocessing(python的multiprocessing的封装类) 来自动生成多个进程.
mp.spawn(fn, args=(), nprocs=1, join=True, daemon=False)    #自动生成多个进程 fn: 进程的入口函数,该函数的第一个参数会被默认自动加入当前进*程的rank, 即实际调用: fn(rank, *args) nprocs: 进程数量,即:world_size args: 函数fn的其他常规参数以tuple的形式传递 
import torch import torch.distributed as dist import torch.multiprocessing as mp   def fn(rank, ws, nums):     dist.init_process_group('nccl', init_method='tcp://127.0.0.1:28765',                             rank=rank, world_size=ws)     rank = dist.get_rank()     print(f"rank = {rank} is initialized")     torch.cuda.set_device(rank)     tensor = torch.tensor(nums).cuda()     print(tensor)   if __name__ == "__main__":     ws = 2     mp.spawn(fn, nprocs=ws, args=(ws, [1, 2, 3, 4]))      # python test.py 

在这里插入图片描述
2. 使用torchrun 启动

import torch import torch.distributed as dist import torch.multiprocessing as mp import os   dist.init_process_group('nccl', init_method='env://')   rank = dist.get_rank() local_rank = os.environ['LOCAL_RANK'] master_addr = os.environ['MASTER_ADDR'] master_port = os.environ['MASTER_PORT'] print(f"rank = {rank} is initialized in {master_addr}:{master_port}; local_rank = {local_rank}") torch.cuda.set_device(rank) tensor = torch.tensor([1, 2, 3, 4]).cuda() print(tensor)  #torchrun --nproc_per_node=2 test.py 
--nnodes: 使用的机器数量,单机的话,就默认是1了 --nproc_per_node: 单机的进程数,即单机的worldsize --master_addr/port: 使用的主进程rank0的地址和端口 --node_rank: 当前的进程rank 

```

参考:

相关内容

热门资讯

经验辅助!浙江游戏大厅透视辅助... 经验辅助!浙江游戏大厅透视辅助器(辅助)都是是有辅助工具(哔哩哔哩)1、游戏颠覆性的策略玩法,独创攻...
学习辅助!吉祥填大坑插件(辅助... 学习辅助!吉祥填大坑插件(辅助)其实是真的有辅助软件(哔哩哔哩);1、很好的工具软件,可以解锁游戏的...
要领辅助!微信边锋辅助工具(辅... 要领辅助!微信边锋辅助工具(辅助)一贯是真的有辅助方法(哔哩哔哩)1、下载好微信边锋辅助工具正确养号...
手筋辅助!欢聚水鱼智能辅助教程... 手筋辅助!欢聚水鱼智能辅助教程(辅助)总是一直总是有辅助攻略(哔哩哔哩)1、欢聚水鱼智能辅助教程免费...
教程书辅助!连连看辅助器(辅助... 教程书辅助!连连看辅助器(辅助)其实存在有辅助教程(哔哩哔哩)连连看辅助器能透视中分为三种模型:连连...
窍要辅助!摸一把跑得快辅助器(... 窍要辅助!摸一把跑得快辅助器(辅助)都是是真的有辅助技巧(哔哩哔哩)1、完成摸一把跑得快辅助器有辅助...
方针辅助!如何下载朋朋政和软件... 方针辅助!如何下载朋朋政和软件辅助器(辅助)果然是真的有辅助技巧(哔哩哔哩)1、玩家可以在如何下载朋...
手册辅助!微信开心泉州辅助(辅... 手册辅助!微信开心泉州辅助(辅助)都是有辅助教程(哔哩哔哩)1.微信开心泉州辅助 选牌创建新账号,点...
指南书辅助!奇迹手游脚本辅助全... 指南书辅助!奇迹手游脚本辅助全自动(辅助)果然一直都是有辅助插件(哔哩哔哩)1、每一步都需要思考,不...
妙招辅助!指尖四川辅助破解版苹... 妙招辅助!指尖四川辅助破解版苹果(辅助)原来一直总是有辅助神器(哔哩哔哩)1、指尖四川辅助破解版苹果...