首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解决微调GPT-2 (HuggingFace)时“内存不足”的问题

解决微调GPT-2 (HuggingFace)时“内存不足”的问题
EN

Stack Overflow用户
提问于 2022-01-06 11:49:14
回答 1查看 1.1K关注 0票数 1

当我使用HuggingFace变形金刚库微调GPT-2模型时,我得到了重新出现的CUDA内存错误,并且似乎无法解决它,尽管我有6 GB的GPU容量,我认为这足以对文本进行微调。错误内容如下:

代码语言:javascript
复制
File "GPT\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "GPT\lib\site-packages\transformers\modeling_utils.py", line 1763, in forward
    x = torch.addmm(self.bias, x.view(-1, x.size(-1)), self.weight)
RuntimeError: CUDA out of memory. Tried to allocate 144.00 MiB (GPU 0; 6.00 GiB total capacity; 4.28 GiB already allocated; 24.50 MiB free; 4.33 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

我已经将批次设置为低到2,并减少了培训示例,但没有成功。我还试图将代码迁移到Colab,在那里12 to的RAM很快就被消耗掉了。我的例子相当长,有些有2.400个字符,但是它们应该被模型自动截断。我的(德语)示例如下所示:

代码语言:javascript
复制
 Er geht in fremde Wohnungen, balgt sich mit Freund und Feind, ist
zudringlich zu unsern Sämereien und Kirschen.  Wenn die Gesellschaft nicht groß
ist, lasse ich sie gelten und streue ihnen sogar Getreide.  Sollten sie hier
aber doch zu viel werden, so hilft die Windbüchse, und sie werden in den
Meierhof hinabgescheucht.  Als einen bösen Feind zeigte sich der Rotschwanz.  Er
flog zu dem Bienenhause und schnappte die Tierchen weg.  Da half nichts, als ihn
ohne Gnade mit der Windbüchse zu töten.

 Ich wollte
Ihnen mein Wort halten, liebe Mama, aber die Versuchung war zu groß.  Da bin ich
eines Abends in den Keller gegangen und hab' aus allen Fässern den Spund
herausgeklopft.  Bis auf den letzten Tropfen ist das Gift ausgeronnen aus den
Fässern.  Der Schade war groß, aber der Teufel war aus dem Haus. «

Andor lachte.  »Mama, das Geschrei hätten Sie hören sollen! Als ob der
Weltuntergang gekommen wäre. Er bedauerte beinahe seine
Schroffheit.  Nun, nachlaufen wird er ihnen nicht, die werden schon selber
kommen.  Aber bewachen wird er seine Kolonie bei Tag und bei Nacht lassen
müssen.  Hol' der Teufel diesen Mercy.  Muß der gerade in Högyész ein Kastell
haben.  Wenn einer von den Schwarzwäldern dahin kommt und ihn verklagt.

数据格式可能有问题吗?如果有人对如何解决这个问题有一个提示,那将是非常受欢迎的。

编辑:谢谢Timbus Calin的回答,我在评论中描述了向config.json中添加config.json标志是如何解决问题的。以下是供参考的整个配置:

代码语言:javascript
复制
{
    "model_name_or_path": "dbmdz/german-gpt2",
    "train_file": "Fine-Tuning Dataset/train.txt",
    "validation_file": "Fine-Tuning Dataset/test.txt",
    "output_dir": "Models",
    "overwrite_output_dir": true,
    "per_device_eval_batch_size": 8,
    "per_device_train_batch_size": 8,
    "block_size": 100, 
    "task_type": "text-generation",
    "do_train": true,
    "do_eval": true
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-06 13:26:50

如果内存问题仍然存在,

  1. 可以选择DistillGPT2,因为它减少了33%的网络参数(向前传递速度也是前者的两倍)。特别是对于6GBVRAM这样的小型GPU内存来说,它可能是一个解决方案/替代您的问题。
  2. 同时,它取决于您如何预处理数据。实际上,该模型能够“接收”最大长度的N令牌(例如,512/768),这取决于您选择的模型。我最近训练了一个命名实体识别模型,该模型具有最大的768标记长度。但是,当我手动将PyTorch DataLoader()中填充的令牌的维数设置为一个大数时,我也得到了OOM内存(甚至3090 24GB VRAM上的)。当我将令牌的维度缩小到更小的(例如512而不是768 )时,培训就开始工作了,并且我没有遇到内存不足的问题。

TLDR:减少预处理阶段的令牌数量,而不管网络的最大容量,也可以帮助解决您的内存问题。

注意到,减少序列中要处理的令牌数量的与令牌的维数不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70606666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档