快捷方式

定製化

本節介紹如何定製 TorchElastic 以滿足您的需求。

啟動器

TorchElastic 附帶的啟動器程式應足以滿足大多數用例(參見 torchrun (彈性啟動))。您可以透過程式設計方式建立一個代理並向其傳遞工作程序的規範來實現自定義啟動器,如下所示。

# my_launcher.py

if __name__ == "__main__":
  args = parse_args(sys.argv[1:])
  rdzv_handler = RendezvousHandler(...)
  spec = WorkerSpec(
      local_world_size=args.nproc_per_node,
      fn=trainer_entrypoint_fn,
      args=(trainer_entrypoint_fn args.fn_args,...),
      rdzv_handler=rdzv_handler,
      max_restarts=args.max_restarts,
      monitor_interval=args.monitor_interval,
  )

  agent = LocalElasticAgent(spec, start_method="spawn")
  try:
      run_result = agent.run()
      if run_result.is_failed():
          print(f"worker 0 failed with: run_result.failures[0]")
      else:
          print(f"worker 0 return value is: run_result.return_values[0]")
  except Exception ex:
      # handle exception

Rendezvous 處理程式

要實現您自己的 rendezvous,請擴充套件 torch.distributed.elastic.rendezvous.RendezvousHandler 並實現其方法。

警告

Rendezvous 處理程式實現起來很棘手。在開始之前,請確保您完全理解 rendezvous 的屬性。有關更多資訊,請參閱 Rendezvous

實現後,您可以在建立代理時將自定義的 rendezvous 處理程式傳遞給工作程序規範。

spec = WorkerSpec(
    rdzv_handler=MyRendezvousHandler(params),
    ...
)
elastic_agent = LocalElasticAgent(spec, start_method=start_method)
elastic_agent.run(spec.role)

指標處理程式

TorchElastic 會發出平臺級指標(參見 指標)。預設情況下,指標會發送到 /dev/null,因此您將看不到它們。要將指標推送到您基礎架構中的指標處理服務,請實現 torch.distributed.elastic.metrics.MetricHandler 並在您的自定義啟動器中 配置 它。

# my_launcher.py

import torch.distributed.elastic.metrics as metrics

class MyMetricHandler(metrics.MetricHandler):
    def emit(self, metric_data: metrics.MetricData):
        # push metric_data to your metric sink

def main():
  metrics.configure(MyMetricHandler())

  spec = WorkerSpec(...)
  agent = LocalElasticAgent(spec)
  agent.run()

事件處理程式

TorchElastic 支援事件記錄(參見 事件)。事件模組定義了允許您記錄事件並實現自定義 EventHandler 的 API。EventHandler 用於將 TorchElastic 執行期間產生的事件釋出到不同的源,例如 AWS CloudWatch。預設情況下,它使用會忽略事件的 torch.distributed.elastic.events.NullEventHandler。要配置自定義事件處理程式,您需要實現 torch.distributed.elastic.events.EventHandler 介面並在您的自定義啟動器中配置它。

# my_launcher.py

import torch.distributed.elastic.events as events

class MyEventHandler(events.EventHandler):
    def record(self, event: events.Event):
        # process event

def main():
  events.configure(MyEventHandler())

  spec = WorkerSpec(...)
  agent = LocalElasticAgent(spec)
  agent.run()

文件

查閱 PyTorch 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲取問題解答

檢視資源