科普帖:深度学习中GPU和显存分析
深度学习最吃机器,耗资源,在本文,我将来科普一下在深度学习中:
- 何为“资源”
- 不同操作都耗费什么资源
- 如何充分的利用有限的资源
- 如何合理选择显卡
并纠正几个 误区:
- 显存和GPU等价,使用GPU主要看显存的使用?
- Batch Size 越大,程序越快,而且近似成正比?
- 显存占用越多,程序越快?
- 显存占用大小和batch size大小成正比?
0 预备知识
nvidia-smi
是Nvidia显卡命令行管理套件,基于NVML库,旨在管理和监控Nvidia GPU设备。
这是nvidia-smi命令的输出,其中最重要的两个指标:
- 显存占用
- GPU利用率
显存占用和GPU利用率是两个不一样的东西,显卡是由GPU计算单元和显存等组成的,显存和GPU的关系有点类似于内存和CPU的关系。
这里推荐一个好用的小工具:
gpustat
,直接
pip install gpustat
即可安装,gpustat基于
nvidia-smi
,可以提供更美观简洁的展示,结合watch命令,可以
动态实时监控
GPU的使用情况。
watch --color -n1 gpustat -cpu
显存可以看成是空间,类似于内存。
- 显存用于存放模型,数据
- 显存越大,所能运行的网络也就越大
GPU计算单元 类似于CPU中的核,用来进行数值计算。衡量计算量的单位是flop: the number of floating-point multiplication-adds ,浮点数先乘后加算一个flop。计算能力越强大,速度越快。衡量计算能力的单位是flops: 每秒能执行的flop数量
1*2+3 1 flop
1*2 + 3*4 + 4*5 3 flop
1. 显存分析
1.1 存储指标
1Byte = 8 bit
1K = 1024 Byte
1M = 1024 K
1G = 1024 M
1T = 1024 G
10 K = 10*1024 Byte
除了
K
、
M
,
G
,
T
等之外,我们常用的还有
KB
、
MB
,
GB
,
TB
。二者有细微的差别。
1Byte = 8 bit