如何确定测试批量大小以充分利用 NVIDIA Titan X
Posted
技术标签:
【中文标题】如何确定测试批量大小以充分利用 NVIDIA Titan X【英文标题】:how to decide test batch size to fully utilise NVIDIA Titan X 【发布时间】:2017-02-09 23:01:57 【问题描述】:在训练深度学习模型时,我发现如果我将训练和验证(测试)批量大小设置为相同,例如 32、64、...、512,GPU 并没有得到充分利用。
然后我检查 NVIDIA Titan X 规格:
-
NVIDIA CUDA® 内核:3584
内存:12 GB GDDR5X
为了减少 CNN 模型的测试时间,我想尽可能多地增加一个批次中的样本数量。我试过了:
将每批次的样本数设置为 3584,cuda 内存不足错误。 将每批次的样本数设置为 2048,cuda out of memory 错误。 将每批次的样本数设置为 1024,有效。但我不确定 GPU 是否被充分利用。问题:
如何轻松选择每批次的样本数量以充分利用 GPU 进行深度模型前向运算?
【问题讨论】:
【参考方案1】:使用 watch nvidia-smi
检查您的进程正在使用多少 GPU 内存。
仅供参考:
Configuring Theano so that it doesn't directly crash when a GPU memory allocation fails Tradeoff batch size vs. number of iterations to train a neural network:来自 Nitish Shirish Keskar、Dheevatsa Mudigere、Jorge Nocedal、Mikhail Smelyanskiy,平德彼得唐。大批量深度训练 学习:泛化差距和尖锐的最小值。 https://arxiv.org/abs/1609.04836:
随机梯度下降法及其变体是许多深度学习任务的首选算法。这些方法 以小批量方式运行,其中一小部分训练 数据,通常是 32--512 个数据点,被采样以计算 梯度的近似值。 在实践中观察到, 当使用更大的批次时,在 模型的质量,通过其泛化能力来衡量。 已经有人尝试调查造成这种情况的原因 大批量方案中的泛化下降,但是精确的 这个现象的答案是,前所未有。在本文中,我们 提供充分的数字证据支持以下观点 大批量方法倾向于收敛到 训练和测试功能——急剧的最小值导致更差 概括。相比之下,小批量方法始终收敛 到平面最小化器,我们的实验支持一个普遍持有的观点 这是由于梯度估计中的固有噪声。我们 还讨论了几种有助于大批量的经验策略 方法消除了泛化差距并以一组 未来的研究思路和未解决的问题。
[…]
缺乏泛化能力是由于大批量方法倾向于收敛到尖锐的最小化器 训练功能。这些最小化器的特点是大 $\nabla^2 f(x)$ 中的正特征值,并且倾向于泛化较少 好吧。相比之下,小批量方法收敛到平面最小化器 以 $\nabla^2 f(x)$ 的小正特征值为特征。我们 已经观察到深度神经网络的损失函数景观 是这样的,大批量方法几乎总是被吸引到 具有明显最小值的区域,并且与小批量方法不同, 无法逃离这些最小化器的盆地。
[…]
【讨论】:
我也在用theano,你的解决方案是“配置Theano,使其在GPU内存分配失败时不会直接崩溃” @user2262504 还没有解决方案。以上是关于如何确定测试批量大小以充分利用 NVIDIA Titan X的主要内容,如果未能解决你的问题,请参考以下文章
NVIDIA狙击RX 6800 RTX 3060 Ti显卡“废物利用”
为啥 PyTorch 找不到我的 NVIDIA 驱动程序以支持 CUDA?
硬件资讯不能挖矿的真甜品曝光!Nvidia 3050/3050ti跑分泄露!这样的性能提升你怎么看?
在 Ubuntu 20.04 中为 GTX 560 Ti 安装 Nvidia 驱动程序时,如何修复客户端版本和内核模块版本之间的“NVRM:API 不匹配”?