batch size大小的选择与显存 您所在的位置:网站首页 1024显存是多少 batch size大小的选择与显存

batch size大小的选择与显存

2024-07-06 23:48| 来源: 网络整理| 查看: 265

mini-batch:

神经网络一次迭代的过程如下图所示:

选择n个样本组成一个batch,输入神经网络,得到输出。将输出和label一起输入loss层,得到loss值,并通过BP算法更新模型参数。

从工程的角度来看,选择mini-batch(一般为2-32)是最优的。因为:

1、提高了运行效率,相比传统的梯度下降法的每个epoch只更新一次参数,使用mini-batch可以在一个epoch中多次更新参数,加速收敛。解决了某些任务中,训练集过大,无法一次性读入内存的问题。

2、虽然第一点是mini-batch提出的最初始的原因,但是后来人们发现,较大的batch_size容易使模型收敛在局部最优点,而使用mini-batch,甚至单个数据训练时,相当于人为给训练加入了噪声,使模型走出局部最优(鞍点),从而在更大的范围内寻找收敛点。

GPU显存

显存占用 = 模型显存占用 + batch_size × 每个样本的显存占用

模型的加载很难控制(但是考虑到部署的话就要考虑模型加载需要的显存问题了),一般调节batch_size来控制显存的占用(若出现out of memry,那就调batch_size就完事了)

时间更宝贵,尽可能使模型变快(减少 flop)显存占用不是和 batch size 简单成正比,模型自身的参数及其延伸出来的数据也要占据显存假定 GPU 处理单元已经充分利用的情况下,增大 batch size 能增大速度,但是很有限(主要是并行计算的优化)增大 batch size 使得一个 epoch 所能进行的优化次数变少,收敛可能变慢,从而需要更多时间才能收敛(比如 batch_size 变成全部样本数目)(batch size并不是越大越好) GPU利用率

GPU利用率低的因素有很多,一般情况下,通过调节num_workers数量调节GPU利用率。设置在一个比较大的范围内比较好(可以考虑8-16),但不是越大越好。因为越大,虽然线程多了,但是切分到每一个线程消耗也大了,所以会增加CPU的负荷,从而降低对GPU的利用。num_workers数一般和batch_size数配合使用。  

batch 和iteration

假设训练集有1000个样本,batch size为20,则一共需要进行50次迭代。

要注意网络的结束标准是什么。是以epoch还是iteration为标准。如果是以iteration为标准,那么你加大batch_size大小,网络训练时间自然就会增加,此时需要在batch_size翻倍时iteration打对折。如果是以epoch为标准,那么更改batch_size时不需要做其他更改。

梯度累加

梯度累加则实现了batchsize的变相扩大,如果accumulation_steps为8,则batchsize '变相' 扩大了8倍,是解决显存受限的一个不错的trick。

batch和学习率

经验法则是,batch size加倍,学习率就加倍。

参考链接:

训练神经网络时如何确定batch的大小?

深度学习训练中的GPU利用率和显存占用问题、num_workers&batch_size设置问题_num workers增大后batch size需要减少么_毋小黑的博客-CSDN博客

训练时GPU显存太小问题、batchsize 的大小跟GPU的显存的关系_batch size和显存_工科扫地僧的博客-CSDN博客



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有