深度学习500问——Chapter15:异构计算,GPU和框架选型(1)

news2024/9/28 10:00:54

文章目录

异构计算,GPU和框架选型指南

15.1 什么是异构计算

15.2 什么是GPU

15.3 GPU架构简介

15.3.1 如何通俗理解GPU的架构

15.3.2 CUDA的核心是什么

15.3.3 为什么要使用GPU


异构计算,GPU和框架选型指南

深度学习训练和推理的过程中,会涉及到大量的向量(vector),矩阵(matrix)和张量(tensor)操作,通常需要大量的浮点计算,包括高精度(在训练的时候)和低精度(在推理和部署的时候)。

GPU,作为一种通用可编程的加速器,最初设计是用来进行图形处理和渲染功能,但是从2007年开始,英伟达(NVIDIA)公司提出了第一个可编程通用计算平台(GPU),同时提出了CUDA框架,从此开启了GPU用于通用计算的新纪元。此后,不计其数的科研人员和开发者,对各种不同类型的算法用CUDA进行(部分)改写,从而达到几倍到数百倍的加速效果。尤其是在机器学习,特别是深度学习的浪潮来临后,GPU加速已经是各类工具实现的基本底层架构之一。

本章里,会简单介绍GPU的基本架构,性能指标,框架选择等等和深度学习相关的内容。

15.1 什么是异构计算

异构计算是基于一个更加朴素的概念,“异构现象”,也就是不同计算平台之间,由于硬件结构(包括计算核心和内存),指令集和底层软件实现等方面的不同而有着不同的特性。异构计算就是使用结合了两个或者多个不同的计算平台,并进行协同运算。

比如,比较常见的,在深度学习和机器学习中已经比较成熟的架构:CPU和GPU的异构计算;此外还有比较新的Google推出的协处理器(TPU),根据目的而定制的ASIC,可编程的FPGA等也都是现在在异构计算中使用比较多的协处理器。而本章会着重介绍和深度学习共同繁荣的图形加算算器,也就是常说的GPU。

15.2 什么是GPU

GPU,就如名字所包含的内容,原本开发的目的是为了进行计算机图形渲染,而减少对于CPU的负载。由于图像的原始特性,也就是像素间的独立性,所以GPU在设计的时候就遵从了从“单指令流多数据流(SIMD)”架构,使得同一个指令(比如图像的某种变换),可以同时在多一个像素点上进行计算,从而得到比较大的吞吐量,才能使得计算机可以实时渲染比较复杂的2D/3D场景。

在最初的应用场景里,GPU并不是作为一种通用计算平台实现的,直到2007年左右,一家伟大的公司将GPU带到通用计算的世界里,使得其可以在相对比较友好的编程环境(CUDA/OpenCL)里加速通用程序成了可能。从此之后,GPU通用计算,也就是GPU就成了学界和工业界都频繁使用的技术,在深度学习爆发的年代里,GPU成了推动这股浪潮非常重要的力量。

15.3 GPU架构简介

GPU,图形显示芯片作为不同于CPU的设计逻辑和应用场景,有着非常不同的架构,本部分将简单介绍GPU究竟是如何架构,其中的计算核心有哪些特性。

15.3.1 如何通俗理解GPU的架构

