xeb*_*xeb 6 machine-learning huggingface-transformers
我想使用 Huggingface\xe2\x80\x99s Transformers 微调 GPT-2 模型。最好是中号型号,但如果可能的话大号。目前,我有一块内存为 11GB 的 RTX 2080 Ti,我可以很好地训练小模型。
\n\n我的问题是:如果我将旧的 Tesla K80 (24GB) 添加到我的机器并分发训练,我会遇到任何问题吗?我找不到有关在训练期间使用不同容量 GPU 的信息以及我可能遇到的问题。
\n\n我的模型大小限制本质上是所有可用 GPU 内存的总和吗?(35GB?)
\n\n我\xe2\x80\x99m 对在AWS 中执行此操作不感兴趣。
\n你已经解决了你的问题。那太棒了。我想指出一种不同的方法并解决几个问题。
我的模型大小限制本质上是所有可用 GPU 内存的总和吗?(35GB?)
这取决于您使用的训练技术。标准数据并行性将模型、梯度和优化器状态复制到每个 GPU。因此每个 GPU 必须有足够的内存来容纳所有这些。数据分布在多个 GPU 上。然而,瓶颈通常是优化器状态和模型而不是数据。
最先进的培训方法是ZeRO。不仅数据集,模型参数、梯度和优化器状态也被分割到 GPU 上。这使您可以训练大型模型而不会出现 OOM。请参阅下面论文中的精美插图。基线是我提到的标准情况。他们逐渐在 GPU 上分割优化器状态、梯度和模型参数,并比较每个 GPU 的内存使用情况。
该论文的作者创建了一个名为 DeepSpeed 的库,并且很容易将其与 Huggingface 集成。这样我就能将模型大小从 2.6 亿增加到 110 亿:)
如果你想详细了解它是如何工作的,这里是论文: https://arxiv.org/pdf/1910.02054.pdf
有关将 DeepSpeed 与 Huggingface 集成的更多信息,请访问: https ://huggingface.co/docs/transformers/main_classes/deepspeed
PS:有一种模型并行技术,其中每个 GPU 训练模型的不同层,但它失去了流行度并且没有被积极使用。