1. 以下两个参数都可以使用nvidia-smi进行查看
  2. GPU内存占用率:
    1. GPU内存的占用率往往是由模型大小和batchsize决定的,如果发现GPU占用率很小,比如40%,70%等等。如果此时网络结构已经固定,则只需要改变batch size的大小,就可以尽量利用完整个GPU的内存。
    2. 对GPU内存占用率影响最大的还是模型大小,包括网络的宽度,深度,参数量,中间每一层的缓存,都会在内存中开辟空间来进行保存,模型本身会占用很大一部分内存。
    3. 其次是batch size的大小,也会占用影响内存占用率。batch size设置为128,与设置为256相比,内存占用率是接近于2倍关系。当你batch size设置为128,占用率为40%的话,设置为256时,此时模型的占用率约等于80%,偏差不大。所以在模型结构固定的情况下,尽量将batch size设置大,充分利用GPU的内存。
    4. GPU会很快的算完你给进去的数据,主要瓶颈在CPU的数据吞吐量上面。
  3. GPU 内存利用率(GPU-Util):
    1. 没有设置好CPU的线程数时,这个参数是在反复的跳动的。本质原因:GPU在等待数据从CPU传输过来,当数据从总线传输到GPU之后,GPU逐渐计算起来,利用率会突然升高,但是GPU的算力很强大,0.5秒就基本能处理完数据,所以利用率接下来又会降下去,等待下一个batch的传入。
    2. GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。
    3. 提供GPU利用率的方式:
      1. pytorch中的Dataloader类设置num_worker(线程数)以及pin_memory,可以提升速度

        1. 首先要将num_workers(线程数)设置合理,4,8,16是几个常选的几个参数。

          1. 测试发现将num_workers设置的非常大,例如,24,32,等,其效率也不一定会变高,因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。
          2. 当然,线程数设置为1,是单个CPU来进行数据的预处理和传输给GPU,效率也会低。
        2. pinned memory 是一种加速数据从cpu到gpu传输速度的方式。
      2. 其次,当服务器或者电脑的内存较大,性能较好的时候,可以打开pin_memory,就省掉了将数据从CPU传入到缓存RAM里,再给传输到GPU上;为True,会直接映射到GPU的相关内存块上,省掉了一点数据传输时间。
  4. 调试:
    1. 命令:top 实时查看CPU的进程利用率,这个参数对应你的num_workers的设置;
    2. 命令: watch -n 0.5 nvidia-smi 每0.5秒刷新并显示显卡设置。实时查看你的GPU的使用情况,这是GPU的设置相关。
    3. 这两个配合好。包括batch_size的设置。
    4. 自动实时刷新GPU的使用情况:nvidia-smi -l
  5. 有时cuda版本太老也会导致运行的很慢(后续可以尝试的就是更新cudnn的版本)
  6. 显卡占用和GPU占用是两个不一样的东西,显卡是由GPU和显卡等组成的,显卡和GPU的关系有点类似于内存和CPU的关系,两个指标的占用率不一定是互相对应的。
  7. 查看内存使用情况:free -m

关于GPU显存占满(即memory usage 很大),但GPU-util很小,导致模型训练很慢相关推荐

  1. 解决Ubuntu系统找不到进程,但是GPU显存占满问题

    Ubuntu系统有时候会出现GPU显存显示占满,但是使用top命令和nvidia-smi命令都查找不到进程. fuser -v /dev/nvidia* 通过上条命令查找进程,然后使用 sudo ki ...

  2. GPU显存占满但利用率却很低

    来帕多瓦联培已经一个多月了,最近调代码跑实验又发现了这个问题.这里提供另外一个解决思路.一个原因还是 cpu没跟上gpu节奏. 通常我们都会用尽可能大的 batch 来占满显存.但是如果cpu的读取和 ...

  3. GPU显存占满利用率GPU-util奇低

    如上图. 但是有显存占用说明模型应该是在跑的.后来既然GPU利用不起来,我干脆同时跑多个模型,想充分利用,但是效果还不是很明显,速度依然都很慢. 查了查资料发现可以在Dataloader里加pin_m ...

  4. GPU显存占满利用率GPU-util为0

    文章目录 1.

  5. GPU释放显存-----无进程但显存占满解决方法

    记录自己在学习中遇到的问题 在训练模型时打断训练进程,之后再想进行其他的训练或者验证步骤时,会提示显存已满 out of memory 使用 nvidia-smi 查看gpu使用情况,无法看见正在进行 ...

  6. 【已解决】探究CUDA out of memory背后原因,如何释放GPU显存?

    目录 1 问题背景 2 问题探索 2.1 CUDA固有显存 2.2 显存激活与失活 2.3 释放GPU显存 3 问题总结 4 告别Bug 1 问题背景 研究过深度学习的同学,一定对类似下面这个CUDA ...

  7. 【tensorflow】 GPU 显存分配设置

    import osimport tensorflow as tfconfig = tf.ConfigProto()config.gpu_options.per_process_gpu_memory_f ...

  8. 阿里 NIPS 2017 Workshop 论文:基于 TensorFlow 的深度模型训练 GPU 显存优化

    NIPS 2017 在美国长滩举办,场面非常热烈.阿里巴巴一篇介绍深度模型训练 GPU 显存优化的论文<Training Deeper Models by GPU Memory Optimiza ...

  9. 获取指定进程所占用内存、指定GPU显存信息、所有GPU型号和驱动

    ######################################################### # 获取指定进程所占用内存 ############################ ...

最新文章

  1. 手动创建Spring项目 Spring framework
  2. 简短的几句js实现css压缩和反压缩功能
  3. Android系统中提供的原子操作
  4. 普加甘特图集成到第三方JS框架(MiniUI、jQuery、Ext等)
  5. 本地Windows远程桌面连接阿里云Ubuntu 16.04服务器:
  6. 1.SharePoint2010初接触
  7. 【题解】lugu P4095 Eden的新背包问题
  8. 怎么改变rofl格式_手机怎么裁剪视频尺寸
  9. 电感检测_三、电感线圈的识别与检测(二)
  10. 顶尖机器学习学习路线,6个月让你的技术成为行业TOP5%
  11. 雷军凌晨2点下班、刘强东睡4小时,这碗鸡汤程序员你必须干了
  12. 金三银四,那浏览器兼容你知多少?
  13. 阿里技术专家玄惭回忆:我是如何自学技术拿到阿里offer
  14. java generatedvalue_java-@GeneratedValue和@GenericGen之间的区别
  15. iOS使用YYLabel 点击展开和收起全文
  16. Windows安装jupyter教程
  17. Vue 组件之间传值
  18. Android百度地图之定位图层
  19. java两个frame之间_java – JFrame中的两个JPanel,另一个是JP
  20. 科研工具|Ubuntu 装机那些事(更新中)☺️

热门文章

  1. creo文件如何检入服务器,CREO模型树配置的保存与检索
  2. 【Verilog 流水线设计】以全加器为例阐述流水线设计的影响
  3. R语言survival包的survfit函数拟合生存曲线数据、survminer包的ggsurvplot函数可视化生存曲线、使用pval参数自定义指定生存曲线中可视化的p值、为p值添加文本说明内容
  4. jasper 中textfield控件的Markup属性用法
  5. kafka no leader
  6. DWR(1):DWR服务端推送技术介绍
  7. UI一揽子计划 22 (多线程概述、NSThread、NSOperationQueue 、GCD、多线程管理)
  8. async awit
  9. 静候篇之《葡萄成熟时》
  10. 2021年低压电工免费试题及低压电工复审考试