溫馨提示×

PyTorch在Ubuntu上的分布式訓練怎么做

小樊
48
2025-05-02 02:55:55
欄目: 智能運維

在Ubuntu上進行PyTorch的分布式訓練,你需要遵循以下步驟:

  1. 安裝PyTorch: 首先,確保你已經安裝了PyTorch。你可以從PyTorch官網(https://pytorch.org/)獲取適合你系統的安裝指令。

  2. 設置環境變量: 為了使用多GPU進行分布式訓練,你需要設置一些環境變量。例如,如果你有4個GPU,你可以這樣設置:

    export MASTER_ADDR='localhost'
    export MASTER_PORT='12345'
    export WORLD_SIZE=4
    

    MASTER_ADDR 是主節點的IP地址,MASTER_PORT 是一個隨機選擇的端口號,WORLD_SIZE 是參與訓練的GPU總數。

  3. 編寫分布式訓練腳本: 在你的訓練腳本中,你需要使用 torch.distributed.launch 或者 accelerate 庫來啟動分布式訓練。以下是使用 torch.distributed.launch 的一個簡單示例:

    import torch
    import torch.nn as nn
    import torch.optim as optim
    from torch.nn.parallel import DistributedDataParallel as DDP
    
    # 初始化進程組
    torch.distributed.init_process_group(
        backend='nccl',  # 'nccl' is recommended for distributed GPU training
        init_method='tcp://<master_ip>:<master_port>',
        world_size=<world_size>,
        rank=<rank>
    )
    
    # 創建模型并將其移動到對應的GPU
    model = nn.Linear(10, 10).to(rank)
    
    # 使用DistributedDataParallel包裝模型
    ddp_model = DDP(model, device_ids=[rank])
    
    # 創建損失函數和優化器
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(ddp_model.parameters(), lr=0.01)
    
    # 假設data_loader是一個已經定義好的數據加載器
    for data, target in data_loader:
        data, target = data.to(rank), target.to(rank)
        
        # 前向傳播
        output = ddp_model(data)
        
        # 計算損失
        loss = criterion(output, target)
        
        # 反向傳播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    # 清理進程組
    torch.distributed.destroy_process_group()
    

    在這個腳本中,<master_ip><master_port> 需要替換為實際的主節點IP地址和端口號,<world_size> 是總的GPU數量,<rank> 是當前進程的排名(從0開始)。

  4. 運行分布式訓練: 使用 torch.distributed.launch 來運行你的訓練腳本。例如,如果你的腳本名為 train.py,你可以這樣運行它:

    python -m torch.distributed.launch --nproc_per_node=<num_gpus_per_node> train.py
    

    其中 <num_gpus_per_node> 是每個節點上的GPU數量。

  5. 使用 accelerate(可選): accelerate 是一個由Hugging Face提供的庫,它可以簡化分布式訓練的設置。使用 accelerate,你可以用更少的代碼行來啟動分布式訓練。首先,你需要安裝 accelerate

    pip install accelerate
    

    然后,你可以使用 acceleratelaunch 命令來運行你的訓練腳本:

    accelerate launch train.py
    

    accelerate 會自動檢測可用的GPU,并為你設置好分布式訓練的環境。

請注意,這些步驟假設你已經有了一個可以運行的單機多GPU訓練腳本。分布式訓練通常涉及到更多的復雜性,比如數據并行化、模型并行化、梯度聚合等。確保你的代碼在這些方面也是正確設置的。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女