paddle.distributed
paddle.distributed 目录包含的 API 支撑飞桨框架大规模分布式训练能力。具体如下:
Fleet 分布式高层 API
paddle.distributed.fleet 是分布式训练的统一入口 API,用于配置分布式训练。
| API 名称 | API 功能 | 
|---|---|
|  | 设置和获取用户自定义的集群信息,支持集合通信(Collective)及参数服务器(ParameterServer)两种训练架构的初始化 | 
|  | 设置和获取 paddlecloud 集群信息(百度内部集群使用),支持集合通信(Collective)及参数服务器(ParameterServer)两种训练架构的初始化 | 
|  | 配置分布式通信、计算和内存优化等策略 | 
|  | 进行分布式训练配置并初始化 | 
|  | 集合通信架构下,worker 节点初始化 | 
|  | 集合通信架构下,停止正在运行的 worker 节点 | 
|  | 集合通信架构下,强制要求所有的 worker 在此处相互等待一次,保持同步 | 
|  | 参数服务器架构下,server 节点的初始化 | 
|  | 参数服务器架构下的进程启动 | 
|  | 保存用于预测的模型 | 
|  | 保存全量模型参数 | 
|  | 基于分布式并行策略进行模型拆分和优化计算 | 
|  | 分布式训练工具的基类,用户集合通信、文件系统操作 | 
|  | Hadoop 文件系统查看和管理 | 
|  | 本地文件系统查看和管理 | 
|  | 重新计算中间激活函数值来节省显存 | 
环境配置和训练启动管理
| API 名称 | API 功能 | 
|---|---|
|  | 检查分布式环境是否已经被初始化 | 
|  | 检查分布式环境是否可用 | 
|  | 初始化并行训练环境,支持动态图模式 | 
|  | 启动分布式训练进程,支持集合通信及参数服务器架构 | 
|  | 启动分布式训练进程,仅支持集合通信架构 | 
|  | 获取当前进程的 rank 值 | 
|  | 获取当前进程数 | 
|  | 创建分布式通信组 | 
|  | 通过通信组 id 获取通信组实例 | 
|  | 销毁分布式通信组 | 
|  | 获取指定分布式通信组后端的名称 | 
|  | 初始化  | 
|  | 释放当前并行环境的 gloo 上下文 | 
|  | 这个类用于获取动态图模型并行执行所需的环境变量值 | 
数据加载
| API 名称 | API 功能 | 
|---|---|
|  | 数据加载到内存中,在训练前随机整理数据 | 
|  | 流式数据加载 | 
集合通信 API
在集群上,对多设备的进程组的参数数据 tensor 或 object 进行计算处理,包括规约、聚合、广播、分发等。
| API 名称 | API 功能 | 
|---|---|
|  | 规约操作的类型 | 
|  | 规约进程组内的 tensor,随后将结果发送到指定进程 | 
|  | 规约进程组内的 tensor,随后将结果发送到每个进程 | 
|  | 聚合进程组内的 tensor,随后将结果发送到每个进程 | 
|  | 聚合进程组内的 object,随后将结果发送到每个进程 | 
|  | 将一组 tensor 分发到每个进程并进行聚合 | 
|  | 将一个 tensor 分发到每个进程并进行聚合 | 
|  | 将一个 tensor 发送到每个进程 | 
|  | 将一组 object 发送到每个进程 | 
|  | 将一组 tensor 分发到每个进程 | 
|  | 将一组 object 分发到每个进程 | 
|  | 规约一组 tensor,随后将规约结果分发到每个进程 | 
|  | 异步发送一个 tensor 到指定进程 | 
|  | 异步接收一个来自指定进程的 tensor | 
|  | 发送一个 tensor 到指定进程 | 
|  | 接收一个来自指定进程的 tensor | 
|  | 同步路障,阻塞操作以实现组内进程同步 | 
|  | 使用初始化的 gloo 上下文直接调用基于 gloo 封装的 barrier 函数 | 
|  | 同步通信组,在指定的通信组中同步特定的 tensor 对象 | 
Stream 集合通信高级 API
paddle.distributed.stream 在集合通信 API 的基础上,提供更统一的语义和对计算流的更精细的控制能力,有助于在特定场景下提高性能。
| API 名称 | API 功能 | 
|---|---|
|  | 规约进程组内的 tensor,随后将结果发送到指定进程 | 
|  | 规约进程组内的 tensor,随后将结果发送到每个进程 | 
|  | 聚合进程组内的 tensor,随后将结果发送到每个进程 | 
|  | 分发一组 tensor 到每个进程并进行聚合 | 
|  | 分发一个 tensor 到每个进程并进行聚合 | 
|  | 发送一个 tensor 到每个进程 | 
|  | 分发一个 tensor 到每个进程 | 
|  | 规约一组 tensor,随后将规约结果分发到每个进程 | 
|  | 发送一个 tensor 到指定进程 | 
|  | 接收一个来自指定进程的 tensor | 
RPC API
| API 名称 | API 功能 | 
|---|---|
|  | 初始化 RPC | 
|  | 发起一个阻塞的 RPC 调用 | 
|  | 发起一个非阻塞的 RPC 调用 | 
|  | 关闭 RPC | 
|  | 获取 worker 信息 | 
|  | 获取所有 worker 的信息 | 
|  | 获取当前 worker 的信息 | 
自动并行 API
自动并行降低分布式训练的使用门槛,使用自动并行 API 对组网进行少量改动即可进行分布式训练。
| API 名称 | API 功能 | 
|---|---|
|  | 创建带有分布式切分信息的分布式 Tensor | 
|  | 通过一个 paddle API 结合分布式属性 placements 创建一个带分布式属性的 Tensor | 
|  | 按照指定方式将 Layer 中的参数转换为分布式 Tensor | 
|  | 将单机视角下的 dataloader 转换成分布式的 dataloader | 
|  | 对一个带有分布式信息的 Tensor 重新进行分布/切片 | 
|  | 将带有分布式切分信息的动态图模型转换为静态图分布式模型 | 
|  | 配置静态图分布式训练时所使用的并行策略和优化策略 | 
|  | 指定 Tensor 在 ProcessMesh 上的分布或切片方式 | 
|  | 将单卡视角的优化器转变为分布式视角 | 
|  | 切分指定操作的参数到多个设备,并且并行计算得到结果 | 
|  | 设置全局 ProcessMesh | 
|  | 获取全局 ProcessMesh | 
|  | 保存分布式训练的 state_dict 到指定路径 | 
|  | 将指定路径的 checkpoint 加载到指定 state_dict 中 | 
|  | 支持分布式张量(DTensor)传递给为普通张量(Tensor)编写的函数处理,并保证处理逻辑正确 | 
此外,自动并行提供更高层次的 API 来帮助用户通过非入侵组网的方式实现自动并行的分布式训练。
| API 名称 | API 功能 | 
|---|---|
|  | 对模型和优化器进行并行化处理 | 
|  | 按列切分标识 Layer | 
|  | 按行切分标识 Layer | 
|  | 标识 Layer 为序列并行的开始 | 
|  | 标识 Layer 序列并行的结束 | 
|  | 对标识 Layer 进行序列并行 | 
|  | 对标识 Layer 不进行序列并行 | 
|  | 标识 Layer 为流水线并行的切分点 | 
|  | 对标识 Layer 的输入进行处理 | 
|  | 对标识 Layer 的输出进行处理 | 
甚至无需了解任何分布式概念,使用 to_distributed 接口一键进行分布式训练
| API 名称 | API 功能 | 
|---|---|
|  | 一键进行分布式训练 | 
Sharding API
| API 名称 | API 功能 | 
|---|---|
|  | 对模型、优化器和 GradScaler 做 group sharded 配置 | 
|  | 对 group_sharded_parallel 配置后的模型和优化器状态进行保存 |