资料流模型将运算任务描述成一个"有向无环图",节点表示资料运算和储存,节点之间的连线表示资料流向以及节点的依赖关系。
TensorFlow
名字由多维度资料集 - "张量(Tensor)"与"资料流(Flow)"组成,使用拓扑图代表资料流关联,具备痊域优化能力。
- 设计原则
- 资料流:支持各种类型的数值计算任务。
- 拓扑图:避免运行阶段的重复建构以提升运行效能。
- 异质性:支援CPU、GPU、TPU等运算单元以及TCP、gRPC、RDMA等通讯。
- 系统架构
- 应用层:提供多种程序语言撰写环境。
- API介面层:提供多种程序语言介面。
- 图计算层:负责单机或分散式的计算环境。
- 资料操作层:负责於实体运算单元上"张量"的操作与运算。
- 网路层(Network Layer):透过 gRPC 和 RDMA 实现程序(Process)间的通讯。
- 装置管理层(Device Layer):负责实际的网路及运算单元管理。
- 交谈(Session)
管理资料流的运行状态。
- 角色
- Client
序列化、传输以及启动程序撰写时所定义的 GraphDef 任务。
- Master
进行模型剪枝(Pruning)将任务组成"最小生成树",将任务切割成分区图(Graph Partition),之後通知 Worker 执行分配的任务分区图。
- Worker
将任务切割成子分区图(Sub Graph Partition)给运算单元执行。
- 参数
- Cluster:运行丛集及透过 ClusterSpec 设定 Job 及 Task 的组态资讯。
- Job:使用 job_id 来识别 Worker。
- Task:使用 job_id:task_index 来识别任务。
- 模型复制
- In-Graph
将输入资料、拓扑图(tf.Graph)和参数(tf.Variables)分配到不同的节点上执行,如果任务(Task)失败则整个任务失败,容错能力较低。
- Between-Graph:
参数会透过 Cheif Worker 存取,以共享方式储存在"参数服务器(PS)"上,包含参数初始化、Checkpoint、Tensorboard Summary。
- 分散式策略
- ParameterServerStrategy
参数服务器架构:定义 PS 与 Worker 实体数量、执行节点、通讯组态。
- MultiWorkerMirroredStrategy
Ring-AllReduce架构。
PyTorch
采取组态档案以及指令(CLI)参数方式组成程序,采用动态图(Dynamic Graph)以及 Autograd 实作梯度运算,目前缺乏像 TensorFlow 一样支援多种服务器以及移动端等架构运行环境。
- 分散式架构
- 参数
- Group:程序集合
- World_size:全域的程序数量
- Rank:表示程序的识别码及优先序(Rank0为主节点)
- local_rank:程序内的编号
- 运行架构
- 点对点通讯(Point-to-Point Communication):程序间的资料传输
- 集合通讯(Collective Communication):支援 AllReduce以及Boardcast等集合通讯
- 程序介面
- DataParallel
使用 Optimizer 来合并及广播梯度及参数,容易遭遇附载平衡问题,造成单点瓶颈。
- DistributedDataParallel
采用 Ring-AllReduce 最佳频宽解决方案。
- 通讯引擎
- Gloo:常用於 CPU 丛集
- NCCL:常用於 GPU 丛集