pytorch深度学习实战lesson32

news2024/12/28 6:04:59

第三十二课 分布式训练

       这个是15年的时候沐神在 CMU 装的一个小机群,里面有30台机器,各机群有大概60块 GPU , 60块 GPU一共花了三四万美金的样子,就是大概20万人民币。沐神表示最亏的是当年他们跑了太多深度学习的实验,没有去挖矿,以至于错过了一个亿。少写点paper的话现在也就财务自由了。。。。

       我们给大家看一看。就是说在分布式的情况下,从之前的单机多卡拓展到分布式是什么样子,其实本质上是没任何区别的。首先假设有个样本在这个地方,有四块 GPU , 我们这还是抽象出了一个 key value store 的东西在里面用来存我的参数的。首先分布式第一个不同是说我的数据可能是放在一个分布式的文件系统上,而不是放在机器本地的硬盘上面。所以就是说所有的机器都能够去读取这个样本,这个样本一般是被分开存在不同的磁盘上面。第二个是通常来说有多台机器,每台机器里面有多个 GPU 那么这个机器就叫做 worker 也就是工作站。这里我们假设两台机器,然后有两个GPU每台机要两个GPU那么接下来就是说存参数的地方,通常你来说会放在多个server 上面。那么其实在计算上来说根本就没区别。

如左图所示:

       首先假设一台机器有四个 GPU 那么 GPU 之间比如说用 pcie协议交换的话,那么GPU 到GPU的通讯其实不错的。这个地方我们是63 GB per second。那么如果要 GPU 去 CPU 的话,也是要通过一个 pcie 到 CPU 到主内存,这里通常是一根线在这个地方。所以 GPU 到 CPU 的话带宽其实不大,就16 GB 。然后如果要去到一个别的机器的话,那就通过一个交换机。那么比如说我用10个 gbit 的话,那就是1.25 gb/s的带宽,你能看到这里的问题是说 GPU 到 GPU 的通讯是很快的。然后 GPU 到 CPU 通讯会降个5倍或者10倍;然后跨机器的话,通讯就会降得更多。所以就是说你需要去意识到这里面是有个层次化的结构的。所以尽量本地多通讯,实在不行,可以去内存走一走,尽量的少在机器之间做通讯,这就是整个性能的关键。

如右图所示:可以采用这种架构进行本地通讯。

       首先我们样本读进来,就假设两台机器的话,如果你的样本批量大小是100的话,那每台机器拿到是50。

       然后接下来就是说我每台机器拿到50,每个卡拿到的是25,我就再拿就是说先复制到每台机器的内存内存里面,再把它分两块复制到你的 GPU 内存上面。

       接下来就是说你的参数服务器里面,就是说那每个机器要去拿到你的新的那个模型,就从网络那边拿过来。

       然后就是说模型是被复制到每个 GPU 上。所以就不能把这个 GPU 当做每一个实际样例,不能每个 GPU 去要一个模型过来,因为你就要了两次一样的模型。所以具体做法是说假设还有一个 server 跑在内存里面。那么每拿过来一个东西之后,把东西拿到主内存,再复制到GPU 上。

       每个 GPU 算自己的梯度。

       先在主内存里面把GPU的梯度加起来,就跟之前实现单机多卡是一样的,因为在本地做 all reduce 就是把每个GPU的梯度给加起来。

把梯度加起来之后再发送出去

       之后的话参数服务器就是可以做自己的更新。更新完之后就是可以进行下一轮的计算了。所以可以看到本地GPU 之间的通讯还可以,然后GPU的内存也还不错,所以我们尽量在本地做一下聚合,把梯度加起来。

       上图可见:每个 epoch 的耗时或者每秒钟能处理的样本数是随着GPU的批量大小而增加的。反过来讲增大批量大小会导致你的训练的有效性变低,就是你的收敛会变慢,这样子你会需要更多的epoch来得达到你要的精度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言-const char*,char const*,char *const理解

By: Ailson Jack Date: 2022.12.04 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/150.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。…

传奇外网开服教程-GEE传奇外网全套架设教程

版本不同,所用的引擎和配置也会不同,但是架设方法都是大同小异,今天明杰给大家分享GEE引擎的外网架设教程。​ 需要准备的东西:DBC200版本,补丁,客户端,服务器,备案域名&#xff0c…

【Typora】Typora 新手入门参数配置记录

目录 写在前面 更改图片大小 更换高亮背景 更换主题 写在前面 最近发现一款记笔记的软件——Typora,极简清爽的外观一下子就把我给吸引住了,它支持Markdown 的格式记录,可以让笔记更加有条理、美观,至于 typora 的一些写作语法…

Android入门第43天-Activity与Activity间的互相传值

介绍 今天的课程会比较好玩,我们在之前的Service篇章中看到了一种putExtras和getExtras来进行activity与service间的传值。而恰恰这种传值其实也是Android里的通用传值法。它同样可以适用在activity与activity间传值。 Android中的传值 传单个值 传多个值 具体我…

Spring注解(简便地使用 Bean )

目录 0. 前置工作 1. 将 Bean 存储到容器 2. 对象注入&#xff08;对象装配&#xff09;【从容器中将对象读取出来】 0. 前置工作 创建Maven项目后&#xff0c;在pom.xml中添加Spring所必须的依赖。 <dependencies><dependency><groupId>org.springframe…

