如何训练一个比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
我想使用 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 内存的情况下虚拟地增加批量大小,这在