首先,下图简单地展示了几个GPU不同于CPU的特性:

  • 计算核心:图中的CPU,i7-5960,Intel的第五代Broadwell架构,其中包括了8个CPU核心(支持16线程),也就是理论上可以有16个不同的运算同时进行。除了8个核心计算单元,大部分的芯片面积是被3级缓存,内存和控制电路占据了。同样的,来自Nvidia的GTX980GPU,在差不多的芯片面积上,大部分是计算单元,16个SM,也就是流处理单元,每个流处理单元中包含着128个CUDA计算核心,所以总共来说,有2048个GPU运算单元,相应地这颗GPU理论上可以在一个时钟周期内可以进行2048次单精度运算。

  • 计算核心频率:时钟频率,代表每一秒中内能进行同步脉冲次数,也是从一个侧面反映一个计算元件的工作速度。下图中对比了个别早期产品,比如Intel 的 x5650 和几款 Nvidia的GPU。可以看出核心频率而言,CPU要远高于GPU。对于CPU而言,在不考虑能源消耗和制成工艺限制的情况下,追求更高的主频。但,在GPU的设计中,采用了多核心设计,即使是提高一些频率,其实对于总体性能影响不会特别大。当然,其中还有能耗方面的考虑,避免发热过高,也进行了权衡。还有一个可能的原因是,在一个流处理器中的每个核心(CUDA核心)的运行共享非常有限的缓存和寄存器,由于共享内存也是有性能极限的,所以即使每个GPU核心频率提高,如果被缓存等拖累也是无法展现出高性能的。

  • 内存架构:GPU的多层内存架构包括全局内存(也就是通常意义上大部分比较关注的内存,在若干到16GB之间,截止到当前最新),2级缓存,和芯片上的存储(包括寄存器,和1级缓存共用的共享内存,只读/纹理缓存和常量缓存)。通常来说,最高速的共享内存/缓存和寄存器都是非常有限的,比如在Tesla的K20中,只有48K的缓存可以作为共享内存或者1级缓存使用,所以在很多用GPU加速算法实现的过程中,有效地利用这些高速缓存是使得性能提升的非常重要的方面。

15.3.2 CUDA的核心是什么

上面提到在一个GPU芯片里,会有几千个CUDA核心,被分布在多个流处理单元(SM)中,比如上面提到早期的GTX980中的16个SM中各包含了128个CUDA核心。

如下图所示,作为GPU架构中的最小单元,其实它的设计和CPU有着非常类似的结构,其中包括了一个浮点运算单元和整型运算单元,和控制单元。同一个流处理器中,所有的CUDA核心将同步执行同一个指令,但是作用于不同的数据点上。

一般来说,更加多的CUDA核心意味着有更多的并行执行单元,所以也就可以片面地以为是有更加高的性能。但是,其实这个也是取决于很多方面,最重要的是算法在并行实现的时候有没有高效地调度和内存的使用优化。

在现在我们使用的大部分GPU加速的深度学习框架里,包括Tensorflow、PyTorch等都是依赖于底层的GPU的矩阵加速代码的实现。为此Nvidia公司也是制定和实现了统一的接口,比如CUDNN,方便上层框架更好的利用GPU的性能。

15.3.3 为什么要使用GPU

对于并行计算来说,可以非常粗略地分为:

  • 并行指令:也就是多个指令可以同时分配到不同的计算核心上同时进行,而他们的操作是不同的,并且他们之间相互独立,不需要额外的同步和信息共享。
  • 并行数据流:如果数据本身存在的天然的独立性,比如图像中的每一个像素,那么在对这个图像做处理的过程中,同一个指令可以同时作用于每一个像素。在这种情况下,这个对于完整图像的操作可以并行化。理论上,如果内存不是问题,并且计算单元的数量大于整个图形中总像素点的话,这个操作可以在一个时钟周期内完成。

GPU整体的架构而言,某种意义上是同时支持以上两种并行模式。在同一个流处理器中,采用了“单一指令并行数据流的模式”,而在多个流处理器中,同一时间可以派发不同的指令。从这一点出发,GPU芯片算是一个非常灵活的架构。一个芯片中,流处理器的个数和其中包含的CUDA核心的数量也是一种面向应用设计时候找到的一个平衡点。

基于深度学习中大部分的操作的天然并行性(大量的矩阵操作),GPU在当下还是一种非常适合的计算平台。一个非常典型的例子就是常见的矩阵相乘(如下图),要计算Z=X \times Y,通过并行计算,X和Y中的行向量和列向量的逐元素相乘就可以同时进行,只要得到结果后再进行累加,并且累计的过程中也是可以进行并行化,使得效率有非常大的提高。

