paddle.distributed 目录包含的 API 支撑飞桨框架大规模分布式训练能力。具体如下:
Fleet 分布式高层 API <01>
环境配置和训练启动管理 <02>
数据加载 <03>
集合通信算法 API <04>
Stream 集合通信高级 API <05>
RPC API <06>
自动并行 API <07>
paddle.distributed.fleet
是分布式训练的统一入口 API,用于配置分布式训练。
API 名称 |
API 功能 |
UserDefinedRoleMaker <cn_api_paddle_distributed_fleet_UserDefinedRoleMaker> |
设置和获取用户自定义的集群信息,支持集合通信(Collective)及参数服务器(ParameterServer)两种训练架构的初始化 |
PaddleCloudRoleMaker <cn_api_paddle_distributed_fleet_PaddleCloudRoleMaker> |
设置和获取 paddlecloud 集群信息(百度内部集群使用),支持集合通信(Collective)及参数服务器(ParameterServer)两种训练架构的初始化 |
DistributedStrategy <cn_api_paddle_distributed_fleet_DistributedStrategy> |
配置分布式通信、计算和内存优化等策略 |
fleet.init <cn_api_paddle_distributed_fleet_Fleet> |
进行分布式训练配置并初始化 |
fleet.init_worker <cn_api_paddle_distributed_fleet_Fleet> |
集合通信架构下,worker 节点初始化 |
fleet.stop_worker <cn_api_paddle_distributed_fleet_Fleet> |
集合通信架构下,停止正在运行的 worker 节点 |
fleet.barrier_worker <cn_api_paddle_distributed_fleet_Fleet> |
集合通信架构下,强制要求所有的 worker 在此处相互等待一次,保持同步 |
fleet.init_server <cn_api_paddle_distributed_fleet_Fleet> |
参数服务器架构下,server 节点的初始化 |
fleet.run_server <cn_api_paddle_distributed_fleet_Fleet> |
参数服务器架构下的进程启动 |
fleet.save_inference_model <cn_api_paddle_distributed_fleet_Fleet> |
保存用于预测的模型 |
fleet.save_persistables <cn_api_paddle_distributed_fleet_Fleet> |
保存全量模型参数 |
fleet.distributed_optimizer <cn_api_paddle_distributed_fleet_Fleet> |
基于分布式并行策略进行模型拆分和优化计算 |
UtilBase <cn_api_paddle_distributed_fleet_UtilBase> |
分布式训练工具的基类,用户集合通信、文件系统操作 |
utils.HDFSClient <cn_api_paddle_distributed_fleet_utils_HDFSClient> |
Hadoop 文件系统查看和管理 |
utils.LocalFS <cn_api_paddle_distributed_fleet_utils_LocalFS> |
本地文件系统查看和管理 |
API 名称 |
API 功能 |
is_available <cn_api_paddle_distributed_is_available> |
检查分布式环境是否可用 |
init_parallel_env <cn_api_paddle_distributed_init_parallel_env> |
初始化并行训练环境,支持动态图模式 |
launch <cn_api_paddle_distributed_launch> |
启动分布式训练进程,支持集合通信及参数服务器架构 |
spawn <cn_api_paddle_distributed_spawn> |
启动分布式训练进程,仅支持集合通信架构 |
get_rank <cn_api_paddle_distributed_get_rank> |
获取当前进程的 rank 值 |
get_world_size <cn_api_paddle_distributed_get_world_size> |
获取当前进程数 |
new_group <cn_api_paddle_distributed_new_group> |
创建分布式通信组 |
destroy_process_group <cn_api_paddle_distributed_destroy_process_group> |
销毁分布式通信组 |
get_backend <cn_api_paddle_distributed_get_backend> |
获取指定分布式通信组后端的名称 |
API 名称 |
API 功能 |
InMemoryDataset <cn_api_paddle_distributed_InMemoryDataset> |
数据加载到内存中,在训练前随机整理数据 |
QueueDataset <cn_api_paddle_distributed_QueueDataset> |
流式数据加载 |
在集群上,对多设备的进程组的参数数据 tensor 或 object 进行计算处理,包括规约、聚合、广播、分发等。
API 名称 |
API 功能 |
ReduceOp <cn_api_paddle_distributed_ReduceOp> |
规约操作的类型 |
reduce <cn_api_paddle_distributed_reduce> |
规约进程组内的 tensor,随后将结果发送到指定进程 |
all_reduce <cn_api_paddle_distributed_all_reduce> |
规约进程组内的 tensor,随后将结果发送到每个进程 |
all_gather <cn_api_paddle_distributed_all_gather> |
聚合进程组内的 tensor,随后将结果发送到每个进程 |
all_gather_object <cn_api_paddle_distributed_all_gather_object> |
聚合进程组内的 object,随后将结果发送到每个进程 |
alltoall <cn_api_paddle_distributed_alltoall> |
将一组 tensor 分发到每个进程并进行聚合 |
alltoall_single <cn_api_paddle_distributed_alltoall_single> |
将一个 tensor 分发到每个进程并进行聚合 |
broadcast <cn_api_paddle_distributed_broadcast> |
将一个 tensor 发送到每个进程 |
broadcast_object_list <cn_api_paddle_distributed_broadcast_object_list> |
将一组 object 发送到每个进程 |
scatter <cn_api_paddle_distributed_scatter> |
将一组 tensor 分发到每个进程 |
scatter_object_list <cn_api_paddle_distributed_scatter_object_list> |
将一组 object 分发到每个进程 |
reduce_scatter <cn_api_paddle_distributed_reduce_scatter> |
规约一组 tensor,随后将规约结果分发到每个进程 |
isend <cn_api_paddle_distributed_isend> |
异步发送一个 tensor 到指定进程 |
irecv <cn_api_paddle_distributed_irecv> |
异步接收一个来自指定进程的 tensor |
send <cn_api_paddle_distributed_send> |
发送一个 tensor 到指定进程 |
recv <cn_api_paddle_distributed_recv> |
接收一个来自指定进程的 tensor |
barrier <cn_api_paddle_distributed_barrier> |
同步路障,阻塞操作以实现组内进程同步 |
paddle.distributed.stream
在集合通信 API 的基础上,提供更统一的语义和对计算流的更精细的控制能力,有助于在特定场景下提高性能。
API 名称 |
API 功能 |
stream.reduce <cn_api_paddle_distributed_stream_reduce> |
规约进程组内的 tensor,随后将结果发送到指定进程 |
stream.all_reduce <cn_api_paddle_distributed_stream_all_reduce> |
规约进程组内的 tensor,随后将结果发送到每个进程 |
stream.all_gather <cn_api_paddle_distributed_stream_all_gather> |
聚合进程组内的 tensor,随后将结果发送到每个进程 |
stream.alltoall <cn_api_paddle_distributed_stream_alltoall> |
分发一组 tensor 到每个进程并进行聚合 |
stream.alltoall_single <cn_api_paddle_distributed_stream_alltoall_single> |
分发一个 tensor 到每个进程并进行聚合 |
stream.broadcast <cn_api_paddle_distributed_stream_broadcast> |
发送一个 tensor 到每个进程 |
stream.scatter <cn_api_paddle_distributed_stream_scatter> |
分发一个 tensor 到每个进程 |
stream.reduce_scatter <cn_api_paddle_distributed_stream_reduce_scatter> |
规约一组 tensor,随后将规约结果分发到每个进程 |
stream.send <cn_api_paddle_distributed_stream_send> |
发送一个 tensor 到指定进程 |
stream.recv <cn_api_paddle_distributed_stream_recv> |
接收一个来自指定进程的 tensor |
API 名称 |
API 功能 |
rpc.init_rpc <cn_api_paddle_distributed_rpc_init_rpc> |
初始化 RPC |
rpc.rpc_sync <cn_api_paddle_distributed_rpc_rpc_sync> |
发起一个阻塞的 RPC 调用 |
rpc.rpc_async <cn_api_paddle_distributed_rpc_rpc_async> |
发起一个非阻塞的 RPC 调用 |
rpc.shutdown <cn_api_paddle_distributed_rpc_shutdown> |
关闭 RPC |
rpc.get_worker_info <cn_api_paddle_distributed_rpc_get_worker_info> |
获取 worker 信息 |
rpc.get_all_worker_infos <cn_api_paddle_distributed_rpc_get_all_worker_infos> |
获取所有 worker 的信息 |
rpc.get_current_worker_info <cn_api_paddle_distributed_rpc_get_current_worker_info> |
获取当前 worker 的信息 |
自动并行降低分布式训练的使用门槛,使用自动并行 API 对组网进行少量改动即可进行分布式训练。
API 名称 |
API 功能 |
shard_tensor <cn_api_paddle_distributed_shard_tensor> |
创建带有分布式切分信息的分布式 Tensor |
shard_layer <cn_api_paddle_distributed_shard_layer> |
按照指定方式将 Layer 中的参数转换为分布式 Tensor |
reshard <cn_api_paddle_distributed_reshard> |
对一个带有分布式信息的 Tensor 重新进行分布/切片 |
to_static <cn_api_paddle_distributed_to_static> |
将带有分布式切分信息的动态图模型转换为静态图分布式模型 |
Strategy <cn_api_paddle_distributed_Strategy> |
配置静态图分布式训练时所使用的并行策略和优化策略 |