第12章 使用Unsloth进行大模型持续预训练
Unsloth 下载指南
博客 | 使用 Unsloth 进行持续预训练
2024年6月4日 • 作者 Daniel & Michael 2024年6月6日 • 作者 Daniel & Michael
Unsloth 的新版本允许你以比 Hugging Face + Flash Attention 2 QLoRA 快 2 倍的速度,并节省 50% 的显存来轻松地对 LLM 进行持续预训练。我们发布了一个免费的 Colab notebook,用于持续预训练 Mistral v0.3 7b 以学习韩语等新语言,还有一个用于文本补全的 Colab。
我们提供以下见解:
- 你应该微调输入和输出嵌入层。
- Unsloth 将嵌入层卸载到磁盘以节省显存。
- 对嵌入层使用不同的学习率以稳定训练。
- 使用 Rank 稳定的 LoRA。
我们可以改进论文 “LoRA Learns Less and Forgets Less” 的效果,将红色损失曲线降低至下图中所示的绿色水平:
持续预训练基准测试
| 模型 | VRAM | 🦥 Unsloth 速度 | 🦥 VRAM 节省 | 🦥 更长上下文 | 🤗 Hugging Face + FA2 |
|---|---|---|---|---|---|
| Llama-3 8B | 24GB | 2x | 52% | 3x 更长 | 1x |
| Llama-3 70B | 80GB | 1.9x | 49% | 6x 更长 | 1x |
我们使用 QLoRA,训练了所有线性层(包括 embed_tokens 和 lm_head),在 L4 GPU 上使用 rank 256。
♻️ 什么是持续预训练?
持续或连续预训练(CPT)对于“引导”语言模型理解新的知识领域或分布外领域是必要的。像 Llama-3 8b 或 Mistral 7b 这样的基础模型最初是在包含数万亿个 token 的海量数据集上进行预训练的(例如 Llama-3 是 15 万亿)。但有时这些模型在其他语言或特定文本领域(如法律、医学或其他领域)上的训练效果并不理想。因此,持续预训练(CPT)是让语言模型学习新的 token 或数据集所必需的。
📖 LoRA 学得少,忘得也少
近期一篇论文表明,在进行持续预训练时,使用 LoRA 的效果不如全量微调。我们在此推文中介绍了如何改进该论文:
论文中的主要问题及建议解决方案:
- 论文没有微调门控投影矩阵,因此并未在所有线性层上进行微调。见第 3 页脚注。仅微调了注意力机制以及 up 和 down 矩阵。解决方案:对门控投影进行训练!
- 论文显示 Llama-2 在数学上表现良好,但在代码上表现不佳——这是因为
lm_head和embed_tokens未经过训练,因此无法建模领域数据分布的偏移。解决方案:对embed_tokens和lm_head进行训练! - 代码中 rank 256 使用了 alpha 32。rsLoRA 论文表明,对于较大的 rank,必须使用 $alpha/\sqrt{rank}$ 而不是 $alpha/rank$。解决方案:使用 rsLoRA!
- 使用 LoftQ 或 PiSSA 获得更好的初始化,或者使用 LoRA+ 或 DoRA 进行更高级的微调——这比直接微调更难,且与 rsLoRA 或其他方法配合效果不佳。
如果我们逐步采用所有建议,可以仔细降低训练损失。
🧑🤝🧑 解耦学习率
有趣的是,盲目地对 lm_head 和 embed_tokens 进行训练甚至效果更差!我们展示必须对 lm_head 和 embed_tokens 使用较小的学习率,Unsloth 通过新的 UnslothTrainer 和 UnslothTrainingArguments 来处理这一点。只需将 embedding_learning_rate 设置为小于正常 learning_rate 的数值即可。例如,小 10 倍或小 2 倍。我们发现这样效果非常显著。
💕 谢谢! 请随意通过我们的 Ko-fi 捐款页面支持我们。特别感谢新的支持者:Steven、Edd、Jack 和 Jun!🙏
和往常一样,欢迎加入我们的 Discord 服务器寻求帮助,或者来给我们点个赞!你也可以在 Twitter 和 Substack 上关注我们。✏️附录我们为每个实验提供了可复现的 Colab:1.110200 Paper + gate_proj + lm_head + embed_tokens1.062600 Paper + gate_proj + lm_head + embed_tokens + Unsloth1.063000 Paper + gate_proj1.067800 Paper1.066300 Paper + gate_proj + lm_head + embed_tokens + RSLoRA1.054100 Paper + gate_proj + lm_head + embed_tokens + RSLoRA + Unsloth CPT感谢阅读!Daniel & Michael Han 🦥
2024 年 6 月 4 日全模型支持即将到来免费开始使用 加入我们的 Discord