Nvidia也是制定和开发了一套底层类库,CUBlas方便开发者。我们熟悉的几大框架(eg. Tensorflow、Pytorch等)也是遵循和使用了这些并行类库,所以才使得训练和部署性能有了非常多的提高。

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

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

相关文章

塑封芯片多大才需要点胶加固保护?

塑封芯片多大才需要点胶加固保护? 塑封芯片是否需要点胶加固保护,并不完全取决于芯片的大小,而是由多种因素共同决定的。以下是一些影响是否需要点胶加固保护的主要因素: 芯片的应用场景:如果芯片所处的环境较为恶劣&a…

四种msvcp120.dll丢失的解决方法,简单几步将丢失的msvcp120.dll修复

如果你在使用电脑的时候遇到了msvcp120.dll文件丢失的问题应该怎么办呢?如何修复丢失的msvcp120.dll的问题呢?今天那就和大家聊聊msvcp120.dll丢失的解决办法,详细说说msvcp120.dll的解决办法步骤。 修复“msvcp120.dll”丢失问题的详细方法 …

Vue3使用vue-quill富文本编辑器

安装依赖 npm install vueup/vue-quill quill quill-image-uploader自定义字体 把自定义字体样式放入font.css中在main.js中导入 .ql-snow .ql-picker.ql-font .ql-picker-label[data-valueSimSun]::before, .ql-snow .ql-picker.ql-font .ql-picker-item[data-valueSimSun]…

GitLab发送邮件功能详解:如何配置自动化?

GitLab发送邮件的设置指南?怎么优化GitLab发送邮件? GitLab作为一个强大的代码管理平台,不仅提供了代码托管、CI/CD等功能,还集成了发送邮件的功能,使得开发团队能够及时获取项目动态。AokSend将详细介绍如何配置GitL…

暗黑破坏神4第六赛季开荒攻略,如何高效开荒刷图打装备?

暗黑破坏神4的第六赛季将于10月8日开启!要是你总觉得电脑开荒刷图打装备效率低,想知道有什么办法在手机上玩暗黑破坏神4?那这款专为游戏玩家打造的远程控制软件——网易GameViewer远程,就太适合你了!不仅可以在手机上玩…

Linux下文件/目录操作的相关函数

1.文件系统 把一个磁盘分成一个或多个分区。每个分区可用包含一个文件系统 文件系统是,一组规则,规定对文件的存储及读取的一般方法。文件系统在磁盘格式化过程中指定。 常见的文件系统有:fat32 ntfs exfat ext2 、ext3 、ext4 inode是固定…

WSL进阶体验:gnome-terminal启动指南与中文显示问题一网打尽

起因 我们都知道 wsl 启动后就死一个纯命令行终端,一直以来我都是使用纯命令行工具管理Linux的。今天看到网上有人在 wsl 中启动带图形界面的软件。没错,就是在wsl中启动带有图形界面的Linux软件。比如下面这个编辑器。 ​​ 出于好奇,我就…

革新体验:细数3D在线预览在多个行业的广泛应用

‌3D在线预览展示技术的应用领域非常广泛,涵盖了从电子商务、产品设计、建筑设计到文化遗产保护等多个方面。‌ ‌1、电子商务‌: 在电商领域,3D展示技术为商品提供了全方位的展示,包括产品的外观、功能和卖点。这种交互式的购物…

影刀RPA实战:java结合影刀同步采购订单数据

1.实战目标 本次实战我们用java语言结合影刀,实现从自用ERP系统同步订单到旺店通中,在工作中,有时候我们的运营数据不是直接在旺店通ERP中操作,比如我们有自己的ERP,完成一些特定的内部工作后,再把数据同步…

做一个能适配「手机」的网站需要注意什么

