深度学习中的 GPU
文章目录
如题所示,介绍深度学习中的gpu 的使用。
- nvidia-smi
查看GPU 的信息: nvidia-smi
这个是查看NVIDIA 显卡的命令。今天详细解读一下 nvidia-smi 命令。
上面的表格中的红框中的信息与下面的四个框的信息是一一对应的:
GPU:GPU 编号; Name:GPU 型号; Persistence-M:持续模式的状态。持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少,这里显示的是off的状态; Fan:风扇转速,从0到100%之间变动; Temp:温度,单位是摄氏度; Perf:性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能(即 GPU 未工作时为P0,达到最大工作限度时为P12)。 Pwr:Usage/Cap:能耗; Memory Usage:显存使用率; Bus-Id:涉及GPU总线的东西,domain🚌device.function; Disp.A:Display Active,表示GPU的显示是否初始化; Volatile GPU-Util:浮动的GPU利用率; Uncorr. ECC:Error Correcting Code,错误检查与纠正; Compute M:compute mode,计算模式。
- 设置定时任务
crontab 默认是 nano 编辑器,不好用,将 crontab 改为 vim 编辑器
直接定义变量指定 crontab 为 vim 编辑器
|
|
或使用更简单的方式,直接从重新指定 crontab 的默认编辑器,执行以下命令,选择对应编辑器的编号即可
|
|
|
|
注意在配置的时候,使用绝对路径。因为 crontab 默认没有环境变量,所以使用绝对路径执行命令
|
|
例子
|
|
- 监控GPU 的使用情况
watch 命令:可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令 命令的格式:watch[参数][命令]
GPU利用率:显存占用和GPU利用率是两个不一样的东西,显卡是由GPU计算单元和显存等组成的,显存和GPU的关系有点类似于内存和CPU的关系。
方法一:
|
|
常使用的参数为
|
|
|
|
方法二:
这里推荐一个好用的小工具:gpustat,直接pip install gpustat即可安装,gpustat基于nvidia-smi,可以提供更美观简洁的展示,结合watch命令,可以动态实时监控GPU的使用情况。
|
|
显存可以看成是空间,类似于内存。显存用于存放模型,数据。显存越大,所能运行的网络也就越大。那么模型中哪里使用到显存呢?
- 需要计算每一层的feature map的形状(多维数组的形状)
- 需要保存输出对应的梯度用以反向传播(链式法则)
- 显存占用与 batch size 成正比
- 模型输出不需要存储相应的动量信息。 深度学习中神经网络的显存占用,我们可以得到如下公式:
显存占用 = 模型显存占用 + batch_size × 每个样本的显存占用
可以看出显存不是和batch-size简单的成正比,尤其是模型自身比较复杂的情况下:比如全连接很大,Embedding层很大
节省显存一般有如下方法:
- 降低batch-size
- 下采样(NCHW -> (1/4)*NCHW)
- 减少全连接层(一般只留最后一层分类用的全连接层)
【解决抢卡争端】为Tensorflow和PyTorch自动选择空闲GPU
除了使用 nvidia-smi
命令查看 显存占用情况,想要得到更加详细的内容可以使用以下的命令。
|
|
然后结合 kill 命令处理
一般来说,double image resolution (2 *2), 然后对于 gpu memory 是之前的四倍。
获取 GPU 使用情况
Script to get GPU usage on multiple GPU servers This is used to monitor which users are using how much memory overall, per host, and per GPU, on multiple GPU servers. NOTE: This only works with servers using NVIDIA’s GPUs. 这个脚本实现的功能比较全,好好使用学习一下
- gpustat
这个命令是初级的,适合简单看一下使用情况
|
|
针对某个程序优化GPU 的使用
GPUs are optimized to parallelize the feature generation process and hence will give better results when multiple images are passed instead of just one image. The opportunity to improve can be seen based on GPU Utilization. Low GPU Utilization indicates an opportunity to further improve the througput.
目的是为了最大程度的提高gpu 的使用效率,设置不同的
|
|
安装 datamash 的教程: https://www.gnu.org/software/datamash/download/
文章作者 jijeng
上次更新 2020-03-30