量子位公众号 QbitAI
堂堂开源之王 Llama 3,原版上下文窗口居然只有……8k,让到嘴边的一句“真香”又咽回去了。
在 32k 起步,100k 寻常的今天,这是故意要给开源社区留做贡献的空间吗?
开源社区当然不会放过这个机会:
现在只需 58 行代码,任何 Llama 3 70b 的微调版本都能自动扩展到 1048k(一百万)上下文。
背后是一个 LoRA,从扩展好上下文的 Llama 3 70B Instruct 微调版本中提取出来,文件只有 800mb。
接下来使用 Mergekit,就可以与其他同架构模型一起运行或直接合并到模型中。
所使用的 1048k 上下文微调版本,刚刚在流行的大海捞针测试中达到全绿(100% 准确率)的成绩。
不得不说,开源的进步速度是指数级的。
1048k 上下文 LoRA 怎么炼成的
首先 1048k 上下文版 Llama 3 微调模型来自 Gradient AI,一个企业 AI 解决方案初创公司。
而对应的 LoRA 来自开发者Eric Hartford,通过比较微调模型与原版的差异,提取出参数的变化。
他先制作了 524k 上下文版,随后又更新了 1048k 版本。
首先,Gradient 团队先在原版 Llama 3 70B Instruct 的基础上继续训练,得到 Llama-3-70B-Instruct-Gradient-1048k。
具体方法如下:
- 调整位置编码:用 NTK-aware 插值初始化 RoPE theta 的最佳调度,进行优化,防止扩展长度后丢失高频信息
- 渐进式训练:使用 UC 伯克利 Pieter Abbeel 团队提出的 Blockwise RingAttention 方法扩展模型的上下文长度
值得注意的是,团队通过自定义网络拓扑在 Ring Attention 之上分层并行化,更好地利用大型 GPU 集群来应对设备之间传递许多 KV blocks 带来的网络瓶颈。
最终使模型的训练速度提高了 33 倍。
长文本检索性能评估中,只在最难的版本中,当“针”藏在文本中间部分时容易出错。
有了扩展好上下文的微调模型之后,使用开源工具 Mergekit 比较微调模型和基础模型,提取参数的差异成为 LoRA。
同样使用 Mergekit,就可以把提取好的 LoRA 合并到其他同架构模型中了。
合并代码也由 Eric Hartford 开源在 GitHub 上,只有 58 行。
目前尚不清楚这种 LoRA 合并是否适用于在中文上微调的 Llama 3。
不过可以看到,中文开发者社区已经关注到了这一进展。
524k 版本 LoRA:
https://huggingface.co/cognitivecomputations/Llama-3-70B-Gradient-524k-adapter
1048k 版本 LoRA:
https://huggingface.co/cognitivecomputations/Llama-3-70B-Gradient-1048k-adapter
合并代码:
https://gist.github.com/ehartford/731e3f7079db234fa1b79a01e09859ac
参考链接:
[1]https://twitter.com/erhartford/status/1786887884211138784
来自: 网易科技