GPU与CPU的性能比较及影响因素

news2024/11/23 22:37:14

CPU的主要指标是主频和线程。

  • Intel:后缀F表示无核显,后缀K代表可以超频,H代表移动端;
  • AMD:后缀G代表有核显,后缀X代表加强版,后缀XT代表超级加强版。

CPU 常见计算操作

数据加载、数据预处理、模型保存、loss 计算、评估指标计算、日志打印、指标上报、进度上报。

GPU任务处理流程

GPU 任务交替使用 CPU 和 GPU 进行计算,当 CPU 计算成为瓶颈时,GPU 会等待,GPU 利用率降低了。

GPU 性能主要依靠制程技术(nm)、GPU架构、线路设计、数字表示方式;

通常制程技术的进步只能让GPU的性能提高到原来的1.5或2倍,

GPU性能的提升主要是靠GPU架构和线路设计、数字表示方式的完善。

GPU的架构适合集群,GPU架构的更新同时更新集群方案。

  • 计算量:即一个深度学习模型需要多少次计算才能完成一次前馈。
  • 内存带宽:带宽影响计算速度,即GPU内存带宽是深度学习性能提升的主要瓶颈。

一般的算力评价指标:TFLOPS(具体分单精度、双精度、Tensor);

在硬件架构相同的条件下,核越来以及带宽越高,性能就越好。

影响GPU性能

英特尔的 CPU 有AVX,一条指令可以做 512bit 的浮点操作,换算成32位浮点就是16个OPs,CPU 每个时钟周期可以做一次浮点乘加,相当于两个浮点运算,一个时间周期有 32 个FLOP,乘以 CPU 频率及核数,12 核,3GHz 的英特尔 CPU 运算性能 12 * 32 * 3G = 1152GFLOPS,论文显示 GPU 可达到 200GFLOPS,性能瓶颈并不在计算单元上,而是访存;CPU 的访存比GPU 大,只要 CPU 的访存能放得下,CPU 完全可能比GPU快。当访存放不下时,就要比较内存带宽,GPU 比 CPU快,对小规模数据,CPU 处理快,大规模数据,GPU 处理快。

数据加载问题

1. 数据存储与计算资源间物理距离过远;

2. 数据存储介质导致读写能力不同,不同存储介质读写性能:SSD > ceph > cfs-1.5 > hdfs > mdfs

优化:将数据先同步到本机 SSD,读本机 SSD 训练。本机 SSD 盘为“/dockerdata”,可先将其他介质下的数据同步到此盘下进行测试,排除存储介质的影响。

3. 小文件太多,文件 io 耗时太长;多个小文件是不连续存储,读取会浪费很多时间在寻道上,

优化:将数据打包成大文件,如将许多图片文件转成一个 hdf5/pth/lmdb/TFRecord 等大文件。

4. 未启用多进程并行读取数据;未设置 num_workers 等参数或设置不合理,导致 cpu 性能为发挥,卡住 GPU;优化:设置 torch.utils.data.DataLoader 方法的 num_workers 参数、tf.data.TFRecordDataset 方法的 num_parallel_reads 参数或者 tf.data.Dataset.map 的 num_parallel_calls 参数。

5. 未启用提前加载机制来实现 CPU 和 GPU 的并行;未设置 prefetch_factor 等参数或设置不合理,使 CPU 与 GPU 串行,CPU 运行时 GPU 利用率直接掉 0;优化:设置 torch.utils.data.DataLoader 方法的 prefetch_factor 参数 或者 tf.data.Dataset.prefetch()方法。prefetch_factor 表示每个 worker 提前加载的 sample 数量,Dataset.prefetch() 方法的参数 buffer_size 一般设置为:tf.data.experimental.AUTOTUNE,由TensorFlow 自动选择合适数值。

6. 未设置共享内存 pin_memory;未设置 torch.utils.data.DataLoader 方法的 pin_memory 或者设置成 False,则数据需从 CPU 传入到缓存 RAM 里面,再传输到 GPU 上;优化,如内存富裕,可设置 pin_memory=True,直接将数据映射到 GPU 的相关内存块上,省掉一点数据传输时间。

数据预处理问题

1. 数据预处理逻辑复杂;数据预处理部分超过一个 for 循环,都不予 GPU 训练放到一起;

优化:设置 tf.data.Dataset.map 的 num_parallel_calls 参数,提高并行度,一般设置为 tf.data.experimental.AUTOTUNE,由 TensorFlow 自动选择合适的数值。

将部分数据预处理挪出训练任务,如对图片的归一化操作,提前开启一个 spark 分布式任务或者 cpu 任务处理好,再进行训练。

