當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch start_processes用法及代碼示例


本文簡要介紹python語言中 torch.distributed.elastic.multiprocessing.start_processes 的用法。

用法:

torch.distributed.elastic.multiprocessing.start_processes(name, entrypoint, args, envs, log_dir, start_method='spawn', redirects=<Std.NONE: 0>, tee=<Std.NONE: 0>)

參數

  • name-一個人類可讀的短名稱,說明進程是什麽(在 tee'ing stdout/stderr 輸出時用作標題)

  • entrypoint-Callable(函數)或cmd(二進製)

  • args-每個副本的參數

  • envs-每個副本的環境變量

  • log_dir-用於寫入日誌文件的目錄

  • nprocs-要創建的副本數(每個進程一個)

  • start_method-二進製文件忽略多處理啟動方法(spawn、fork、forkserver)

  • redirects-哪些 std 流重定向到日誌文件

  • tees-哪個std流重定向+打印到控製台

使用提供的選項啟動entrypoint 進程的n 副本。 entrypointCallable(函數)或str(二進製)。副本數由argsenvs 參數的條目數決定,它們需要具有相同的 key 集。

argsenv 參數是要向下傳遞到副本索引(本地排名)映射的入口點的參數和環境變量。必須考慮所有地方等級。也就是說, key 集應該是 {0,1,...,(nprocs-1)}

注意

entrypoint 是二進製 ( str ) 時,args 隻能是字符串。如果給出任何其他類型,則將其轉換為字符串表示形式(例如 str(arg1) )。此外,如果主函數使用 torch.distributed.elastic.multiprocessing.errors.record 注釋,二進製故障隻會寫入 error.json 錯誤文件。對於函數啟動,這是默認完成的,無需使用@record 注釋手動進行注釋。

redirectstees 是位掩碼,指定將哪些 std 流重定向到 log_dir 中的日誌文件。有效的掩碼值在 Std 中定義。要僅重定向/發送某些本地排名,請將 redirects 作為映射傳遞,其中鍵作為本地排名以指定重定向行為。任何缺少的本地排名將默認為 Std.NONE

tee 的行為類似於 unix “tee” 命令,因為它將 + 打印重定向到控製台。要避免工作人員 stdout/stderr 打印到控製台,請使用 redirects 參數。

對於每個進程,log_dir 將包含:

  1. {local_rank}/error.json :如果進程失敗,包含錯誤信息的文件

  2. {local_rank}/stdout.json:如果redirect & STDOUT == STDOUT

  3. {local_rank}/stderr.json:如果redirect & STDERR == STDERR

注意

預計log_dir 存在、為空且為目錄。

例子:

log_dir = "/tmp/test"

# ok; two copies of foo: foo("bar0"), foo("bar1")
start_processes(
   name="trainer",
   entrypoint=foo,
   args:{0:("bar0",), 1:("bar1",),
   envs:{0:{}, 1:{}},
   log_dir=log_dir
)

# invalid; envs missing for local rank 1
start_processes(
   name="trainer",
   entrypoint=foo,
   args:{0:("bar0",), 1:("bar1",),
   envs:{0:{}},
   log_dir=log_dir
)

# ok; two copies of /usr/bin/touch: touch file1, touch file2
start_processes(
   name="trainer",
   entrypoint="/usr/bin/touch",
   args:{0:("file1",), 1:("file2",),
   envs:{0:{}, 1:{}},
   log_dir=log_dir
 )

# caution; arguments casted to string, runs:
# echo "1" "2" "3" and echo "[1, 2, 3]"
start_processes(
   name="trainer",
   entrypoint="/usr/bin/echo",
   args:{0:(1,2,3), 1:([1,2,3],),
   envs:{0:{}, 1:{}},
   log_dir=log_dir
 )

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.distributed.elastic.multiprocessing.start_processes。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。