模型:

mrm8488/bertin-gpt-j-6B-ES-8bit

英文

BERTIN-GPT-J-6B with 8-bit weights (Quantized)

前往使用最新的检查点。

这个模型(和模型卡片)是对 的改编,所以所有的功劳归功于他/她。

这是一个修改版的,你可以在Colab或类似的桌面GPU(例如单个1080Ti)上生成和微调模型。

运行方式如下:

具有float32参数的BERTIN-GPT-J-6B模型需要22+GB的内存,而且这还不包括梯度和优化器。即使你将所有东西都转换为16位,它仍然不适用于除A6000和A100之外的大多数单GPU设置。你可以在CPU或者其他设备上进行推理,但是微调要更加昂贵。

在这里,我们应用了几种技术,使得GPT-J可以在单个GPU上使用和微调,内存约为11GB:

  • 使用动态8位量化对大的权重张量进行量化,并在乘法时实时去量化。
  • 使用梯度检查点来仅存储每层一个激活:使用更少的内存,但训练时间会比较慢。
  • 使用模型适配器和1D张量(layernorm缩放、偏差)进行可扩展的微调。

换句话说,所有的大型权重矩阵都以8位冻结,你只训练小型适配器和可选的1D张量(layernorm缩放、偏差)。

8位会影响模型质量吗?从技术上讲,是的,但实际上影响微乎其微。模型的质量非常接近,并且与原始的GPT-J几乎没有区别。量化模型甚至略优于原始模型,但没有统计学显著差异。

我们的代码与其他8位方法不同,我们只使用8位进行存储,所有的计算都在float16或float32中进行。因此,我们可以利用适应每个个体权重分布的非线性量化。这种非线性量化不能加速推理,但它能产生更小的误差。

那性能怎么样?检查点和去量化都会带来一些开销,但是管理起来出奇的容易。根据GPU和批量大小的不同,量化模型比原始模型慢1-10%,此外还有梯度检查点的开销(30%的开销)。简而言之,这是因为块状量化在GPU上非常快速。

如何微调模型?

建议从 开始使用原始的超参数。另外,还有一个技巧需要考虑:去量化权重的开销与批量大小无关。因此,你能够适应的批量大小越大,训练效率越高。

在哪里可以免费训练?

你可以在Colab上进行训练,但是如果你得到的是K80,最好转到其他免费的GPU提供商: 、 或 。例如,这是同样的笔记本,但使用了更强大的P100实例。

这个技术可以用在其他模型上吗?

这个模型是使用进行转换的。它可以适应其他模型类型,但请记住,某些模型会用自定义替代线性和嵌入,这需要它们自己的适配器。

如何使用

的指南的指导进行用途和相关信息。