这个模型(和模型卡片)是对 的改编,所以所有的功劳归功于他/她。
这是一个修改版的,你可以在Colab或类似的桌面GPU(例如单个1080Ti)上生成和微调模型。
运行方式如下:
具有float32参数的BERTIN-GPT-J-6B模型需要22+GB的内存,而且这还不包括梯度和优化器。即使你将所有东西都转换为16位,它仍然不适用于除A6000和A100之外的大多数单GPU设置。你可以在CPU或者其他设备上进行推理,但是微调要更加昂贵。
在这里,我们应用了几种技术,使得GPT-J可以在单个GPU上使用和微调,内存约为11GB:
换句话说,所有的大型权重矩阵都以8位冻结,你只训练小型适配器和可选的1D张量(layernorm缩放、偏差)。
8位会影响模型质量吗?从技术上讲,是的,但实际上影响微乎其微。模型的质量非常接近,并且与原始的GPT-J几乎没有区别。量化模型甚至略优于原始模型,但没有统计学显著差异。
我们的代码与其他8位方法不同,我们只使用8位进行存储,所有的计算都在float16或float32中进行。因此,我们可以利用适应每个个体权重分布的非线性量化。这种非线性量化不能加速推理,但它能产生更小的误差。
那性能怎么样?检查点和去量化都会带来一些开销,但是管理起来出奇的容易。根据GPU和批量大小的不同,量化模型比原始模型慢1-10%,此外还有梯度检查点的开销(30%的开销)。简而言之,这是因为块状量化在GPU上非常快速。
建议从 开始使用原始的超参数。另外,还有一个技巧需要考虑:去量化权重的开销与批量大小无关。因此,你能够适应的批量大小越大,训练效率越高。
你可以在Colab上进行训练,但是如果你得到的是K80,最好转到其他免费的GPU提供商: 、 或 。例如,这是同样的笔记本,但使用了更强大的P100实例。
这个模型是使用进行转换的。它可以适应其他模型类型,但请记住,某些模型会用自定义替代线性和嵌入,这需要它们自己的适配器。