当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。