捷徑

分散式

對於分散式訓練,TorchX 依靠排程器的群組排程功能來排程節點的 n 個副本。啟動後,應用程式應以利用此拓撲的方式編寫,例如,使用 PyTorch 的 DDP。您可以透過在元件的 AppDef 中指定多個 torchx.specs.Role 來使用 TorchX 表達各種節點拓撲。每個角色都對應到一個同質的節點群組,這些節點在整體訓練中執行一個「角色」(功能)。在排程方面,TorchX 將每個角色作為一個子群組啟動。

DDP 樣式的訓練作業只有一個角色:訓練器。而使用參數伺服器的訓練作業將具有兩個角色:參數伺服器、訓練器。您可以為每個角色指定不同的進入點(可執行檔)、副本數、資源需求等。

DDP 內建

DDP 樣式的訓練器很常見,而且很容易模板化,因為它們是同質的單一角色 AppDef,所以有一個內建的:dist.ddp。假設您的 DDP 訓練腳本名為 main.py,請按以下方式啟動它

# locally, 1 node x 4 workers
$ torchx run -s local_cwd dist.ddp -j 1x4 --script main.py

# locally, 2 node x 4 workers (8 total)
$ torchx run -s local_cwd dist.ddp -j 2x4 --script main.py

# remote (optionally pass --rdzv_port to use a different master port than the default 29500)
$ torchx run -s kubernetes -cfg queue=default dist.ddp \
    -j 2x4 \
    --script main.py

# remote -- elastic/autoscaling with 2 minimum and max 5 nodes with 8
# workers each
$ torchx run -s kubernetes dist.ddp -j 2:5x8 --script main.py

請注意,與本地啟動相比,唯一的區別是排程器 (-s)。dist.ddp 內建元件在幕後使用 torchelastic(更具體地說是 torch.distributed.run)。在 這裡 閱讀更多關於 torchelastic 的資訊。

元件 API

torchx.components.dist.ddp(*script_args: str, script: Optional[str] = None, m: Optional[str] = None, image: str = 'ghcr.io/pytorch/torchx:0.7.0', name: str = '/', h: Optional[str] = None, cpu: int = 2, gpu: int = 0, memMB: int = 1024, j: str = '1x2', env: Optional[Dict[str, str]] = None, max_retries: int = 0, rdzv_port: int = 29500, rdzv_backend: str = 'c10d', mounts: Optional[List[str]] = None, debug: bool = False, tee: int = 3) AppDef[原始碼]

分散式資料平行應用程式(一個角色,多個副本)。 使用 torch.distributed.run 來啟動和協調 PyTorch 工作者行程。 預設情況下,在 rendezvous_endpoint $rank_0_host:$rdzv_port 上使用 c10d 會合後端。 請注意,在單一節點上執行時,rdzv_port 參數會被忽略,而我們使用端口 0,這會指示 torchelastic 在主機上選擇一個可用的隨機端口。

注意: (cpu、gpu、memMB) 參數與 h(已命名的資源)互斥,其中

如果指定了 h 來設定資源需求,則 h 優先。 請參閱 註冊已命名的資源

參數
  • script_args – 傳遞給主模組的參數

  • script – 在映像檔中執行的腳本或二進位檔案

  • m – 要執行的 Python 模組路徑

  • image – 映像檔(例如 docker)

  • name – 作業名稱覆寫,格式如下:{experimentname}/{runname}{experimentname}//{runname}{runname}。 如果未指定 {runname},則使用腳本或模組名稱。

  • cpu – 每個副本的 CPU 數量

  • gpu – 每個副本的 GPU 數量

  • memMB – 每個副本的 CPU 記憶體(MB)

  • h – 註冊的已命名資源(如果指定,則優先於 cpu、gpu、memMB)

  • j – [{min_nnodes}:]{nnodes}x{nproc_per_node},對於 GPU 主機,nproc_per_node 不能超過 GPU 數量

  • env – 要傳遞給執行的環境變數(例如 ENV1=v1、ENV2=v2、ENV3=v3)

  • max_retries – 允許的排程程式重試次數

  • rdzv_port – rank0 主機上用於託管用於會合的 c10d 存放區的端口。 僅在執行多節點時生效。 在執行單一節點時,此參數將被忽略,並選擇一個可用的隨機端口。

  • rdzv_backend – 要使用的會合後端。 僅在執行多節點時生效。

  • mounts – 要掛載到工作者環境/容器的掛載(例如 type=<bind/volume>、src=/host、dst=/job[,readonly])。 如需詳細資訊,請參閱排程程式文件。

  • debug – 是否使用預設的除錯旗標啟用執行

  • tee – 將指定的標準串流複製到控制台 + 檔案。 0:無,1:標準輸出,2:標準錯誤輸出,3:兩者

torchx.components.dist._TORCH_DEBUG_FLAGS

這些是用於除錯 PyTorch 執行的常用設定環境變數。

  • CUDA_LAUNCH_BLOCKING:在 這裡 閱讀更多資訊。

  • NCCL_DESYNC_DEBUG

  • TORCH_DISTRIBUTED_DEBUG:在 這裡 閱讀更多資訊。

  • TORCH_SHOW_CPP_STACKTRACES:在 這裡 閱讀更多資訊。

文件

取得 PyTorch 的完整開發人員文件

檢視文件

教學課程

取得適用於初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並取得問題的解答

檢視資源