提前将预处理部分需要用到的配置文件加载到内存中,不需要每次计算读取。

关于查询操作,多使用 dict 加速查询操作,减少 for、while 循环,降低预处理复杂度。

利用 GPU 进行数据预处理;Nvidia DALI 是专门用于加速数据预处理过程的库,既支持 GPU 又支持 CPU;采用 DALI,将基于 CPU 的数据预处理流程改造成用 GPU 来计算。

模型保存问题

1. 模型保存频繁;模型保存为 CPU 操作,频繁操作会导致 GPU 等待。

指标问题

1. loss 计算复杂;含有 for 循环的复杂 loss 计算,导致 CPU 计算时间长,阻塞 GPU,该用低复杂度的 loss 或者使用多进程或多线程进行加速。

2. 指标上报频繁;CPU 和 GPU 频繁切换导致 GPU 利用率低;可抽样上报,如每 100/step 上报

日志问题

1. 日志打印频繁;日志打印操作太频繁,CPU 和 GPU 频繁切换导致 GPU 利用率低;使用抽样打印,如每 100/step 打印一次。

分布式任务中 GPU 利用率低问题

分布式任务相比单机任务多了机器间通信环节。如扩展到多机后出现 GPU 利用率低,运行速度慢等问题,很可能是机器间通信时间太长导致的,可检测如下几项:

1. 机器节点是否处在同一 modules:机器节点处于不同 modules 时,多机间通信时间会长很多,deepspeed 组件已从平台层面增加调度到同一 modules 的策略,用户不需要操作。

2、多机时是否启用 GDRDMA:能否启用 GDRDMA 与 NCCL 版本有关,PyTorch1.7 自带 NCCL2.7.8 时,启动 GDRDMA 失败,此为 NCCL 高版本 bug,可使用的运行注入的方式来修复;使用 PyTorch1.6 自带 NCCL2.4.8 时,能够启用 GDRDMA。NCCL2.4.8 + 启用 GDRDMA 比 NCCL2.7.8 + 未启用 GDRDMA 提升了 4%。设置 export NCCL_DEBUG=INFO,查看日志中是否出现[receive] via NET/IB/0/GDRDMA 和 [send] via NET/IB/0/GDRDMA,出现则说明启用 GDRDMA 成功,否则失败。

3、pytorch 数据并行是否采用 DistributedDataParallel:PyTorch 里的数据并行训练,涉及 nn.DataParallel (DP) 和nn.parallel.DistributedDataParallel (DDP) ,推荐使用 nn.parallel.DistributedDataParallel (DDP)。

 

参考:

【他山之石】GPU 利用率低常见原因分析及优化 (qq.com)

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

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

相关文章

4.0、Hibernate-延迟加载 2

4.0、Hibernate-延迟加载 2 消费者 和 订单 属于 一对多 的 关系,通过上一章节 3.0 的内容我们知道了可以通过设置 customer 来实现延迟加载,本章节来介绍一下如何设置 orders 去实现延迟加载; one-to-many 的 lazy 默认是 true 是开启的&…

%29 身份认证

1、Web 开发模式 (1)、基于服务器渲染的开发模式:服务器发送给客户端的 HTML 页面,是在服务器通过字符串的拼接,动态生成的(企业级网站) (2)、基于前后端分离的开发模式&…

登录过程(vuex存储token、token持久化)

