文章目录
- Phi-4 错误修复
- 1、分词器错误修复
- 2、微调错误修复
- 3、聊天模板问题
- 💡 我们的问题修复有效吗?
- 🦙 Llama-fication
- 🦥 动态 4 位量化
- 🛠️ Finetuning Phi-4
- 性能基准测试
本文翻译自:Phi-4 Finetuning + Bug Fixes by Unsloth (Jan 10, 2025 By Daniel & Michael
https://unsloth.ai/blog/phi4
Phi-4,微软的新14B模型,其性能与OpenAI的GPT-4o-mini相当,现在已在Unsloth上!
我们发现了Phi-4中的4个错误并已修复,大大提高了模型的准确性——详细信息见下文。
我们之前与Google和Hugging Face合作修复了我们的Gemma错误,与Meta合作修复了我们的Llama错误。
Unsloth 使 Phi-4 微调速度提高 2 倍,使用 70% 更少的内存,并支持 >128K 的上下文长度,这比 Hugging Face + FA2 的 12K 在 48GB GPU 上长 12 倍。
我们将Phi-4转换为Llama的架构,以提高准确性和易用性。我们还上传了固定的Phi-4 GGUFs和动态4位量化,此处可以找到。
尝试通过我们的 Phi-4 (14B) Colab 笔记本 进行微调,它适用于谷歌免费的 Tesla T4 16GB GPU。
Phi-4 错误修复
1、分词器错误修复
Phi-4 tokenizer有趣地使用了 作为 BOS(句子开头)、EOS(句子结尾)和 PAD(填充)标记。主要问题是 EOS 标记是错误的——它应该是 <|im_end|>
。否则,你将在生成中得到 <|im_end|>
。
2、微调错误修复
填充令牌应该是一个指定的pad令牌,如 Llama(<|finetune_right_pad_id|>
),或者我们可以使用未经训练的令牌-例如,我们使用 <|dummy_87|>
。
使用错误的填充标记,可能导致无限生成,因为在损失计算过程中填充标记会被屏蔽。
因此,我们必须使用正确的填充标记,以避免意外屏蔽掉eos标记,因为在这种情况下,它与填充标记相同。
3、聊天模板问题
Phi-4分词器总是添加一个助手提示 - 只有在通过add_generation_prompt提示时才应该这样做。大多数LLM服务库都期望非自动助手添加,这可能会在服务期间引起问题。
💡 我们的问题修复有效吗?
多次来自 Reddit 用户的报告显示,我们的修复确实有效!
例如,使用 Hugging Face OpenLLM 领先排行榜,我们看到我们的修复和 Phi-4 的 Llama-fication 表现得更好或与微软官方的 Phi-4 模型相当!
Reddit 评论显示,我们的修复让 Phi-4 推断效果变得更好:
展览 #1 某人的内部多项选择 测试表明,我们的固定版本做得更好:
展示 #2 告诉 Phi-4 来绘制 房子的 ASCII 作品
🦙 Llama-fication
我们还将Phi-4直接移植到了Llama架构中!由于QKV未合并,并且 gate/up 也未合并,这使得微调更加精确。这允许LoRA微调为每个学习单独的A矩阵。查看上传内容这里。
🦥 动态 4 位量化
我们上传了4位bitsandbytes预量化模型,以便更快地下载,然而,Unsloth的动态4位量化显示我们不必量化所有层。这导致精度大幅提高,同时仅使用10%更多的VRAM。
一个展示我们动态量化人员效率的绝佳例子是,通过提交我们的动态4位量化模型 到Hugging Face的OpenLLM排行榜。
我们的4位动态量化模型得分 几乎与我们的16位版本相当——并且远高于标准的Bnb 4位和微软的官方16位模型,尤其是在MMLU方面。
我们上传了我们的动态 4 位量化版本,其中一些层保留为 16 位。详见此处。
查看激活和权重错误分析图如下:
🛠️ Finetuning Phi-4
Phi-4 微调在不到 15GB 的 VRAM 下与 Unsloth 兼容!它还快 2 倍,默认使用我们的动态 4 位量化以实现更高的精度!推理也原生快 2 倍!
尝试在免费的 Google Colab 笔记本这里微调 Phi-4 with Unsloth。要查看我们其他笔记本和模型上传,请访问我们的 文档。
性能基准测试
我们使用Alpaca数据集进行了测试,批大小为2,梯度累积步数为4,rank = 32,并在所有线性层(q, k, v, o, gate, up, down)上应用了QLoRA。
2025-03-09(日)