模型微调
Key Takeaway
- Unsloth框架显著降低了微调大模型的门槛,仅需7G显存即可微调1.5B模型,消费级PC也能实现。
- DeepSeek的GRPO强化学习算法能提升模型推理能力和可解释性。
- 微调技术可用于打造个人AI分身和私域模型,实现本地化、无需联网的AI交互。
- 高质量数据集和超参数调整是微调成功的关键,但需要大量实践。
- 文章强调了本地部署小尺寸模型在移动端的潜力和价值。
Full Content
用DeepSeek的方法做微调,可以显著提升传统模型的思考能力。
这是我训练好的模型文件,已经传到Hugging Face上了,大家自取。它是基于Qwen2.5 3B,通过微调加强了数学能力,最后生成了Q4、Q5和Q8三个版本。咱们来对比一下Q4精度的效果。我问一个经典问题:
9.9和9.11这两个数字,哪个更大?
先来看原版的回答。不仅答案错了,而且给的理由也是完全混乱的——什么叫“小数部分相同,唯一的区别在于十分位”,简直胡说八道嘛。
再来看微调版本。这就正常了。整数部分一样,那就比较小数部分。很自然就得出9.9比9.11更大。
这套东西不是我搞出来的,而是Unsloth的成果。他们前些天发了一篇博客,介绍了方法,还给出了代码。简单来说,Unsloth这套东西实现了两点:
第一,微调门槛下降。像1.5B之类的小尺寸模型,只需要7G显存就可以微调。而7B、14B这种,15G显存就OK。也就是说,用消费级的PC就能微调。如果是用云端的算力,像我用Google Colab的T4 GPU,花了一个小时就顺利完成。
第二,模型能力提升。GRPO是一种强化学习算法,是DeepSeek发明并开源出来的。用这套算法和数据集,能够训练出具备更强推理能力和更好可解释性的模型。现在Unsloth把它应用到微调里边,想象空间一下就出来了。举个例子:
私域模型。
一个商业博主,有自己的方法论,也有很多交付案例。他把过往积累下来的东西整理成数据集,包含问题、答案以及解题步骤。然后用Unsloth这套东西去微调,生成3B的模型。最后,把模型文件给到他的用户,不管是免费还是收费都可以。
用户拿到之后,用我上上期介绍的方法在手机上使用。这意味着,用户可以随时随地、不需要联网地跟这位博主的AI分身交流。
对自媒体来说,以前只有在你发视频、发文章的时候,或者你在群里说话的时候,你的粉丝、用户才能接收到你的信息。现在,有了这个方法,他们可以无限制地被你这个IP影响。
之前我分享手机上跑模型的方法,一堆人喷我说没意义、没价值。说句扎心的话:眼界太浅,活该挣不着钱。
哈喽大家好,欢迎来到我的频道。谦虚地说啊,我是国内少数几个能把关于AI的Why和How讲明白的博主。我提供的东西比教程更值钱。记得点一波关注。如果想链接我,就来newtype社群。已经有800多位小伙伴付费加入啦!
回到今天的主题:用强化学习算法,微调模型。
在介绍Unsloth的工具之前,我还是得先把基本概念用一种通俗易懂的方式讲给你们听。可能不是很严谨,但是包懂。
以前搞强化学习,需要准备大量包含解题步骤的高质量数据,以及非常精确、绝对的奖励函数。然后大力出奇迹,硬生生把模型给培训出来。
后来DeepSeek发现,其实不需要那么高的成本,搞得那么费劲——可以把奖励函数弄得更灵活一些嘛。针对每一个问题,它让模型生成一组答案。然后看这一组答案里边,哪个答案相对好一些,从而给出奖励。
传统方法,比较像我们以前在学校里接受的填鸭式教学,靠着记忆力去刷题,想要蒙混过关。但是,这种搞法,知其然而不知其所以然,所以最后还是个渣渣。而DeepSeek的方法则是反复思考解题步骤,最后不仅知其然而且还知其所以然。于是,模型“顿悟”了,学霸诞生了。
如果还是不太明白,那我再打个比方。传统方法训狗,需要明确定义每个动作,并且给每个动作都设计奖励。只有当狗完全按照指令完成动作时,才能获得奖励。
而DeepSeek的方法是,一个动作让狗做三次。在三次当中,相对较好的那一次获得奖励。然后不断重复这个过程。
大家如果有养狗经历就知道,用DeepSeek的这种训练方法,主人轻松,狗子开心,效果也好。
DeepSeek很大方地分享出来之后,Unsloth就拿来用了。不过在使用之前,有一些限制需要跟大家说清楚:
你拿来微调的模型不能太小了,至少也得有1.5B,不然没法正确生成思考标记。这是我选择用3B尺寸的原因,既符合训练的要求,也能在手机上运行。另外,步数至少要300步,奖励才会真正增加。为了达到良好的效果,建议至少训练12个小时。
在官方给的示例当中,用的数据集是GSM8K。它包含了8500个高质量的小学数学文字题。每个问题需要2到8个步骤才能解决。而且,这个数据集里的解题方法是用自然语言编写,而非纯粹的数学表达式。所以,用它来训练,能够提升模型的多步骤数学推理。
类似GSM8K的数据集还有好几个,比如MATH Dataset、MathQA等等。我建议大家先别着急就导入自己的数据集,可以拿这些练练手。因为,换了数据集之后,由于格式不同、特点不同,奖励函数可能需要做相应的调整。
另外,超参数的调整也需要大量实践。比如:
学习率,用来控制模型学习的速度。设得太高,模型可能学得太快,错过最优解;设得太低,模型可能学得太慢,浪费时间。
Batch size,指的是每次喂给模型的数据量。设得太大,可能会导致内存不足;设得太小,可能导致模型学习不稳定。
微调和RAG一样,都是看起来简单,但真要获得好的效果,需要大量调试。而且这东西没法教,只能“干中学”。但是,有门槛是好事。只要跨过去了,就能甩开一大堆人。
所以,我在Google Colab上买了一些计算单元,这段时间会做各种测试。至于数据集,我突然想到,过去一年我在星球里回答了好多好多问题。这些问题都可以做转换,比如让模型帮我批量处理,然后放进数据集里。
通过微调打造AI分身、训练私域模型的想法,在我去年做Llamafile那期视频的时候就出现了。现在可能性越来越大了。等有进展了,我会在社群里说。
OK,以上就是本期内容。想了解AI,来我们newtype社群。那咱们下期见!
Key Takeaway
- 传统RAG在处理复杂查询时存在局限性,无法有效捕捉实体关系和层次结构。
- Second Me项目通过混合记忆架构(结合RAG、GraphRAG和本地模型微调)来解决传统知识库的局限,旨在打造一个能模仿用户风格、语气和关注议题的“第二个我”。
- 混合记忆架构包含三个层级:L0(快速检索层,RAG)、L1(记忆深度处理与结构化层,GraphRAG)和L2(模型个性化微调层)。
- Second Me的部署和训练过程包括自我介绍、上传资料、输入API Key和选择Base Model,核心在于五个步骤的训练。
- 该项目能够实现个人知识库与大语言模型能力的结合,提供更先进的AI交互体验,并具有将个人分身发布到网络供他人调用的想象空间。
Full Content
每一个搭建AI知识库的人,都有一个终极梦想:
把自己手头的所有资料,甚至毕生所学,全都教给AI。这样一来,我们知道的,它都知道。而且,它还有我们不具备的超强计算能力。
简单来说就是:第二个我。
用RAG做不到这一点。过去一年,我出过好多期关于RAG的视频。但是,当我了解得越深、用得越多之后,我越来越明白RAG在技术上的局限性。
你想嘛,无论你用什么样的策略,最终召回的还是那些被切碎的、独立的文本块,这一点不会改变。
要实现刚才说的“第二个我”的终极目标,今天的RAG还太初级。但是我知道,肯定有人在研究、在开发。
Second Me就是截至目前最让我欣喜、最让我看到希望的项目。
它采用混合记忆架构,有点类似于咱们人类大脑的短期记忆和长期记忆。
为了实现这个架构,Second Me把RAG、GraphRAG都用上了,去深度处理用户提供的文档。最后,基于这些处理过的数据,它还在本地微调一个模型。
也就是说,这个项目其实已经脱离了知识库的范畴。因为最后我们进行交互的,是一个完全根据你的风格、语气、表达方式,以及最关心的议题所定制出来的模型,再搭配上结构化处理的知识库。
这样一套解决方案,比我们现在在用的AI知识库,显然先进得多。
哈喽大家好,欢迎来到我的频道。谦虚地说啊,我是国内少数几个能把关于AI的Why和How讲明白的博主。我提供的东西比教程更值钱。记得点一波关注。如果想链接我,就来newtype社群。已经有超过1000位小伙伴付费加入啦!
回到今天的主题:Second Me。
这个项目其实是社群里的小伙伴发现的。当时他在星球问我,怎么本地部署。我试了一下,完全没问题啊,一路上没遇到任何报错。
就像GitHub上说的那样,你先把Python和Xcode命令行工具安装好,这是必须的。
然后把整个仓库下载下来。我当时没用这行命令,而是直接下载压缩包。
再然后,用cd命令进入项目文件夹,运行make setup。它会自动安装需要的一切。你就啥也别管,等着好了。
等全部安装完成,用make start命令启动项目,然后打开一个本地链接,就可以开始训练了。这个环节也很简单,就做三件事:
第一,做个自我介绍。因为,你给的资料,最终一定要跟你的身份属性相结合,才能描绘出一个生动的你。不然就只是一堆“死”的数据。
第二,上传资料。你可以直接贴文字进去,也可以上传文档。我是直接把我视频脚本的文件夹拖进去了。
第三,输入OpenAI的API Key,以及根据你机子的性能,选择一个Base Model。
这边我需要说一下。我的机子是M4 Pro芯片,48G统一内存。平时跑7B的模型完全没压力,所以就选了7B。结果到最后的微调环节,内存压力还是有点大的。我不得不把处理项目以外的软件全都关了,才顺利完成。至于OpenAI的API,花不了多少钱。你看,我这边快100个文档,花了3美金。因为它用的是GPT-4o mini,白菜价。
当你把这三步都设置完毕,就可以正式开始训练了。Second Me的核心,就在这五个步骤的训练中。
第一步,它需要下载Base Model,用的是Qwen2.5。最后的微调就是基于这个模型进行的。
第二步,处理用户上传的资料。这边用到了RAG技术,也就是把所有文档切成更小的文本块,然后把文本块转换成向量表示,最终完成基础数据的准备、索引的创建。
第三步,提取更深层次的结构化信息。这应该就是GraphRAG技术。因为通过第二步的处理,我们得到了一大堆文本块,它们都是独立存在的,是散的。但是,如果你站在整篇文章的角度来看,文本块之间,或者说上下文之间,应该是有逻辑关系的。由于RAG技术的局限性,这种逻辑关系丢失了。
所以需要GraphRAG,把人名、地名、概念等等实体,以及实体之间的关系,全部识别、提取出来,形成一个关于你这个人、关于你的知识体系的图谱。
第四步,准备用于微调的数据集。光有用户上传的资料还不足以进行微调。因为这些资料当中,哪些数据需要增强,还得依靠前两步的处理才能知道。比如,跟用户身份特征有关的数据显然需要强化。
第五步,正式开始微调。这一步最吃性能,也最花时间。我从下午等到晚上才搞定。
这五个步骤,其实就是在实现所谓的“混合记忆”架构。这个架构包含L0、L1和L2三个层级。
第二步的RAG,对应的是L0,也就是“快速检索层”。它是一种简单、快速的记忆检索机制。你可以把它看成是人类大脑的短期记忆。
第三步的GraphRAG,对应的是L1,也就是“记忆深度处理与结构化层”。它的目标是深入理解记忆内容,提取结构化信息。你可以把它看成是人类大脑的长期记忆。
第一步、第四步和第五步,对应的是L2,也就是“模型个性化微调层”。它的产物,就是那个经过个性化训练、能够模仿用户,并且利用知识库的Second Me模型。
这一大套的东西,都是为了让三个层级共同协作,实现了一个把用户个人记忆,或者说个人知识库,与大语言模型能力相结合的“混合记忆”系统。
至于怎么使用,很简单:点击“Start Device”,这个项目会通过llama.cpp加载训练好的模型,然后咱们正常对话就好。
因为资料都是我自己写的视频脚本,所以我再清楚不过了。我用下来的感受是,它不像RAG那么机械,没有那种复读机的生硬感。它似乎跟我一样了解所有的内容。这个就是“混合记忆”带来的体验。
说实话,一年前,我跟VC的小伙伴喝茶的时候还讨论过,可以参考人类记忆的特性去打造个人AI分身。现在看到有人实现了,我是真的很高兴。