分布式訓練TorchDistributor

本文描述如何執行分布式訓練PyTorch毫升模型使用TorchDistributor

TorchDistributor PySpark開源模塊,幫助用戶做分布式訓練PyTorch火花集群,這允許您啟動PyTorch培訓工作引發的工作。底層,它初始化環境和員工之間的溝通渠道,充分利用了CLI命令torch.distributed.run工作者節點運行分布式訓練。

TorchDistributor API支持方法如下表所示。

方法和簽名

描述

init(自我,num_processes,local_mode,use_gpu)

TorchDistributor創建一個實例。

運行(自我,主要的,* args)

通過調用運行分布式訓練主要(* * kwargs)如果主要是功能和運行CLI命令torchrun主要* args如果主要是文件路徑。

需求

  • 火花3.4

  • 磚運行時13.0毫升以上

開發工作流程為筆記本電腦

如果模型創建和訓練過程完全從你的本地機器或筆記本磚的筆記本,你隻需要準備你的代碼進行少量更改為分布式訓練。

  1. 準備單獨的節點代碼:準備和測試單一節點代碼PyTorch, PyTorch閃電,或其他框架基於PyTorch / PyTorch閃電,HuggingFace教練API。

  2. 準備代碼標準分布式訓練:你需要單流程培訓轉化成分布式訓練。這種分布式代碼都包含在一個訓練函數,您可以使用TorchDistributor

  3. 移動進口在訓練函數:添加必要的進口,如進口火炬在培訓的功能。這樣做可以讓你避免常見的酸洗錯誤。此外,device_id模型和數據的聯係是由:

    device_id=int(操作係統環境(“LOCAL_RANK”])
  4. 啟動分布式訓練:實例化TorchDistributor所需的參數和調用.run (* args)啟動培訓。

以下是培訓代碼示例:

pyspark.ml.torch.distributor進口TorchDistributordef火車(learning_rate,use_gpu):進口火炬進口torch.distributed作為經銷進口torch.nn.parallel.DistributedDataParallel作為DDPtorch.utils.data進口DistributedSampler,DataLoader後端=“nccl”如果use_gpu其他的“gloo”經銷init_process_group(後端)設備=int(操作係統環境(“LOCAL_RANK”])如果use_gpu其他的“cpu”模型=DDP(createModel(),* *kwargs)取樣器=DistributedSampler(數據集)加載程序=DataLoader(數據集,取樣器=取樣器)輸出=火車(模型,加載程序,learning_rate)經銷清理()返回輸出經銷商=TorchDistributor(num_processes=2,local_mode=,use_gpu=真正的)經銷商運行(火車,1 e - 3,真正的)

從外部存儲庫遷移訓練

如果你有一個現有的分布式訓練程序存儲在外部存儲庫中,您可以很容易地遷移到磚做的以下幾點:

  1. 導入庫:導入外部存儲庫是一個磚回購

  2. 創建一個新的筆記本初始化一個新的庫中的數據磚的筆記本。

  3. 啟動分布式訓練筆記本電池,電話TorchDistributor如下:

pyspark.ml.torch.distributor進口TorchDistributortrain_file=“/道路/ / train.py”arg遊戲=(“——learning_rate = 0.001”,”——batch_size = 16 "]經銷商=TorchDistributor(num_processes=2,local_mode=,use_gpu=真正的)經銷商運行(train_file,*arg遊戲)

故障排除

筆記本工作流的常見的錯誤是,對象不能被發現或醃當運行分布式訓練。這可能發生在圖書館導入語句不分發給其他執行者。

為了避免這個問題,包括所有導入語句(例如,進口火炬)這兩個頂部的訓練函數,稱為TorchDistributor (…) .run (< func >)在任何其他用戶定義的函數稱為訓練方法。

例如筆記本電腦

以下筆記本例子演示如何執行PyTorch分布式訓練。

端到端分布式訓練磚筆記本

在新標簽頁打開筆記本

分布式微調擁抱臉模型筆記本

在新標簽頁打開筆記本

分布式訓練PyTorch文件筆記本

在新標簽頁打開筆記本

分布式訓練使用PyTorch閃電筆記本

在新標簽頁打開筆記本