[源码解析] PyTorch 如何使用GPU】的更多相关文章

[源码解析] PyTorch 如何使用GPU 目录 [源码解析] PyTorch 如何使用GPU 0x00 摘要 0x01 问题 0x02 移动模型到GPU 2.1 cuda 操作 2.2 Module 2.3 移动 2.3.1 示例 2.3.2 操作 2.3.3 _apply 方法 2.4 小结 0x03 在GPU之上调用函数 3.1 CUDA编程模型基础 3.1.1 异构模型 3.1.2 并行思想 3.1.3 处理流程 3.2 函数 3.2.1 核函数 3.2.2 PyTorch 样例 3.…
[源码解析] PyTorch 分布式(2) ----- DataParallel(上) 目录 [源码解析] PyTorch 分布式(2) ----- DataParallel(上) 0x00 摘要 0x01 综述 1.1 从流程上看 1.2 从模式角度看 1.3 从操作系统角度看 1.4 低效率 0x02 综述 2.1 示例 2.2 相关知识 0x03 定义 3.1 定义 3.2 负载均衡 0x04 前向传播 4.1 总述 4.2 分发(输入) 4.2.1 scatter_kwargs 4.2.…
[源码解析] PyTorch 分布式(3) ----- DataParallel(下) 目录 [源码解析] PyTorch 分布式(3) ----- DataParallel(下) 0x00 摘要 0x01 前向操作 1.1 并行 1.2 Gather 1.2.1 Python世界 1.2.2 C++世界 0x02 计算损失 0x03 后向传播 3.1 分发梯度 3.1.1 Gather.backward 3.1.2 Scatter 3.1.3 C++ 3.2 并行后向传播 3.3 归并梯度 3…
[源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampler 目录 [源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampler 0x00 摘要 0x01 数据加载 1.1 加速途径 1.2 并行处理 1.3 流水线 1.4 GPU 0x02 PyTorch分布式加载 2.1 DDP 2.2 分布式加载 0x03 DistributedSampler 3.1 初始化 3.2 迭代方法 3.3 shuffle数据集 3.3…
[源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 目录 [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 0x00 摘要 0x01 前情回顾 0x02 DataLoader 2.1 初始化 2.2 关键函数 2.3 单进程加载 2.3.1 区分生成 2.3.2 迭代器基类 2.3.3 单进程迭代器 2.3.4 获取样本 2.4 多进程加载 2.4.1 总体逻辑 2.4.2 初始化 2.4.3 业务重置 2.4.4 获取 inde…
[源码解析] PyTorch 流水线并行实现 (1)--基础知识 目录 [源码解析] PyTorch 流水线并行实现 (1)--基础知识 0x00 摘要 0x01 历史 1.1 GPipe 1.2 torchgpipe 1.3 fairscale 1.4 PyTorch 1.5 基础版本 0x02 基础知识 2.1 流水线并行 2.2 Checkpointing 2.2.1 基本概念 2.2.2 使用 2.2.3 实现概述 2.3 微批次的数目 2.4 检查重计算 0x03 使用 3.1 示例…
[源码解析] PyTorch 流水线并行实现 (2)--如何划分模型 目录 [源码解析] PyTorch 流水线并行实现 (2)--如何划分模型 0x00 摘要 0x01 问题 0x01 自动平衡 1.1 Automatic Balancing 1.2 基础函数/函数 1.2.1 Batch 1.2.2 layerwise_sandbox 1.2.3 detach 1.3 据计算时间来平衡 1.4 据内存大小来平衡 1.5 分割算法 0x02 模型划分 2.1 调用 2.2 GPipe构建 2.…
[源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 目录 [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 0x00 摘要 0x01 分割小批次 1.1 使用 1.2 PyTorch 基础 1.2.1 chunk 1.2.2 cat 1.3 分割 & 聚合 1.4 剖析 0x02 运行 2.1 Stream 2.2 Task 2.3 Worker 2.4 生成 worker 2.5 使用 2.5.1 何时生成worker 2.5.2 剖析 2…
[源码解析] PyTorch 流水线并行实现 (4)--前向计算 目录 [源码解析] PyTorch 流水线并行实现 (4)--前向计算 0x00 摘要 0x01 论文 1.1 引论 1.1.1 数据并行 1.1.2 模型并行 1.2 模型定义 1.3 GPipe计算图 1.4 设备执行顺序(Devicewise Execution Order) 1.5 PyTorch 实现难点 1.6 总结 0x02 执行顺序 2.1 论文内容 2.2 解析 2.3 代码 2.4 使用 0xFF 参考 0x0…
[源码解析] PyTorch 流水线并行实现 (5)--计算依赖 目录 [源码解析] PyTorch 流水线并行实现 (5)--计算依赖 0x00 摘要 0x01 前文回顾 0x02 计算依赖 0x03 反向传播依赖 2.1 解析 2.2 基础功能 2.2.1 Function 2.2.2 Fork 2.2.3 Join 2.2.4 Phony 2.2.5 detach 2.3 使用 0x03 正向传播依赖 3.1 分割模型 3.2 建立依赖 0x04 总结 0xFF 参考 0x00 摘要 前几…
[源码解析] PyTorch 流水线并行实现 (6)--并行计算 目录 [源码解析] PyTorch 流水线并行实现 (6)--并行计算 0x00 摘要 0x01 总体架构 1.1 使用 1.2 前向传播 1.3 Pipeline 类 1.3.1 构建依赖 1.3.2 Queue 1.3.3 计算 0x02 并行拷贝和计算 2.1 GPU并行操作 2.2 PyTorch 2.3 Stream 封装 2.3.1 PyTorch 样例 2.3.2 生成/获取 2.3.3 记录 2.3.4 等待 2.…
[源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 目录 [源码解析]PyTorch如何实现前向传播(1) --- 基础类(上) 0x00 摘要 0x01 总体逻辑 0x02 废弃类 2.1 Variable 2.2 Function 0x03 Tensor 3.1 定义 in python 3.2 查找定义 3.2.1 Tensor 3.2.2 _TensorBase 3.3 转换 3.3.1 Python 导入 3.3.2 C++ 导出 & 初始化 3.3.2.1 共享库…
[源码解析] Pytorch 如何实现后向传播 (2)---- 引擎静态结构 目录 [源码解析] Pytorch 如何实现后向传播 (2)---- 引擎静态结构 0x00 摘要 0x01 Engine 0x02 GraphRoot 2.1 构建 2.2 作用 0x03 GraphTask 3.1 定义 3.2 outstanding_tasks_ 3.2.1 任务结束 3.2.2 增加 3.2.3 递减 3.3 keep_graph 3.4 dependencies_ 3.5 not_ready…
[源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑 目录 [源码解析] Pytorch 如何实现后向传播 (3)---- 引擎动态逻辑 0x00 摘要 0x01 前文回顾 0x02 引擎总体架构 0x03 启动引擎 3.1 初始化local ready queue 3.2 构建GraphTask 3.3 构建根节点 3.4 计算最小拓扑 3.5 计算依赖 3.6 初始化GraphTask ExecInfo 3.7 配置工作线程输入 3.8 开始运行 3.9 配置设备和R…
[源码解析] PyTorch 如何实现后向传播 (4)---- 具体算法 目录 [源码解析] PyTorch 如何实现后向传播 (4)---- 具体算法 0x00 摘要 0x01 工作线程主体 1.1 线程主体代码 1.2 使用 Ready Queue 0x02 反向计算总体逻辑 0x03 准备工作 0x04 核心逻辑 0x05 准备下一步工作 5.1 依据依赖排查节点 5.2 处理这个节点 0x06 扫尾操作 6.1 判断结束 6.2 后续&通知 6.2.1 后续操作 6.2.2 通知主线程…
[源码解析] 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 分布式(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 分布式(5) ------ DistributedDataParallel 总述&如何使用 目录 [源码解析] PyTorch 分布式(5) ------ DistributedDataParallel 总述&如何使用 0x00 摘要 0x01 数据并行 0x02 DDP 运行逻辑 0x03 VS DataParallel 3.1 本质区别 3.2 实现区别 0x04 使用 4.1 基本示例 4.1.1 设置进程组 4.1.2 简单模型 4.1.3 处理速度偏…
[源码解析] PyTorch分布式(6) ---DistributedDataParallel -- 初始化&store 目录 [源码解析] PyTorch分布式(6) ---DistributedDataParallel -- 初始化&store 0x00 摘要 0x01 回顾 1.1 基本概念 1.2 初始化进程组 0x02 初始化 2.1 初始化方法 2.2 init_method VS store 2.3 rendezvous 2.4 小结 0x03 Store 3.1 _rend…
[源码解析] PyTorch 分布式(7) ----- DistributedDataParallel 之进程组 目录 [源码解析] PyTorch 分布式(7) ----- DistributedDataParallel 之进程组 0x00 摘要 0x01 回顾 1.1 基础概念 1.2 初始化进程组 0x02 概念与设计 2.1 功能 2.2 本质 0x03 使用 0x04 构建 4.1 Python 世界 4.1.1 rendezvous 4.1.2 _new_process_group_…
[源码解析] PyTorch 分布式(8) -------- DistributedDataParallel之论文篇 目录 [源码解析] PyTorch 分布式(8) -------- DistributedDataParallel之论文篇 0x00 摘要 0x01 原文摘要 0x02 引论 2.1 挑战 2.2 实现和评估 0x03 背景 3.1 PyTorch 3.2 数据并行 3.3 AllReduce 0x04 系统设计 4.1 API 4.2 梯度规约 4.2.1 A Naive So…
[源码解析] 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 分布式(10)------DistributedDataParallel之Reducer静态架构 目录 [源码解析] PyTorch 分布式(10)------DistributedDataParallel之Reducer静态架构 0x00 摘要 0x01 引论 1.1 调用 0x02 Reducer 定义 0x03 Bucket 3.1 设计 3.2 定义 3.2.1 BucketReplica有几个 3.2.2 关键 3.2.3 具体定义 3.3 设置 0x03…
[源码解析] PyTorch 分布式(13) ----- DistributedDataParallel 之 反向传播 目录 [源码解析] PyTorch 分布式(13) ----- DistributedDataParallel 之 反向传播 0x00 摘要 0x01 回顾 1.1 前文回顾 1.2 总体逻辑 0x02 从Hook开始 2.1 如何注册hook 2.1.1 AutogradMeta 2.1.2 Node 2.1.3 AccumulateGrad 2.2 构造函数 2.2.1 g…
[源码解析] 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…
[源码解析] PyTtorch 分布式 Autograd (6) ---- 引擎(下) 目录 [源码解析] PyTtorch 分布式 Autograd (6) ---- 引擎(下) 0x00 摘要 0x01 回顾 0x02 执行GraphTask 2.1 runEngineAndAccumulateGradients 2.2 execute_graph_task_until_ready_queue_empty 2.3 evaluate_function 2.4 globalCpuThread 2…
[源码解析] 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分布式优化器(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 分布式(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 分布式(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 前向…