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
import { h } from 'hastscript' import { toHtml } from 'hast- util -to-html' var tree = h ( '.alpha' , [ 'bravo ' , h ( 'b' , 'charlie' ) , ' delta ' , h ( 'a.echo' , { download : true } , 'foxtrot' ) console . log ( toHtml ( tree ) ) < div class =" alpha 检查风扇利用率, GPU 温度以及 GPU 利用率(框出来的地方)。可以看到风扇正常在转,温度也不高,利用率甚至为0。那么这个时候就比较疑惑了,如果是上述这三个问题倒比较好去针对性的解决。 这个时候去检查了下CPU利用率,输入: 可以发现CPU 用率到了99.3%…这就 导致 实际上只要涉及到CPU运算,就基本上卡死, 导致 整体 模型 训练 不动,造成" GPU 可能有问题"的假象。 Linux查看显卡信息:lspci | grep -i vga使用nvidia GPU 可以:lspci | grep -i nvidia前边的序号 "00:0f.0"是显卡的代号(这里是用的虚拟机);查看指定显卡的详细信息用以下指令:lspci -v -s 00:0f.0Linux查看Nvidia显卡信息及使用情况Nvidia自带一个命令行工具可以查看 显存 的使用情况:nvidia-smi表头释义:... 在名称空间中使用localStorage import { TinyStorage } from '@alphabao/tiny-storage' ; const store = new TinyStorage ( 'store' ) ; const cart = new TinyStorage ( 'cart' ) ; store . set ( 'book-001' , 'Robinson Crusoe' ) ; store . set ( 'book-002' , "Grimm's Fairy Tales" ) ; store . set ( 'book-003' , 'Martin Eden' ) ; cart . set ( 'book- 1. ????问题描述 运行程序的时候提醒 显存 不够,查看了一下nvidia-smi,确实 显存 占满 了,但是 GPU - Util gpu 利用率有三个都是0,只有一个是56% 搜索后发现这个现象的原因还比较普遍,但是似乎没有几个可以很好解决这个问题, 脚本之家的文章:Pytorch GPU 内存 用很高,但是利用率很低如何解决, 转载自CSDN博客:Pytorch GPU 内存 用很高,但是利用率很低, ✅总结自CSDN博客:深度学习PyTorch,TensorFlow中 GPU 利用率较低,CPU利用率很低,且 文章目录问题描述参考链接 2020-07-20 10:48:49.753261: W tensorflow/core/common_runtime/bfc_allocator.cc:439] ****************************************___**____***************************************____________ 2020-07-20 10:48:49.753329: W tensorflow/core/framewor global memory 其中 shared memory 的io 速度是远快于 global memory 的。这三种 memory 的访问性质是: local memory : 线程私有,只能本线程访问 shared memory : 线程块(th 但是有 显存 用说明 模型 应该是在跑的。后来既然 GPU 利用不起来,我干脆同时跑多个 模型 ,想充分利用,但是效果还不是很明显,速度依然都 很慢 。 查了查资料发现可以在Dataloader里加pin_ memory =True, num_workers=8,这样能将数据放入 显存 ,并且通过多线程减少数据读入的时间, 模型 训练 速度会快一些。但是我试了试也没有明显的效果,就很奇怪。 当然也试过增大batch size,但是治标不治本。 所以到底为什么 导致 了这个原因呢? 后来我偶然为了减小最后的tensorbo. CUDA存储器 模型 GPU 片内:register,shared memory ;板载 显存 :local memory ,constant memory , texture memory , texture memory ,global memory ;host 内存: host memory , pinned memory . register: 访问延迟极低;              基 加载 模型 进行推理,图像分辨率在224时可以跑通,384时回报设备内存不足。1. 在修改输入图像大小后model的输入大小是否也进行了改变。2. 是否同时运行两个或多个 网络 造成系统资源不足。MindSpore GPU 环境 3090。3. 是否尝试过减小batch_size。 tensorflow/core/common_runtime/bfc_allocator.cc:661] Chunk at 0x523cd7d00 of size 2048 tensorflow/core/common_runtime/bfc_allocator....