scatter_object_list

paddle.distributed. scatter_object_list ( out_object_list, in_object_list, src=0, group=None ) [源代码]

将一组来自指定进程的 picklable 对象分发到每个进程 过程与 scatter 类似,但可以传入自定义的 python 对象。

注解

该 API 只支持动态图模式。

参数

  • out_object_list (List[Any]) - 用于接收数据的 object 列表。

  • in_object_list (List[Any],可选) - 将被分发的 object 列表。默认为 None,因为 rank != src 的进程上的该参数将被忽略。

  • src (int,可选) - 目标进程的 rank,该进程的 object 列表将被分发到其他进程中。默认为 0,即分发 rank=0 的进程上的 object 列表。

  • group (Group,可选) - 执行该操作的进程组实例(通过 new_group 创建)。默认为 None,即使用全局默认进程组。

返回

无返回值。

代码示例

# required: distributed
import paddle.distributed as dist

dist.init_parallel_env()
out_object_list = []
if dist.get_rank() == 0:
    in_object_list = [{'foo': [1, 2, 3]}, {'foo': [4, 5, 6]}]
else:
    in_object_list = [{'bar': [1, 2, 3]}, {'bar': [4, 5, 6]}]
dist.scatter_object_list(out_object_list, in_object_list, src=1)
print(out_object_list)
# [{'bar': [1, 2, 3]}] (2 GPUs, out for rank 0)
# [{'bar': [4, 5, 6]}] (2 GPUs, out for rank 1)