在Google Colab或同等配置GPU服务器上微调GPT-J-6B

资料仓库 GPTJ  收藏
0 / 1101

0.webp

最近的研究OpenAI(GPT-2和GPT-3)、Eleuther AI(GPT-NEO和GPT-J)和Google(BERT、T5、PaLM)等基于transformer的大型语言模型(LLM)的发布,使自然语言处理(NLP)发生了革命性的变化。

大型语言模型是基于transformer架构的生成式深度学习模型。它们似乎主导了绝大多数常见的NLP任务,如摘要、文本生成、关键字和命名实体提取、会话聊天机器人、语言翻译、论文或博客撰写、生成计算机代码、编写智能合约等等。

需要注意的是,他们可以执行传统NLP模型所做的所有这些任务,但只需一个模型即可完成,无需任何特定任务或监督培训。

他们通常需要几个例子来理解给定的任务(包括他们从未接受过训练的任务),并超越以监督方式训练的最先进模型。

GPT-J是当今最流行且开源的大型语言模型。

GPT-J是什么?

GPT-J 6B是一个名为Eleuther AI(成立于2020年7月)的非盈利研究小组发布的60亿参数模型。Eleuther AI是一个分散的志愿者研究人员、工程师和开发人员的集体,专注于开源AI研究。GPT-J是在Pile数据集上训练的。

该小组的目标是民主化、构建和开源大型语言模型。因此,他们发布了GPT-J 6B和其他目前公开的模型(GPT-NEO)。与之相反,由OpenAI发布的GPT3有1750亿个参数,不公开向公众提供。

尽管在参数数量上存在巨大的差异,但事实上GPT-J在某些领域(如代码生成任务和聊天机器人对话)的表现优于GPT3。GPT-J通常比OpenAI的GPT-3模型的较小版本(Ada和Babbage)表现更好,但不如Davinci(GPT-3最强大和最昂贵的模型)。

GPT-J、GPT NeoX 20B(最近发布)和Eleuther AI的其他大型语言模型可以由任何人免费使用和部署在服务器上。

微调

虽然一个模型的参数越多,它通常表现得越好,但当我们探索微调时,这一规则不适用了。微调是指针对特定任务或用例在数据集上进一步训练基于转换器的语言模型的实践。

使用这种强大的技术,GPT-J可以轻松地在许多特定任务上胜过最强大的GPT-3模型Davinci。事实上,微调是一种强大而宝贵的技术,不仅用于提高语言模型或NLP的性能,还用于深度学习和机器学习的其他领域,如计算机视觉、文本到语音(TTS)、语音到文本(STT)、GAN、图像字幕等。

然而,在这篇文章中,我们将重点关注Eleuther AI的GPT-J 6B模型的特殊版本,该模型称为量化EleutherAI/GPT-J-6B,具有8位权重。它是由Hivemind修改和开发的,这篇文章改编了大部分使用的代码。

有关微调原始GPT-J 6B的教程,请查看Eleuther的指南

使用您的自定义数据集在google colab上微调GPT-J-6B:使用低秩适配器(LoRA)的8位权重

源码地址

1_-jTZlTBRR8QUiAdPDSNxJA.webp

2.webp

3.webp

如果你很好奇,想深入了解内部工作和细节,你应该看看模型页面,它有更详细的解释和辅助笔记本(例如模型转换)。

模型介绍

4.webp

此修改版本使您能够在谷歌colab或具有GPU(例如,单个1080Ti)的PC上生成和微调模型。

最初的GPT-J仅用于float32参数的内存就超过了22GB,然后再加上梯度和优化器。即使您将整个模型转换为16位,它仍然不适合大多数单GPU设置,如V100、A6000、Nvidia GTX 1080 Ti和A100。您可能可以在CPU或TPU上使用它执行推理,但微调在计算上要昂贵得多。

应用了几种巧妙的技术,使GPT-J 6B在具有约11 GB内存的单个GPU上可用并可微调:

  • 将模型转换为8位:这是使用facebook的bitsandbytes库完成的。这将该型号的大小从20Gb降至6Gb。使用动态8位量化对大权重张量进行量化,并及时进行去量化以进行乘法运算。(线性层偏差未转换为8位,因为它们占模型权重的不足1%)
  • 使用梯度检查点来存储每层仅一个激活:使用显著减少的内存,代价是训练速度降低30%。
  • 使用LoRA和8位Adam进行可扩展微调。

换句话说,所有的大权重矩阵都被冻结在8位中,你只训练小的适配器和可选的1d张量(分层尺度,偏差)。

我很确定,在这一点上,你必须在脑海中浮现出这样一个问题:8位模型是否会影响模型质量?理论上是会影响的,但在实践中的效果可以忽略不计,量化模型甚至稍好一些,但质量上并不显著。已经进行了一些研究来证实这一点,你可以在这里看看。

此外,性能方面,根据所使用的GPU和批处理大小,量化模型比原始模型慢约1–10%。

然而,去量化权重的开销并不取决于批次大小,因此,您可以适应的批次大小越大,训练效率就越高。

开源状态