这个问题的答案其实简单。 只要在网站前端开发过程中,将网站做成响应式布局,也就是 RWD (Responsive Web Design)就可以啦!当手机或者不同设备打开网站时,通过检测视口分辨率来自动呈现不同的尺寸布局内容…

小程序弹出框是没办法遮挡住底部的tabbar的,解决的办法是使用自定义tabbar。。uni-app小程序如何自定义tabbar

原生小程序方法自定义 tabBar | 微信开放文档 如果是uni-app的小程序应该怎么自定义呢? 不是用page.json里面的tabbar就需要修改page.json.加上 "custom": true 注意list数组还是按照正常的来写。所以不使用但是也不能删除。 我们知道uni-app里面的页…

数字人形象自定义制作:readyplayer

网址: https://readyplayer.me/ 支持上传照片和拍照,会自动识别变成卡通风格 其他选项是配置选项:穿着、样貌等 上面弄好后右上角点击next,创建的模型可以下载3d glb文件 glb文件在线打开: https://gltf-viewer.d…

docker-文件复制(docker cp:用于在Docker主机和容器之间拷贝文件或目录)

文章目录 1、把宿主机的文件复制到容器内部1.1、查询 宿主机 root 下的文件1.2、docker cp /root/anaconda-ks.cfg spzx-redis:/root1.3、查看 spzx-redis 容器 中/root目录下是否有 anaconda-ks.cfg 文件 2、把容器中的文件 复制 到宿主机中2.1、查看 spzx-redis 容器 / 下的文…

Spring Boot框架在甘肃非遗文化网站设计中的运用

3 系统分析 当用户确定开发一款程序时,是需要遵循下面的顺序进行工作,概括为:系统分析–>系统设计–>系统开发–>系统测试,无论这个过程是否有变更或者迭代,都是按照这样的顺序开展工作的。系统分析就是分析系…

力扣面试150 添加与搜索单词 - 数据结构设计 字典树

Problem: 211. 添加与搜索单词 - 数据结构设计 👩‍🏫 参考题解 public class WordDictionary {// 定义一个内部类 Node,用于表示 Trie(前缀树)中的每个节点class Node{// 每个节点有一个大小为 26 的数组&#xff0c…

详解swoole框架快速入门

Swoole包含两个主要部分:一个是用C语言开发的PHP扩展,作为核心功能;另一个是通过PHP代码编写的框架,类似于yii、TP和Laravel。 Swoole扩展本身具备web服务器功能,可以取代php-fpm。当仅使用Swoole框架时,可…

国产人形机器人突破,教会人形机器人如何像人类一样移动

与远在大洋彼岸的特斯拉机器人使用相同的训练设备,Humanoid Robot(上海)有限公司正在使用Xsens动作捕捉系统和ai训练人形机器人模仿人类运动,执行复杂任务。 关键要点: 人形机器人市场正在快速扩张:人形机器人市场将在未来大幅增长,据统计数…

傅里叶变换的python实现

周期信号的频谱   为了能既方便又明白地表示一个信号在不同频率下的幅值和相位,可以采用成为频谱图的表示方法。   在傅里叶分析中,把各个分量的幅度|Fn|或 Cn 随着频率nω1的变化称为信号的幅度谱。   而把各个分量的相位 φn 随角频率 nω1 变化…

ZUploader 之 文件上传

文件上传是前端开发很常用的一个功能, 通常文件上传都是异于表单提交, 使用起来配置繁多, 校验不统一, 展示不统一。 效果对比 特点 简化使用数据双向绑定样式统一带预览和下载功能 依赖 封装的组件 FileViewDialog (文件预览与下载,不需要此功能的话,可删除) 文件返回接口…

用户体验分享 | YashanDB V23.2.3安装部署

近期崖山新版体验过程中,总能看到用户提问:openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验,希望能够帮助到大家~ 1.Lucifer三思而后行 :YashanDB 个人版数据库安装部…