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


Python PyTorch scatter_object_list用法及代码示例


本文简要介绍python语言中 torch.distributed.scatter_object_list 的用法。

用法:

torch.distributed.scatter_object_list(scatter_object_output_list, scatter_object_input_list, src=0, group=None)

参数

  • scatter_object_output_list(List[任何]) -非空列表,其第一个元素将存储分散到该等级的对象。

  • scatter_object_input_list(List[任何]) -要分散的输入对象列表。每个对象都必须是 picklable 的。只有src rank 上的对象会被分散,非src rank 的参数可以是None

  • src(int) -要从中分散的源排名 scatter_object_input_list

  • group-(ProcessGroup,可选):要处理的进程组。如果没有,将使用默认进程组。默认为 None

返回

None 。如果等级是组的一部分,scatter_object_output_list 将把它的第一个元素设置为这个等级的分散对象。

scatter_object_input_list中的可pickl对象分散到整个组中。与scatter()类似,但可以传入Python对象。在每个rank上,分散的对象将存储为scatter_object_output_list的第一个元素。请注意,scatter_object_input_list 中的所有对象都必须是 picklable 的才能分散。

注意

请注意,此 API 与分散集合略有不同,因为它不提供 async_op 句柄,因此将是一个阻塞调用。

警告

scatter_object_list() 隐式使用 pickle 模块,已知这是不安全的。可以构造恶意的 pickle 数据,该数据将在 unpickling 期间执行任意代码。仅使用您信任的数据调用此函数。

例子:

>>> # Note: Process group initialization omitted on each rank.
>>> import torch.distributed as dist
>>> if dist.get_rank() == 0:
>>>     # Assumes world_size of 3.
>>>     objects = ["foo", 12, {1: 2}] # any picklable object
>>> else:
>>>     # Can be any list on non-src ranks, elements are not used.
>>>     objects = [None, None, None]
>>> output_list = [None]
>>> dist.scatter_object_list(output_list, objects, src=0)
>>> # Rank i gets objects[i]. For example, on rank 2:
>>> output_list
[{1: 2}]

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.distributed.scatter_object_list。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。