进阶 unsloth.ai 2026-10-07 22:27:00 · 6 阅读
第14章 使用 Unsloth 微调 Mistral NeMo 模型
unsloth
下载
☰
下载
博客:Mistral NeMo、Ollama 与 CSV 支持 2024年7月19日 • 作者:Daniel & Michael 2024年7月19日 • 作者:Daniel & Michael
Mistral 昨天发布了 120 亿参数的开放模型 NeMo!它支持多语言、原生支持工具调用,而且是能在免费 Google Colab GPU 实例上用 Unsloth 精确完成 finetune 的最大开放模型之一,点击这里访问。
以下是所有重要更新列表: 发现并修复了 NeMo 的 3 个问题 现在可以使用 CSV/Excel 文件 + 多列数据集进行 finetune 支持将模型部署到 Ollama! 全新文档页面上线 所有模型均支持长上下文,包括 Gemma 2、Mistral 和 Qwen2 支持 Torch 2.5、Triton 3 预览版和 Flex Attention 支持仅对 Completions / Responses 进行训练 Mistral NeMo (12B) Unsloth 让 Mistral Nemo (12B) 的 finetune 速度提升 2 倍,显存占用降低 60%,上下文长度比 HF+FA2 长 3-4 倍。通过减少实际 FLOPs、用 OpenAI 的 Triton 语言编写 kernel,以及自研的反向传播引擎,你可以在免费 Colab 的 16GB GPU 实例上精确完成 finetune。试试我们的免费 Colab notebook 或 Kaggle notebook。
我们还在 Hugging Face 上传了预量化的 4bit 模型,下载速度快 4 倍,包含 Mistral NeMo Instruct 和 Base。 Mistral NeMo (12B) 基准测试 模型 | 显存 | 🦥Unsloth 速度 | 🦥显存降低 | 🦥更长上下文 | 🤗Hugging Face+FA2 Mistral NeMo | 24GB | 2x | 60% | 长 4 倍 | 1x Mistral NeMo | 40GB | 1.9x | 58% | 长 4 倍 | 1x 我们使用 Alpaca 数据集测试,batch size 为 2,gradient accumulation steps 为 4,rank = 32,并对所有线性层(q, k, v, o, gate, up, down)应用了 QLoRA。 NeMo 修复 在 Unsloth 中实现 Mistral 时,我们发现了 3 个问题,目前正在与 Hugging Face 和 Mistral 团队合作修复!这些问题在 Unsloth 中已全部解决: EOS token 被重复添加
Mistral 原始上传的模型在每次输出末尾都追加了 EOS token,导致推理和 finetune 完全失效——finetune 后只会输出 EOS token。出色的 HF 团队与我们在 transformers 中合作解决了这个问题。我们不确定 Mistral 自家的库是否也有此问题。Unsloth 已经修复了它。
Base 模型的 EOS token 可能未经过训练
Unsloth 始终追求极致微调效果。在随机微调 Nemo 基础模型时,Unsloth 报错并警告部分令牌未经过训练(数值几乎全为零)。这可能导致部分微调任务中出现 NaN 或无穷大。
因此,我们对比了指令版和基础版的模型权重,发现幅值差异最大的是 和 令牌(如上图所示)。进一步发现,基础模型中 令牌的最大绝对值为 1.1219e-23,而指令版模型中该值为 2.0294e-03。
我们正在与 Mistral 团队合作,探讨 EOS 令牌 是否确实未经过训练,因为这可能会影响推理或微调。即使维度错误,Head Dimension 仍继续生效 Mistral 模型采用了不对称的 Head Dim(128),尽管隐藏层大小 5120 除以注意力头数量(32)的结果是 160。Transformers 在夜更发布中已修复此问题,但使用旧版 Transformers 的用户仍可正常加载模型。下方第一个是“错误”版本,第二个是“正确”版本。在 Unsloth 中,我们已自动为你修补此问题。✔️ Gemma 2 的额外修复 接下来,我们将介绍 Google 最新开源模型 Gemma 2 的另一项修复。在协助 Gemma 和 Google 团队修复 Gemma 2 的几个 Bug(详见此处)后,Gemma 团队向开源社区建议 Gemma-2 9B 的 query_pre_attn_scalar 应为 256 而非 224。我们与 llama.cpp 团队及 Hugging Face 合作完成了此项修补——参见我们的 Hugging Face 提交和 llama.cpp 提交。 自动导出至 Ollama 使用方式:创建并自定义 Chat Template,配合数据集,Unsloth 将自动将微调模型导出至 Ollama,并生成 Modelfile。我们还提供了《微调 Llama-3 并部署到 Ollama 的分步教程》。请参阅我们的 Ollama Llama-3 Alpaca 和 CSV/Excel Ollama 指南 Notebook。
与普通使用三列的 Chat Template 不同,Ollama 将流程简化为两列:instruction 和 output。借助 Ollama,你可以在本地设备上保存、运行并部署微调模型。
此前,我们在 Ollama 的 Discord 服务器上与 Sebastien 联合演示,探讨微调中的情感因素及最新更新。[观看 Sebastien 的精彩演讲](此处)。非常感谢出色的 Ollama 团队和 Sebastien,让这一切成为可能!
视频教程:关于这项新更新的视频教程将随 Unsloth Studio(测试版)一同发布——这是我们与 Sebastien 合作开发的全新 UI,支持在 Google Colab、Hugging Face 以及本地环境中运行。 📖 新文档中心 推出了全新的文档站点,汇总了关于 Unsloth 所有关键信息。如果你有兴趣参与贡献,请随时联系我们!文档地址:https://docs.unsloth.ai/ 🌠 支持 CSV/Excel 和多列数据 此次发布最核心的改进之一,是允许数据集包含尽可能多的列,而不再局限于 2 或 3 列。 对于类似 ChatGPT 的助手应用,此前我们仅支持单条指令或提示,无法处理多列输入。例如在 ChatGPT 中,系统要求提交单个提示而非多个。这意味着在微调时,我们必须将多列数据“合并”为一个大型提示词,功能才能正常工作。 其他微调库通常要求手动准备数据集,即自行将列合并为单个提示。而在 Unsloth 中,我们提供 `to_sharegpt` 函数,一键完成此操作!请尝试我们支持上传 CSV 或 Excel 文件的新微调笔记本,并阅读新的教程指南。 🧶 Gemma、Mistral、Qwen 长上下文支持 通过 Unsloth 的 RoPE 线性缩放技术,现在支持对 Gemma 2、Mistral、Mistral NeMo、Qwen2 等模型进行“无限”长度上下文的微调。结合我们 4 倍长上下文支持,Unsloth 能够实现极长的上下文处理! 💡 仅针对完成/响应进行训练 现在支持仅针对补全内容(Completions)或响应(Responses)进行训练,忽略输入部分。用法请参阅此处文档。 ⚡ 下载速度提升 2-4 倍 在高带宽服务器(如 Colab)上,Hugging Face 模型的下载速度可提升 2-4 倍。默认采用 Hugging Face Hub 的高速传输方法。 🔥 支持 Torch 2.5、Triton 3 和 Flex Attention Unsloth 开箱即支持 Torch 2.5 和 Triton 3。我们正与 PyTorch 团队紧密合作,特别针对 Gemma-2 的长上下文微调,推进 Flex Attention 的支持! 💕 致谢 衷心感谢 Sebastien、Cam、Ollama 团队以及 Unsloth 社区在本次发布中的帮助!如果没有你们捕获 Bug 等支持,这一切都不可能实现。 特别感谢新支持者:Fernando、pacozaa、Edd、loss_flow、x1250、John 和 user799595!🙏 和老规矩一样,欢迎加入我们的 Discord 服务器获取帮助,或者仅仅是表达支持!你也可以关注我们的 Reddit 页面,或者在 Twitter 和 Substack 上关注我们。感谢阅读! Daniel & Michael Han 🦥
2024年7月19日
Unsloth Studio 下周发布
免费开始使用 加入我们的 Discord
以下是所有重要更新列表: 发现并修复了 NeMo 的 3 个问题 现在可以使用 CSV/Excel 文件 + 多列数据集进行 finetune 支持将模型部署到 Ollama! 全新文档页面上线 所有模型均支持长上下文,包括 Gemma 2、Mistral 和 Qwen2 支持 Torch 2.5、Triton 3 预览版和 Flex Attention 支持仅对 Completions / Responses 进行训练 Mistral NeMo (12B) Unsloth 让 Mistral Nemo (12B) 的 finetune 速度提升 2 倍,显存占用降低 60%,上下文长度比 HF+FA2 长 3-4 倍。通过减少实际 FLOPs、用 OpenAI 的 Triton 语言编写 kernel,以及自研的反向传播引擎,你可以在免费 Colab 的 16GB GPU 实例上精确完成 finetune。试试我们的免费 Colab notebook 或 Kaggle notebook。
我们还在 Hugging Face 上传了预量化的 4bit 模型,下载速度快 4 倍,包含 Mistral NeMo Instruct 和 Base。 Mistral NeMo (12B) 基准测试 模型 | 显存 | 🦥Unsloth 速度 | 🦥显存降低 | 🦥更长上下文 | 🤗Hugging Face+FA2 Mistral NeMo | 24GB | 2x | 60% | 长 4 倍 | 1x Mistral NeMo | 40GB | 1.9x | 58% | 长 4 倍 | 1x 我们使用 Alpaca 数据集测试,batch size 为 2,gradient accumulation steps 为 4,rank = 32,并对所有线性层(q, k, v, o, gate, up, down)应用了 QLoRA。 NeMo 修复 在 Unsloth 中实现 Mistral 时,我们发现了 3 个问题,目前正在与 Hugging Face 和 Mistral 团队合作修复!这些问题在 Unsloth 中已全部解决: EOS token 被重复添加
Mistral 原始上传的模型在每次输出末尾都追加了 EOS token,导致推理和 finetune 完全失效——finetune 后只会输出 EOS token。出色的 HF 团队与我们在 transformers 中合作解决了这个问题。我们不确定 Mistral 自家的库是否也有此问题。Unsloth 已经修复了它。
Base 模型的 EOS token 可能未经过训练
Unsloth 始终追求极致微调效果。在随机微调 Nemo 基础模型时,Unsloth 报错并警告部分令牌未经过训练(数值几乎全为零)。这可能导致部分微调任务中出现 NaN 或无穷大。
因此,我们对比了指令版和基础版的模型权重,发现幅值差异最大的是
我们正在与 Mistral 团队合作,探讨 EOS 令牌 是否确实未经过训练,因为这可能会影响推理或微调。即使维度错误,Head Dimension 仍继续生效 Mistral 模型采用了不对称的 Head Dim(128),尽管隐藏层大小 5120 除以注意力头数量(32)的结果是 160。Transformers 在夜更发布中已修复此问题,但使用旧版 Transformers 的用户仍可正常加载模型。下方第一个是“错误”版本,第二个是“正确”版本。在 Unsloth 中,我们已自动为你修补此问题。✔️ Gemma 2 的额外修复 接下来,我们将介绍 Google 最新开源模型 Gemma 2 的另一项修复。在协助 Gemma 和 Google 团队修复 Gemma 2 的几个 Bug(详见此处)后,Gemma 团队向开源社区建议 Gemma-2 9B 的 query_pre_attn_scalar 应为 256 而非 224。我们与 llama.cpp 团队及 Hugging Face 合作完成了此项修补——参见我们的 Hugging Face 提交和 llama.cpp 提交。 自动导出至 Ollama 使用方式:创建并自定义 Chat Template,配合数据集,Unsloth 将自动将微调模型导出至 Ollama,并生成 Modelfile。我们还提供了《微调 Llama-3 并部署到 Ollama 的分步教程》。请参阅我们的 Ollama Llama-3 Alpaca 和 CSV/Excel Ollama 指南 Notebook。
与普通使用三列的 Chat Template 不同,Ollama 将流程简化为两列:instruction 和 output。借助 Ollama,你可以在本地设备上保存、运行并部署微调模型。
此前,我们在 Ollama 的 Discord 服务器上与 Sebastien 联合演示,探讨微调中的情感因素及最新更新。[观看 Sebastien 的精彩演讲](此处)。非常感谢出色的 Ollama 团队和 Sebastien,让这一切成为可能!
视频教程:关于这项新更新的视频教程将随 Unsloth Studio(测试版)一同发布——这是我们与 Sebastien 合作开发的全新 UI,支持在 Google Colab、Hugging Face 以及本地环境中运行。 📖 新文档中心 推出了全新的文档站点,汇总了关于 Unsloth 所有关键信息。如果你有兴趣参与贡献,请随时联系我们!文档地址:https://docs.unsloth.ai/ 🌠 支持 CSV/Excel 和多列数据 此次发布最核心的改进之一,是允许数据集包含尽可能多的列,而不再局限于 2 或 3 列。 对于类似 ChatGPT 的助手应用,此前我们仅支持单条指令或提示,无法处理多列输入。例如在 ChatGPT 中,系统要求提交单个提示而非多个。这意味着在微调时,我们必须将多列数据“合并”为一个大型提示词,功能才能正常工作。 其他微调库通常要求手动准备数据集,即自行将列合并为单个提示。而在 Unsloth 中,我们提供 `to_sharegpt` 函数,一键完成此操作!请尝试我们支持上传 CSV 或 Excel 文件的新微调笔记本,并阅读新的教程指南。 🧶 Gemma、Mistral、Qwen 长上下文支持 通过 Unsloth 的 RoPE 线性缩放技术,现在支持对 Gemma 2、Mistral、Mistral NeMo、Qwen2 等模型进行“无限”长度上下文的微调。结合我们 4 倍长上下文支持,Unsloth 能够实现极长的上下文处理! 💡 仅针对完成/响应进行训练 现在支持仅针对补全内容(Completions)或响应(Responses)进行训练,忽略输入部分。用法请参阅此处文档。 ⚡ 下载速度提升 2-4 倍 在高带宽服务器(如 Colab)上,Hugging Face 模型的下载速度可提升 2-4 倍。默认采用 Hugging Face Hub 的高速传输方法。 🔥 支持 Torch 2.5、Triton 3 和 Flex Attention Unsloth 开箱即支持 Torch 2.5 和 Triton 3。我们正与 PyTorch 团队紧密合作,特别针对 Gemma-2 的长上下文微调,推进 Flex Attention 的支持! 💕 致谢 衷心感谢 Sebastien、Cam、Ollama 团队以及 Unsloth 社区在本次发布中的帮助!如果没有你们捕获 Bug 等支持,这一切都不可能实现。 特别感谢新支持者:Fernando、pacozaa、Edd、loss_flow、x1250、John 和 user799595!🙏 和老规矩一样,欢迎加入我们的 Discord 服务器获取帮助,或者仅仅是表达支持!你也可以关注我们的 Reddit 页面,或者在 Twitter 和 Substack 上关注我们。感谢阅读! Daniel & Michael Han 🦥
2024年7月19日
Unsloth Studio 下周发布
免费开始使用 加入我们的 Discord