[源码解析] 模型并行分布式训练 Megatron (3) ---模型并行实现 目录 [源码解析] 模型并行分布式训练 Megatron (3) ---模型并行实现 0x00 摘要 0x01 并行Transformer层 1.1 初始化 1.2 前向传播 0x02 并行MLP 2.1 命名规范 2.2 MLP 代码 2.2.1 初始化 2.2.2 前向操作 0x03 ColumnParallelLinear 3.1 定义 3.2 初始化 3.2.1 切分size 3.2.2 初始化权重 3.3…
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并行训练 1.1 分布式并行训练的必要 1.2 分布式训练 1.3 训练并行机制 1.3.1 三种机制 1.3.2 如何使用 1.4 数据并行训练 0x02 通信 & 架构 2.1 方法和架构 2.2 异步 vs 同步 0x03 具体架构 3.1 MapReduce 3.2 参数服务器 (PS) 3.…
[源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 目录 [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 0x00 摘要 0x01 Horovod 简介 0x02 Hovorod 机制概述 2.1 Horovod 机制 0x03 示例代码 3.1 摘要代码 3.2 horovodrun 0x04 运行逻辑 4.1 引入python文件 4.2 初始化 in python 4.2.1 引入SO库 4.2.1.1 SO库 4…
[源码解析] 深度学习分布式训练框架 horovod (3) --- Horovodrun背后做了什么 目录 [源码解析] 深度学习分布式训练框架 horovod (3) --- Horovodrun背后做了什么 0x00 摘要 0x01 背景知识 1.1 分布式体系 1.2 并行任务通信 1.3 MPI 1.4 Open-MPI 1.5 MPI 使用问题 0x02 入口点 2.1 如何运行 2.2 horovodrun 2.3 run_commandline 2.4 非弹性训练 _run_st…
[源码解析] 深度学习分布式训练框架 horovod (5) --- 融合框架 目录 [源码解析] 深度学习分布式训练框架 horovod (5) --- 融合框架 0x00 摘要 0x01 架构图 0x02 统一层 0x03 Horovod OP 类体系 3.1 基类 HorovodOp 3.2 派生类 AllreduceOp 3.3 适配类 MPIAllreduce 3.4 后台线程如何使用 3.4.1 具体collective 操作 3.4.2 调用不同类型的OP 3.4.3 取一个适配层…
[源码解析] 深度学习分布式训练框架 horovod (6) --- 后台线程架构 目录 [源码解析] 深度学习分布式训练框架 horovod (6) --- 后台线程架构 0x00 摘要 0x01 引子 0x02 设计要点 2.1 问题 2.2 方案 2.3 协调 2.3.1 设计 2.3.2 实现 2.4 Background Thread 2.4.1 设计 2.4.2 实现 0x03 辅助功能 3.1 如何判断是 coordinator 3.2 协调缓存&信息 3.2.1 计算共有 ten…
[源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (8) --- on spark 0x00 摘要 0x01 Spark相关知识 1.1 为什么整合 Spark 1.2 Spark 简单架构 1.3 Pyspark 原理 1.3.1 架构修改 1.3.2 Driver端 1.3.3 Executor端 1.3.4 流程 0x02 机器学习 on Spark 2.1 机器学习的特点 2.2 机器学习…
[源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator 目录 [源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator 0x00 摘要 0x01 背景知识 1.1 Kubernetes 1.2 容器作为调度单元 1.3 Kubeflow 1.4 Tensorflow on Kubeflow 1.5 Operator 1.6 TF-Operator 0x02 TensorFlow 分布…
[源码解析] 深度学习分布式训练框架 horovod (19) --- kubeflow MPI-operator 目录 [源码解析] 深度学习分布式训练框架 horovod (19) --- kubeflow MPI-operator 0x00 摘要 0x01 背景知识 1.1 MPI 1.2 Open-MPI 1.3 MPI Operator 0x02 设计思路 2.1 架构图 2.2 角色 2.3 主要过程 2.4 CRD 的定义 2.5 创建 2.6 终止 0x03 实现 3.1 K8S…
[源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer 目录 [源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer 0x00 摘要 0x01 背景概念 1.1 深度学习框架 1.2 Tensorflow Optimizer 0x02 总体架构 2.1 总体思路 3.2 总体调用关系 0x04 TensorFlow 1.x 4.1 _DistributedOptimizer 4.2 c…
[源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 目录 [源码解析] 深度学习分布式训练框架 horovod (12) --- 弹性训练总体架构 0x00 摘要 0x01 总述 1.1 问题点 1.1 角色 1.2 容错机制 1.4 监控机制 1.5 官方架构图 0x02 示例代码 2.1 python代码 2.2 脚本执行 0x03 逻辑流程 3.1 逻辑流程 3.2 入口点 3.3 主逻辑 3.4 出错处理 0xEE 个人信息 0xFF 参考 0x00…
[源码解析] 深度学习分布式训练框架 horovod (14) --- 弹性训练发现节点 & State 目录 [源码解析] 深度学习分布式训练框架 horovod (14) --- 弹性训练发现节点 & State 0x00 摘要 0x01 设计点 0x02 发现机制 2.1 发现脚本 2.2 HostManager 2.2.1 order_available_hosts 2.3 配置 0x03 如何调用 3.1 无限循环线程 3.1.1 定时探寻 3.1.2 通知变化 3.2 如何通知…
[源码解析] 深度学习分布式训练框架 horovod (15) --- 广播 & 通知 目录 [源码解析] 深度学习分布式训练框架 horovod (15) --- 广播 & 通知 0x00 摘要 0x01 问题 1.1 HorovodInternalError 1.2 HostsUpdateInterrupt 0x02 广播机制 2.1 广播实现 2.1.1 TensorFlowKerasState 2.1.2 广播模型 2.1.3 广播变量 2.1.4 广播对象 2.1.5 HVD C…
[源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Worker生命周期 目录 [源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Worker生命周期 0x00 摘要 0x01 Worker 是什么 1.1 角色 1.2 职责 1.3 组网机制 1.3.1 通信环 1.3.2 弹性构建 1.3.2.1 Driver 监控 1.3.2.2 Driver 重新构建 0x02 总体生命流程 0x03 配置过程 0x04 启动过程 4.1 总…
[源码解析] 深度学习分布式训练框架 horovod (17) --- 弹性训练之容错 目录 [源码解析] 深度学习分布式训练框架 horovod (17) --- 弹性训练之容错 0x00 摘要 0x01总体思路 0x02 抛出异常 2.1 示例代码 2.2 HorovodInternalError 2.3 HostsUpdatedInterrupt 2.4 总结 0x03 处理异常 3.1 总体逻辑 3.2 恢复 3.3 重置 3.3.1 reset 3.3.2 _HorovodBasics…
[源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 目录 [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 0x00 摘要 0x01 总论 0x02 Sampler 2.1 PyTorch Distributed Optimizer 2.1.1 定义 2.1.2 问题点 2.2 ElasticSampler 2.2.1 定义 2.2.2 弹性方案 2.2.2.1 常规流程 2.2.2.2 异常处理 2.2.1 如何使用 2…
[源码解析] 深度学习分布式训练框架 horovod (20) --- Elastic Training Operator 目录 [源码解析] 深度学习分布式训练框架 horovod (20) --- Elastic Training Operator 0x00 摘要 0x01 背景知识 1.1 已有弹性能力 1.2 mpi-operator 的缺点 0x02 总体架构 2.1 资源创建 2.2 角色 2.3 程序主流程 0x03 入口 3.1 创建 3.2 设置 0x04 TrainingJo…
[源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver 0x00 摘要 0x01 引子 0x02 总体架构 2.1 get_local_interfaces 2.2 _driver_fn 2.3 获取路由接口 2.3.1 probe逻辑 2.3.2 等待函数 0x03 基础网络服务 3.1 继承关系 3.2 network.BasicServic…
[源码解析] 深度学习分布式训练框架 horovod (9) --- 启动 on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (9) --- 启动 on spark 0x00 摘要 0x01 总体架构图 0x02 第一阶段 :Horovod 启动 2.1 Driver服务 :SparkDriverService 2.2 启动spark task : _make_spark_thread 2.3 等待 spark task 启动结束 2.3.1 _notify_and_…
[源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark 目录 [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark 0x00 摘要 0x01 回顾 1.1 总体序列图 1.2 总体逻辑 1.3 问题 0x02 第四阶段 : 启动 Job 2.1 _launch_job 2.2 获取路由信息 2.3 run_controller 0x03 MPI 实验 3.1 问题点 3.2 名词解释 3.2.1 orterun…
[源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案 目录 [源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案 0x00 摘要 0x01 回顾 1.1 总体序列图 1.2 总体逻辑 0x02 第四阶段 : 启动 Job 2.1 GLOO VS MPI 2.1.1 MPI 麻烦之处 2.1.2 Gloo关键点 2.2 回顾启动过程 2.3 _launch_job 2.3 获取路…
[源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver 0x00 摘要 0x01 角色 1.1 角色设定 1.2 职责 0x02 调用部分 2.1 _run 2.2 _run_elastic 2.3 gloo_run_elastic 2.4 get_common_interfaces 2.5 获取异地网卡信息 2.6 launch_gloo_elast…
[源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行 目录 [源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行 0x00 摘要 0x01 前文回顾 0x02 初始化 2.1 全局变量 2.2 初始化代码 0x03 切分样例 3.1 注释 3.2 切分情况 3.3 切分策略 3.4 实验 0x04 起始状态 4.1 GPU 状况 4.2 符号说明 4.3 初始分组 0x05 Tensor model-parallel 5.1 分组…
[源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 目录 [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 0x00 摘要 0x01 背景 0x02 论文 2.1 引论 2.2 背景 2.3 流水线权重问题 2.3.1 问题1 2.3.2 问题2 2.3.3 问题3 2.4 PipeDream-2BW 系统设计 2.4.1 GPipe 2.4.2 Double-Buffered Weight Updates (…
[源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要 0x01 启动 1.1 分布式启动 1.2 构造基础 1.2.1 获取模型 1.2.2 获取数据集 1.2.3 步进函数 1.2.3.1 广播数据 0x02 Pretrain 0x03 初始化 3.1 initialize_megatron 3.2 初始化分布式环境 3.3 初始化进程组全局变量 0x04 设置模型 4.1…
[源码解析] TensorFlow 之 分布式变量 目录 [源码解析] TensorFlow 之 分布式变量 1. MirroredVariable 1.1 定义 1.2 相关类 1.2.1 类体系 1.2.2 DistributedValues 定义 使用 1.2.3 DistributedDelegate 1.2.4 PerReplica 1.2.5 Mirrored 1.2.6 Policy VariablePolicy OnReadPolicy OnWritePolicy values_…
本文主要基于MXNet1.6.0版本,对Gluon接口的分布式训练过程进行简要分析. 众所周知,KVStore负责MXNet分布式训练过程中参数的同步,那么它究竟是如何应用在训练中的呢?下面我们将从Gluon.Trainer这个接口入手,逐步分析分布式训练的梯度交换以及参数同步过程.下面这段代码摘自python/mxnet/gluno/trainer.py文件,相较于源代码删除了一些多余的信息(如某些判断.注释等),以便让我们更好地专注于通信过程. 代码中的step函数是进行梯度交换以及参数更新…
[源码解析] TensorFlow 分布式之 MirroredStrategy 目录 [源码解析] TensorFlow 分布式之 MirroredStrategy 1. 设计&思路 1.1 主要逻辑 1.2 使用 1.3 分析思路 2. 定义 2.1 MirroredStrategy 2.2 MirroredExtended 3. 初始化 3.1 初始化多worker 3.1.1 MultiWorkerMirroredStrategy 3.1.2 CollectiveAllReduceExte…
[源码解析] TensorFlow 分布式之 ParameterServerStrategy V1 目录 [源码解析] TensorFlow 分布式之 ParameterServerStrategy V1 1. 思路 1.1 总体逻辑 1.2 使用 1.3 定义 2. ParameterServerStrategyExtended 2.1 初始化 2.2 分配设备 2.2.1 replica_device_setter 2.2.2 _RoundRobinStrategy 2.2.3 _Repli…
[源码解析] TensorFlow 分布式之 ParameterServerStrategy V2 目录 [源码解析] TensorFlow 分布式之 ParameterServerStrategy V2 1. 如何使用 1.1 训练方法 1.2 集群 1.3 使用 Model.fit API 进行训练 1.4 使用自定义循环进行训练 1.5 建立集群 2. 初始化 2.1 用例 2.2 集群设置 2.2.1 设置 "TF_CONFIG" 环境变量 2.2.2 使用二进制文件 2.3…