登录过程(vuex存储数据) 点击登录按钮通过表单校验 this.$refs.loginForm.validate(valid > {if (valid) {//按钮动画加载,禁用 this.loading true// 调用vuex的action发送登录请求this.$store.dispatch(user/login, this.loginForm).then(() > {this.$router.push({ p…

内存分配函数(动态内存分配)详解

目录 🎑为什么要进行动态内存开辟? 🎑malloc和free 🎠malloc函数 🎠free函数 🎠malloc函数和free函数的实际应用 🎑calloc函数 🎑realloc函数 🎠realloc函数的使用示例 &…

通过脚手架vue-cli创建一个vue项目

我需要在vue-demo文件下新建vue项目 步骤一 ①在该文件夹下打开集成终端 输入创建命令 命令 vue create 项目名称 ,注意不要使用驼峰命名法 如果是第一次配置,有面的提示,这里说你这样速度会很慢的,用不用镜像啊,这…

样品制备丨艾美捷硝酸盐/亚硝酸盐荧光法检测试剂盒

一氧化氮(NO)是由一氧化氮合酶(NOS)在生物系统中合成的。NOS是一种非常复杂的酶,作用于分子氧、精氨酸和NADPH,产生NO、瓜氨酸和NADP。这个过程需要五个额外的辅因子(FMN、FAD、血红素、钙调素和…

制造业ERP管理系统在企业采购管理中的作用是什么?

对于任何一家企业,采购都是头等大事。企业的采购工作往往是决定了企业产品的交货速度、成本和质量,特别是在制造行业,采购成本甚至占比产品成本的60%以上,降低采购成本是提高企业竞争力的关键。因此,对于企业采购领域的…

Effective C++条款34:区分接口继承和实现继承

Effective C条款34:区分接口继承和实现继承(Differentiate between inheritance of interface and inheritance of implementation)条款34:区分接口继承和实现继承1、纯虚函数2、虚函数(非纯)2.1 将默认实现…

2022 IoTDB Summit:中国核电刘旭嘉《工业时序数据库 Apache IoTDB 在核电的应用实践》...

12 月 3 日、4日,2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本,并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例,深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…

middlebury立体匹配评估使用方法总结(三)——线上版教程

系列文章目录 middlebury立体匹配评估使用方法总结(一)——网站说明 middlebury立体匹配评估使用方法总结(二)——python版离线教程 middlebury立体匹配评估使用方法总结(三)——线上版教程 文章目录系列文…

TableLayout布局

表格布局-TableLayout 1.TableLayout简介 1.简介 表格的形式,整齐可以嵌套继承于线性布局2.行数如何确定? tableRow,来指定行数列数由最多的那个决定layout_column来指定具体的列数,从0开始2.TableLayout的常见属性 所有的都是从0…

VMware ESxi 服务器迁移【手动版】

VMware ESxi 迁移【手动版】 应用场景 两个不同环境下的服务器进行迁移 因为不能直接对拷,需要在中间机上转一下 才有了这么一出 第一步 搭建NFS 在中间机上安装NFS(或者其他磁盘挂载方式) 目的呢是把源服务器上的系统拷贝到中间机上&#x…

android入门之broadcast

1. 前言 广播Broadcast是android四大组件之一。是用来互相通信(传递信息)的一种机制。 通信包括: a) 组件间(应用内)通信 b) 进程间通信 2. 广播Brocast的基本使用方式 广播发送者:Acvitity、Service等…

pdf文档页码怎么添加?分享这几个pdf加页码方法给你

不管是还在校园里的学生,还是已经步入职场的小伙伴,都会遇到要对一些文档进行编辑处理,例如有时需要将word、excel、ppt等格式的文档与pdf文件进行相互转换,有时又需要对pdf文件进行编辑文档增加页眉页脚、拆分合并、加密解密等操…

基于Python+Echarts+Pandas 搭建一套图书分析大屏展示系统(附源码)

今天给大家分享的是基于 Flask、Echarts、Pandas 等实现的图书分析大屏展示系统。 项目亮点 采用 pandas、numpy 进行数据分析 基于 snownlp、jieba 进行情感分析 后端接口选用 RESTful 风格,构建 Swagger 文档 基于 Flask、Echarts 构建 Web 服务,采…

2022年债券估值工具和方法

第一章 债券估值原理概述 债券估值是决定债券公平价格[1]的过程。债券公平价格是债券的预期现金流经过合适的折现率折现以后的现值,其原理是未来现金流流出折现到今日与今日现金流流出相等。因此,债券的估值模型可以表示为: 资料来源&#x…

新冠阳性的第四篇博客,SpringBoot 任务(异步、定时、邮件)

新冠阳性的第四篇博客,SpringBoot 任务(异步、定时、邮件)1.异步任务2.邮件任务3.定时任务1.异步任务 异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动&#x…

Python多元线性回归、机器学习、深度学习在近红外光谱分析中的应用

导师:郁磊副教授,主要从事MATLAB 编程、机器学习与数据挖掘、数据可视化和软件开发、人工智能近红外光谱分析、生物医学系统建模与仿真,具有丰富的实战应用经验,主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析…

【Vue】二、 认识Vue.js的各种指令

后端程序员的vue学习之路1、创建第一个vue对象2、vue构造器3、Vue.js模板语法v-text至v-for练习v-on指令练习v-bind指令练习v-model指定练习v-pre指令v-slot指令v-cloak指令v-once指令1、创建第一个vue对象 引入了vue.js后,在页面就可以创建一个Vue对象&#xff0c…

JS圣诞树

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。🍎个人主页:Java Fans的博客🍊个人信条:不迁怒,不贰过。小知识,大智慧。💞当前专栏:前端案例分享…