进阶 unsloth.ai 2026-10-07 22:27:00 · 6 阅读
第10章 使用 Unsloth 微调 Llama 3
unsloth
Download
☰
Download
博客微调 Llama 3 —— 速度快 2 倍 + 上下文长 6 倍 + VRAM 节省 68%2024年4月23日 • 作者:Daniel 和 Michael2024年4月23日•作者:Daniel 和 MichaelLlama-3 8B1xL4 24GB提速205%Llama-3 8B1xL4 24GB节省63%VRAMLlama-3 70B1xA100 80GB提速183%Llama-3 70B1xA100 80GB节省68%VRAM现在你可以用 Unsloth 微调 Meta 最新的 Llama 3 (8B) 模型,速度比 Flash Attention 2 (FA2) + Hugging Face (HF) 快 2 倍,内存节省 63%。Llama 3 (70B) 则快 1.8 倍,VRAM 节省 68%。
在单张 A100 80GB GPU 上,使用 Unsloth 的 Llama-3 70B 可以容纳 48K 个 token(8192 * batch size 5),而不用 Unsloth 只能容纳 7K 个 token——上下文长度提升 6 倍!
我们上传了一个 Colab 笔记本,可以在免费的 Tesla T4 上微调 Llama-3 8B:Llama-3 8b Notebook。我们还在 Hugging Face 页面上传了预量化的 4bit 模型,下载速度提升 4 倍,其中包含 4bit 版本的 Llama-3 70b Instruct 和 Base 模型。
社区里有小伙伴测试了 bf16 Llama 3 8B 的 LoRA 微调,只用了 16GB VRAM。
另外,别忘了在 Github 上给我们 ⭐Star,并加入我们的 Discord 服务器 ❤️Llama 3 性能基准测试模型VRAM🦥Unsloth 速度🦥 VRAM 节省🦥 更长上下文🤗Hugging Face+FA2Llama-3 8B24GB2倍63%上下文长 3 倍1xLlama-3 70B80GB1.8倍68%上下文长 6 倍1x测试使用 Alpaca 数据集,batch size 为 2,梯度累积步数为 4,rank = 32,并对所有线性层(q、k、v、o、gate、up、down)应用 QLoRA。🦙 上下文长度提升 6 倍借助 Unsloth 最新的长上下文支持,Llama-3 70b 现在可以轻松跑在 48GB GPU 上,支持约 7K 上下文长度的微调;而 HF + FA2 可能只能微调 2K 长度,甚至直接 OOM。
在 A100 80GB SXM 机器上,Unsloth 只增加 1.9% 的开销就能支持 6 倍长的上下文,可以微调 48K 序列长度(不用 Unsloth 只有 7.5K)。下面是我们实验采集的 VRAM 与上下文长度的数据,可以清楚看到在长上下文微调上,Unsloth 相比 HF + FA2 的巨大优势。Llama 3 (70B) 最大上下文长度GPU VRAMUnsloth
(新)Unsloth
在所有实验中,我们都采用了秩为 32 的 QLoRA 方法,并将 LoRA 适配器应用于所有线性层(q, k, v, o, gate, up, down)。批次大小设为 1,通过重复数据使其适应最大上下文窗口。 Llama 3 (8B) 微调只需 8GB 显存 使用批次大小 1 以及所有线性层秩 32 的 LoRA 配置时,传统的 Hugging Face + FA2 在 8GB 显卡上会失败或因显存不足(OOM)而崩溃(约需 9GB 内存),而 Unsloth 则轻松支持 2K 长度的上下文。在 24GB 消费级显卡上,Unsloth 允许 20K 的上下文长度,比 Hugging Face + FA2 长约 3.5 倍。 下表展示了在 Colab 的 L4 GPU 上测试的 VRAM 消耗与上下文长度的对应关系。 Llama 3 (8B) 最大上下文长度 | GPU 显存 | Unsloth (新版) | Unsloth (旧版) | Hugging Face + FA2 | | :--- | :--- | :--- | :--- | | 8 GB | 1,983 | 1,594 | OOM | | 12 GB | 6,638 | 5,352 | 1,044 | | 16 GB | 11,292 | 9,110 | 2,663 | | 24 GB | 20,601 | 16,626 | 5,901 | | 40 GB | 39,219 | 31,657 | 12,377 | | 48 GB | 48,528 | 39,172 | 15,615 | | 80 GB | 85,765 | 69,235 | 28,567 | Llama 3 的怪癖 Llama-3 也有一些奇怪的“bug”和特性。首先,与 Llama-2 不同,其分词器似乎不会添加 BOS 标记。HuggingFace 今天添加了修复补丁,我们在 Unsloth 内部迅速解决了这个问题。我们测试了两种场景,发现添加或不添加 BOS 标记几乎没有区别。 另一个更不幸的“bug”或特性是,Llama-3 的基础模型(非指令模型)包含未经训练的 token,具体为 `<|reserved_special_token_{0->250}|>`、`<|eot_id|>`、`<|start_header_id|>` 和 `<<|end_header_id|>`。 我们几天前在 Twitter 上就此发过推文,链接在此处。本质上,如果使用这些未经训练的 token(例如对基础模型使用指令模板),梯度会变成 NaN。正如 Geronimo 最先指出的,必须简单地将这些未经训练的 token 设置为均值向量。 然而,根据我们的调查,你无法直接设置均值,因为它是偏差的。你必须首先将这些未经训练的 token 设为 0(注意:在 bfloat16 下,这些向量不会是 0 而是 1e-23),然后将它们相加,最后除以已训练 token 的数量(总 token 数减去未经训练的 token 数)。我们发现总共有 287 个未经训练的 token。 Unsloth 的新版本现在会在微调过程中自动为你修复此问题。 💕 谢谢!请通过我们的 Ko-fi 捐款页面支持我们。特别感谢:h3n0r1k(再次感谢)、Jascha、safetyBot、Patleeman、Alberto、Pichet、Tseng、Stephen、abhi、sumak、Anoop、lhl 和 fefo,感谢你们成为新的支持者! 🙏 照例,欢迎加入我们的 Discord 服务器获取帮助,也欢迎来表达你的支持!你还可以在 Twitter 和 Substack 上关注我们。感谢阅读!Daniel & Michael Han 🦥
2024年4月23日
即将支持 Phi 3……免费注册开始
在单张 A100 80GB GPU 上,使用 Unsloth 的 Llama-3 70B 可以容纳 48K 个 token(8192 * batch size 5),而不用 Unsloth 只能容纳 7K 个 token——上下文长度提升 6 倍!
我们上传了一个 Colab 笔记本,可以在免费的 Tesla T4 上微调 Llama-3 8B:Llama-3 8b Notebook。我们还在 Hugging Face 页面上传了预量化的 4bit 模型,下载速度提升 4 倍,其中包含 4bit 版本的 Llama-3 70b Instruct 和 Base 模型。
社区里有小伙伴测试了 bf16 Llama 3 8B 的 LoRA 微调,只用了 16GB VRAM。
另外,别忘了在 Github 上给我们 ⭐Star,并加入我们的 Discord 服务器 ❤️Llama 3 性能基准测试模型VRAM🦥Unsloth 速度🦥 VRAM 节省🦥 更长上下文🤗Hugging Face+FA2Llama-3 8B24GB2倍63%上下文长 3 倍1xLlama-3 70B80GB1.8倍68%上下文长 6 倍1x测试使用 Alpaca 数据集,batch size 为 2,梯度累积步数为 4,rank = 32,并对所有线性层(q、k、v、o、gate、up、down)应用 QLoRA。🦙 上下文长度提升 6 倍借助 Unsloth 最新的长上下文支持,Llama-3 70b 现在可以轻松跑在 48GB GPU 上,支持约 7K 上下文长度的微调;而 HF + FA2 可能只能微调 2K 长度,甚至直接 OOM。
在 A100 80GB SXM 机器上,Unsloth 只增加 1.9% 的开销就能支持 6 倍长的上下文,可以微调 48K 序列长度(不用 Unsloth 只有 7.5K)。下面是我们实验采集的 VRAM 与上下文长度的数据,可以清楚看到在长上下文微调上,Unsloth 相比 HF + FA2 的巨大优势。Llama 3 (70B) 最大上下文长度GPU VRAMUnsloth
(新)Unsloth
在所有实验中,我们都采用了秩为 32 的 QLoRA 方法,并将 LoRA 适配器应用于所有线性层(q, k, v, o, gate, up, down)。批次大小设为 1,通过重复数据使其适应最大上下文窗口。 Llama 3 (8B) 微调只需 8GB 显存 使用批次大小 1 以及所有线性层秩 32 的 LoRA 配置时,传统的 Hugging Face + FA2 在 8GB 显卡上会失败或因显存不足(OOM)而崩溃(约需 9GB 内存),而 Unsloth 则轻松支持 2K 长度的上下文。在 24GB 消费级显卡上,Unsloth 允许 20K 的上下文长度,比 Hugging Face + FA2 长约 3.5 倍。 下表展示了在 Colab 的 L4 GPU 上测试的 VRAM 消耗与上下文长度的对应关系。 Llama 3 (8B) 最大上下文长度 | GPU 显存 | Unsloth (新版) | Unsloth (旧版) | Hugging Face + FA2 | | :--- | :--- | :--- | :--- | | 8 GB | 1,983 | 1,594 | OOM | | 12 GB | 6,638 | 5,352 | 1,044 | | 16 GB | 11,292 | 9,110 | 2,663 | | 24 GB | 20,601 | 16,626 | 5,901 | | 40 GB | 39,219 | 31,657 | 12,377 | | 48 GB | 48,528 | 39,172 | 15,615 | | 80 GB | 85,765 | 69,235 | 28,567 | Llama 3 的怪癖 Llama-3 也有一些奇怪的“bug”和特性。首先,与 Llama-2 不同,其分词器似乎不会添加 BOS 标记。HuggingFace 今天添加了修复补丁,我们在 Unsloth 内部迅速解决了这个问题。我们测试了两种场景,发现添加或不添加 BOS 标记几乎没有区别。 另一个更不幸的“bug”或特性是,Llama-3 的基础模型(非指令模型)包含未经训练的 token,具体为 `<|reserved_special_token_{0->250}|>`、`<|eot_id|>`、`<|start_header_id|>` 和 `<<|end_header_id|>`。 我们几天前在 Twitter 上就此发过推文,链接在此处。本质上,如果使用这些未经训练的 token(例如对基础模型使用指令模板),梯度会变成 NaN。正如 Geronimo 最先指出的,必须简单地将这些未经训练的 token 设置为均值向量。 然而,根据我们的调查,你无法直接设置均值,因为它是偏差的。你必须首先将这些未经训练的 token 设为 0(注意:在 bfloat16 下,这些向量不会是 0 而是 1e-23),然后将它们相加,最后除以已训练 token 的数量(总 token 数减去未经训练的 token 数)。我们发现总共有 287 个未经训练的 token。 Unsloth 的新版本现在会在微调过程中自动为你修复此问题。 💕 谢谢!请通过我们的 Ko-fi 捐款页面支持我们。特别感谢:h3n0r1k(再次感谢)、Jascha、safetyBot、Patleeman、Alberto、Pichet、Tseng、Stephen、abhi、sumak、Anoop、lhl 和 fefo,感谢你们成为新的支持者! 🙏 照例,欢迎加入我们的 Discord 服务器获取帮助,也欢迎来表达你的支持!你还可以在 Twitter 和 Substack 上关注我们。感谢阅读!Daniel & Michael Han 🦥
2024年4月23日
即将支持 Phi 3……免费注册开始