如何训练一个比GPU显存还大的TF模型?

How to train a TF model that is larger than GPU memory?

我想使用 TF2 训练大型物体检测模型,最好是 EfficientDet D7 网络。我的 Tesla P100 卡有 16 GB 内存,我 运行 出现“内存不足”异常,即显卡上没有足够的内存可以分配。

所以我想知道在这种情况下我的选择是什么。如果我有多个 GPU,那么 TF 模型将被拆分以填充两张卡的内存,这是否正确?因此,就我而言,如果再使用第二张 16 GB 的 Tesla 卡,我在训练期间总共会有 32 GB?如果是这样的话,对于云提供商来说也是如此吗?我可以在其中使用多个 GPU?

此外,如果我错了,并且在训练期间为多个 GPU 拆分模型不起作用,还有什么其他方法可以训练不适合我的 GPU 内存的大型网络?

PS:我知道我可以将 batch_size 减少到 1,但不幸的是,对于真正的大模型,这仍然不能解决我的问题...

您至少可以在 GCP(Google 云平台)中使用多个 GPU,对其他云提供商不太确定。是的,一旦你这样做了,你就可以用更大的批次大小进行训练(确切的数字取决于 GPU、它的内存以及你的 VM 中有多少 GPU 运行)

您可以查看此 link 以获得 GCP 中所有可用 GPU 的列表

如果您正在使用对象检测 API,您可以查看 this post 关于使用多个 GPU 进行训练的内容。

或者,如果您想使用单个 GPU,一个聪明的技巧是使用梯度累积的概念,您可以在不使用太多额外 GPU 内存的情况下虚拟地增加批量大小,这在 post