22个每个程序员都应该知道的 Git 命令

在这篇文章中&#xff0c;我写了一个快速学习 git 命令的备忘单。它将包括开发人员每天使用的命令&#xff0c;如 git add、git commit、git pull、git fetch&#xff0c;并共享其他有用的 git 命令。 我一直使用Git的一些命令&#xff0c;今天这个列表清单&#xff0c;希望也…

LC-6256. 将节点分成尽可能多的组(二分图判定+BFS)【周赛322】

6256. 将节点分成尽可能多的组 难度困难8 给你一个正整数 n &#xff0c;表示一个 无向 图中的节点数目&#xff0c;节点编号从 1 到 n 。 同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 双向 边。注意给定的图可能是不…

第4章 R语言编程基础——数据整理与预处理

目录 4.1 经济/金融数据库 4.1.1 金融数据与数据库 4.1.2 国外金融数据库概况 4.1.3 国内金融数据库概况 4.1.4 数据的主要内容 4.2 数据格式 4.3 数据的导入 4.3.1 从控制台上输入数据 4.3.2 上市公司财务报表信息读取 4.4 [数据的预处理] 4.1.1 时序数据的预处理 4.1.2…

[附源码]Python计算机毕业设计Django汽车租赁管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

WEB前端网页设计 HTML网页代码 基础参数(二)

html文件调用css文件 <link rel"stylesheet" type"text/css" href"css文件相对路径"/> 设置颜色 Style"color:green;" 设置字体大小 font-size:50px; 设置边框 border&#xff1a;groove&#xff1b; 设置长、宽 heigh…

【通信原理】数字基带传输的线路码型

数字基带传输的线路码型 简单介绍数字基带传输的线路码型的信号波形的特点&#xff0c;以及生成方法。注意观察频谱。文末附Matlab代码。 以下包括双极性NRZ、单极型NRZ、双极型RZ、单极型RZ、差分码&#xff0c;曼切斯特码/数字双相码、密勒码、CMI码、AMI码、HDB3码。 参数…

Spring中Bean的生命周期

先直接说出过程&#xff0c;再来演示具体的操作 过程 简化来说就是 1、首先是实例化Bean&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚末初始化的依赖时&#xff0c;容器就会调用doCreateBean()方法进行实例化&#xf…

Java多线程之:队列同步器AbstractQueuedSynchronizer原理剖析

Java多线程之&#xff1a;队列同步器AbstractQueuedSynchronizer原理剖析 文章目录Java多线程之&#xff1a;队列同步器AbstractQueuedSynchronizer原理剖析一、AQS的核心思想二、AQS中关键的内部结构一、Node内部类二、CLH队列三、同步状态 state四、Condition条件队列三、AQS…

houdini 之copy to points

将第一个输入中的几何图形复制到第二个输入的点上。 属性备注Source Group几何体来源Target Points要复制到的目标点集合Show Guide Geometry是否显示该操作预览流程Pack and Instance在复制之前将输入几何体打包到嵌入式打包图元中。这导致输入几何被每个副本共享&#xff08;…

跟着实例学Go语言(一)

本教程全面涵盖了Go语言基础的各个方面。一共80个例子&#xff0c;每个例子对应一个语言特性点&#xff0c;非常适合新人快速上手。 教程代码示例来自go by example&#xff0c;文字部分来自本人自己的理解。 本文是教程系列的第一部分&#xff0c;共计20个例子、约1万字。 目…

电子学会2021年3月青少年软件编程(图形化)等级考试试卷(四级)答案解析

目录 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题&#xff08;共4题&#xff0c;共50分&#xff09; 青少年软件编程&#xff08;图形化&a…

python与pycharm配置http服务

下载安装pycharm 下载pycharm 提取码&#xff1a;slgh 在任意自己工作的目录下创建两个文件夹&#xff0c;www文件夹及其目录下cgi-bin文件夹 自己的工作目录\www\cgi-bin 打开pycharm创建工程&#xff0c;选择www\cgi-bin目录 配置cgi&#xff0c;选择Run菜单&#xff0c;…

动漫制作技巧如何制作动漫视频

动漫制作技巧是很多新人想了解的问题&#xff0c;今天小编就来解答与大家分享一下动漫制作流程&#xff0c;为了帮助有兴趣的同学理解&#xff0c;大多数人会选择动漫培训机构&#xff0c;那么今天小编就带大家来看看动漫制作要掌握哪些技巧&#xff1f; 一、动漫作品首先完成…

MedNeRF:用于从单个X射线重建3D感知CT投影的医学神经辐射场

摘要 计算机断层扫描&#xff08;CT&#xff09;是一种有效的医学成像方式&#xff0c;广泛应用于临床医学领域&#xff0c;用于各种病理的诊断。多探测器CT成像技术的进步实现了额外的功能&#xff0c;包括生成薄层多平面横截面身体成像和3D重建。然而&#xff0c;这涉及患者暴…

R语言确定聚类的最佳簇数:3种聚类优化方法

确定数据集中最佳的簇数是分区聚类&#xff08;例如k均值聚类&#xff09;中的一个基本问题&#xff0c;它要求用户指定要生成的簇数k。 最近我们被客户要求撰写关于聚类的研究报告&#xff0c;包括一些图形和统计输出。 一个简单且流行的解决方案包括检查使用分层聚类生成的树…