使用大批量和少量GPU训练MXNet

时间:2018-12-31 18:30:23

标签: machine-learning deep-learning gpu mxnet

在训练MXNet时,如果批处理量很大(比如说128),而GPU的数量很小(比如说2),则每个GPU每次迭代只能处理几个样本(比如说16)。默认情况下,此配置的最大批处理大小为16 * 2 = 32。

理论上,我们可以在更新权重之前运行4次迭代,以使有效批大小为128。使用MXNet可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

使用更简化的方法(在内存方面)编辑此答案。您必须配置每个参数以累积梯度,运行4个正向传递,反向运行,然后手动将梯度归零。

按照https://discuss.mxnet.io/t/aggregate-gradients-manually-over-n-batches/504/2

”这与Gluon非常直接。您需要将网络参数实例中的grad_req设置为“ add”,并在每个Trainer.step()之后使用zero_grad()将梯度手动设置为零(请参阅{{ 3}})。将grad_req设置为“添加”:

for p in net.collect_params().values():
    p.grad_req = 'add'

“并且类似地,在调用Trainer.step()之后在每个参数上调用zero_grad()。请记住相应地修改trainer.step()的batch_size参数。”

Vishaal