一.前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat的源码 二.协调者启动过程 主要就是在启动类中通过如下代码来启动 netty nettyService.start() 三.参与者启动过程 1.参与者启动时序图 参与者在启动过程中,主要做了如下4件事: (1)保存SpringContext上下文 (2)通过加载spi,来使用用户自定义配置 (3)启动Netty客户端,与txManager进行连接,并且维持心跳. (4)启动事务补偿任务,建表,定时补偿. (…
一.前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat启动过程的源码 主要包括: 事务协调者启动过程 事务参与者启动过程 二.协调者启动过程 主要就是在启动类中通过如下代码来启动 netty 服务端 nettyService.start() 三.参与者启动过程概览 参与者在启动过程中,主要做了如下5件事: (1)保存SpringContext上下文 (2)通过加载spi,来使用用户自定义配置(序列化方式.日志存储方式) (3)启动Netty客户端,与txMan…
一.前言 前面两节,我们已经将raincat的demo工程启动,并简单分析了下事务协调者与事务参与者的启动过程. 这一节,我们来看下raincat的事务提交过程. 二.事务提交过程概览 1.二阶段对应图 raincat是一个二阶段分布式事务处理框架,在事务的提交过程中,对应的二阶段如下: 第一阶段(准备阶段) 记录事务信息,准备提交. 第二阶段(提交阶段) 协调者发送提交通知,各参与者分别提交事务. 2.事务提交过程概览 整个事务的提交过程,如下: (1)切面开始,拦截 @TxTransacti…
一.前言 关于2PC的理论知识请见:分布式_理论_03_2PC 这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验. 二.源码 源码请见: https://github.com/yu199195/Raincat 相关视频 http://www.iqiyi.com/u/1243078745/v 三.接入步骤 1.启动 TxManagerApplication 此工程为分布式事务的协调者 配置txManaager, 修改application.properties中你自己的r…
通过前面的学习我们已经掌握了Volley的基本用法,没看过的建议大家先去阅读我的博文[安卓网络请求开源框架Volley源码解析系列]初识Volley及其基本用法.如StringRequest用来请求一段文本信息,JsonRequest(JsonObjectRequest.JsonArrayRequest)用于请求一条JSON格式的数据,ImageRequest则是用于请求网络上的图片资源.但是我们知道在网络上传输的轻量级数据还包括另外一种即XML.但是Volley中目前还没提供用于请求XML格式…
在安卓中当涉及到网络请求时,我们通常使用的是HttpUrlConnection与HttpClient这两个类,网络请求一般是比较耗时,因此我们通常会在一个线程中来使用,但是在线程中使用这两个类时就要考虑到如何将处理结果传出去,通常的解决方法就是采用接口回调技术来解决,代码如下: public static void doGetRequest(final String uri,final HttpCallbackListener listener) throws IOException { new…
[源码解析] 并行分布式框架 Celery 之 Lamport 逻辑时钟 & Mingle 目录 [源码解析] 并行分布式框架 Celery 之 Lamport 逻辑时钟 & Mingle 0x00 摘要 0x01 逻辑时钟 1.1 来由 1.2 什么是逻辑时钟 1.3 为什么需要逻辑时钟 1.4 Lamport 逻辑时钟 0x02 Lamport 时钟 in Kombu 0x03 使用 clock 3.1 Kombu mailbox 3.2 Celery 应用 3.3 EventDisp…
[源码解析] 深度学习分布式训练框架 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 取一个适配层…
[源码解析] PyTorch 分布式(17) --- 结合DDP和分布式 RPC 框架 目录 [源码解析] PyTorch 分布式(17) --- 结合DDP和分布式 RPC 框架 0x00 摘要 0x00 综述 0x01 启动 0x03 支撑系统 3.1 功能 3.2 使用 3.2.1 混合模型 3.2.2 使用 3.3 定义 3.4 主要函数 0x04 HybridModel 0x05 训练 5.1 初始化 5.2 训练循环 0x06 比对 0xFF 参考 0x00 摘要 在前面的文章之中,…
[源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器 目录 [源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器 0x00 摘要 0x01 综述 0x02 基础网络 0x03 辅助函数 0x04 启动 4.1 启动方式 4.2 启动脚本 4.3 启动参数服务器 4.4 启动worker 4.5 建立参数服务器 0x05 TrainerNet 5.1 总体代码 5.2 生成参数服务器 5.3 建立rref 5.4 前向…
[源码解析] PyTorch 分布式(4)------分布式应用基础概念 目录 [源码解析] PyTorch 分布式(4)------分布式应用基础概念 0x00 摘要 0x01 基本概念 0x02 设计思路 2.1 通信需求 2.2 概念 0x03 设置 0x04 点对点通信 0x05 集合通信 0x06 分布式训练 0x07 Ring-Allreduce 0x08 高级主题 8.1 通信后端 8.1.1 后端种类 8.1.2 使用哪个后端? 8.1.3 Gloo 后端 8.1.4 MPI后端…
[源码解析] PyTorch分布式优化器(1)----基石篇 目录 [源码解析] PyTorch分布式优化器(1)----基石篇 0x00 摘要 0x01 从问题出发 1.1 示例 1.2 问题点 0x01 模型构造 1.1 Module 1.2 成员变量 1.3 _parameters 1.3.1 构建 1.3.2 归类 1.3.3 获取 1.4 Linear 1.4.1 使用 1.4.2 定义 1.4.3 解释 0x02 Optimizer 基类 2.1 初始化 2.2 添加待优化变量 2.…
[源码解析] PyTorch分布式优化器(3)---- 模型并行 目录 [源码解析] PyTorch分布式优化器(3)---- 模型并行 0x00 摘要 0x01 前文回顾 0x02 单机模型 2.1 基本用法 2.2 将模型并行应用到现有模块 2.3 问题与方案 2.3.1 目前状况 2.3.2 解决方案 2.4 通过流水线输入加速 0x03 分布式问题和方案 3.1 思路 3.2 PyTorch 的思路 3.2.1 四大天王 3.2.2 逻辑关系 0x04 PyTorch 分布式优化器 4.…
[源码解析] PyTorch 分布式(16) --- 使用异步执行实现批处理 RPC 目录 [源码解析] PyTorch 分布式(16) --- 使用异步执行实现批处理 RPC 0x00 摘要 0x01 前言 1.1 先决条件 1.2 基础知识 1.3 代码 0x02 启动 2.1 总体启动 2.2 启动参数服务器 0x03 参数服务器 0x04 Trainer 0x05 对比 0xFF 参考 0x00 摘要 在前面的文章之中,我们已经学习了PyTorch 分布式的基本模块,接下来我们通过几篇文…
[源码解析] PyTorch 分布式(18) --- 使用 RPC 的分布式管道并行 目录 [源码解析] PyTorch 分布式(18) --- 使用 RPC 的分布式管道并行 0x00 摘要 0x01 综述 1.1 先决条件 1.2 基础知识 0x02 启动 0x03 定义训练循环 0x04 将 ResNet50 模型分片拼接成一个模块 0x05 对 ResNet50 模型进行分区 0xFF 参考 0x00 摘要 在前面的文章之中,我们已经学习了PyTorch 分布式的基本模块,接下来我们通过…
[源码解析] PyTorch 分布式之弹性训练(7)---节点变化 目录 [源码解析] PyTorch 分布式之弹性训练(7)---节点变化 0x00 摘要 0x01 变化方式 1.1 Scale-down 1.2 Scale-up 0x02 节点加入 2.1 新节点加入 2.2 处理 Join 操作 2.2.1 run处理 2.2.2 Join操作 2.2.3 等待业务操作 2.3 Agent 处理 2.3.1 检查等待列表 2.3.3 重启worker组 2.3.3.1 _stop_work…
[源码解析] 模型并行分布式训练 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…
[源码解析] 模型并行分布式训练 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 (…
[源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 目录 [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 1. StrategyBase 1.1 初始化 1.2 使用 1.3 CTL 1.4 Scope 1.4.1 使用 1.4.2 功能 1.4.3 Scope 范围 1.5 StrategyExtendedV2 1.5.1 locality 1.5.2 如何更新 1.6 继承关系 2. 读取数据 2.1 直…
[源码解析] 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…
[源码解析] 并行分布式任务队列 Celery 之 消费动态流程 目录 [源码解析] 并行分布式任务队列 Celery 之 消费动态流程 0x00 摘要 0x01 来由 0x02 逻辑 in kombu 2.1 消息循环 -- hub in kombu 2.2 Broker抽象 -- Transport in kombu 2.3 执行引擎 --- MultiChannelPoller in kombu 2.4 解读消息 -- Channel in kombu 2.5 开始回调 -- Transp…
[源码解析] PyTorch 分布式(1)------历史和概述 目录 [源码解析] PyTorch 分布式(1)------历史和概述 0x00 摘要 0x01 PyTorch分布式的历史 1.1 Multiprocessing 1.2 THD 底层库 1.3 torch.distributed 库 1.4 c10d库 1.5 RPC框架 1.6 弹性训练 1.7 流水线训练 0x02 分布式概述 2.1 引论 2.1.1 torch.distributed 包 2.1.2 知识链接 2.2…
[源码解析] PyTorch 分布式(9) ----- DistributedDataParallel 之初始化 目录 [源码解析] PyTorch 分布式(9) ----- DistributedDataParallel 之初始化 0x00 摘要 0x01 综述 1.1 数据并行 1.2 DDP架构 1.2.1 分布式数据并行 1.2.2 进程 1.3 DDP 总体实现 0x02 初始化 2.1 __init__ 2.2 构建参数 2.2.1 _build_params_for_reducer…
[源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 目录 [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 0x00 摘要 0x01 引论 1.1 调用 1.2 参数说明 0x02 Reducer 初始化 2.1 构造函数 2.2 初始化桶 2.3 初始化视图 2.3.1 BucketReplica成员变量 2.3.2 调用 2.4 初始化…
[源码解析] PyTorch 分布式 Autograd (1) ---- 设计 目录 [源码解析] PyTorch 分布式 Autograd (1) ---- 设计 0x00 摘要 0x01 分布式RPC框架 1.1 RPC 框架 1.2 PyTorch RPC 四大支柱 1.3 RRef 1.3.1 假设条件 1.3.2 同步调用 1.3.2 异步调用 0x02 示例 0x03 前向传播期间的 Autograd 记录 0x04 分布式 Autograd 上下文 0x05 分布式反向传播 5.1…
[源码解析] PyTorch 分布式 Autograd (5) ---- 引擎(上) 目录 [源码解析] PyTorch 分布式 Autograd (5) ---- 引擎(上) 0x00 摘要 0x01 支撑系统 1.1 引擎入口 1.2 SendRpcBackward 1.2.1 剖析 1.2.2 定义 1.2.3 构建 1.2.4 grads_ 0x02 定义 2.1 定义 2.2 单例 2.3 重要注释 2.3.1 成员变量 2.3.2 构建 2.3.3 GPU to CPU contin…
[源码解析] PyTorch分布式优化器(2)----数据并行优化器 目录 [源码解析] PyTorch分布式优化器(2)----数据并行优化器 0x00 摘要 0x01 前文回顾 0x02 DP 之中的优化器 2.1 流程 2.2 使用 0x03 DDP 之中的优化器 3.1 流程 3.2 优化器状态 3.3 使用 0x04 Horovod 的优化器 4.1 hook 同步梯度 4.1.1 注册 hooks 4.1.2 归并梯度 4.1.2.1 MPI 函数 4.1.2.2 原理图 4.2 s…
[源码解析] PyTorch 分布式(14) --使用 Distributed Autograd 和 Distributed Optimizer 目录 [源码解析] PyTorch 分布式(14) --使用 Distributed Autograd 和 Distributed Optimizer 0x00 摘要 0x01 说明 0x02 启动 0x03 Trainer 0x04 模型 4.1 组件 4.1.1 参考代码 4.1.2 分布式修改 4.2 RNN 模型 4.3 分布式优化器 4.4…
[源码解析] PyTorch 分布式之弹性训练(1) --- 总体思路 目录 [源码解析] PyTorch 分布式之弹性训练(1) --- 总体思路 0x00 摘要 0x01 痛点 0x02 难点 0x03 TorchElastic 3.1 历史 3.1.1 PyTorch 1.7 3.1.2 PyTorch 1.9 3.2 设计理念 3.2.1 基本功能 3.2.2 新设计概述 3.2.3 bare-bones 3.3 小结 0x04 问题 4.1 VS Horovod 4.2 TE 问题 0…