File size: 806 Bytes
aae92d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os, torch
from torch.distributed import init_process_group, destroy_process_group

def ddp_env():
    """
    Reads ranks from torchrun env vars.
    """

    if "RANK" not in os.environ:
        os.environ["RANK"] = "0"
        os.environ["WORLD_SIZE"] = "1"
        os.environ["LOCAL_RANK"] = "0"


    rank = int(os.environ["RANK"])
    world_size = int(os.environ["WORLD_SIZE"])
    local_rank = int(os.environ["LOCAL_RANK"])
    return rank, world_size, local_rank


def ddp_setup_from_env():
    rank, world_size, local_rank = ddp_env()

    use_ddp = world_size > 1

    if torch.cuda.is_available():
        torch.cuda.set_device(local_rank)
    
    if use_ddp:
        init_process_group(backend="nccl")  # rank/world_size inferred from env
    return rank, world_size, local_rank, use_ddp