如何确定测试批量大小以充分利用 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跑分泄露!这样的性能提升你怎么看?

项目中如何充分利用自动化测试?

您如何确定现实世界中推荐的 ADO.NET 批量大小?

在 Ubuntu 20.04 中为 GTX 560 Ti 安装 Nvidia 驱动程序时,如何修复客户端版本和内核模块版本之间的“NVRM:API 不匹配”?