炼丹微调初体验
之前找朋友要了2张P40卡,用ollama,lmstudio和rwkv各种本地部署都玩过,agent是现阶段的学习重点。突然看到internlm的系列课程很全,还给开发机,真是业界良心。居然有微调,那必须尽快报名。今天才来到了心心念念的重点课程。
一直关注微调相关的进展,lora技术貌似论文也做了改良,新出了lisa,效率更高。还有一些别的改进,有一种好像是把参数分成两部分,主要改主对角线的重要部分,效率高些。不过不重要,炼丹实践第一步终于要迈出去了。
看了一下,2,3,4有三个微调教程,7有一个微调作业。中间并没有web-demo,所以其实改为最低配即可。这样有充分的时间。
openassistant-guanaco大羊驼数据微调。有一个eval数据,有一个train数据。都是json格式的集合。
openassistant_best_replies_eval.jsonl openassistant_best_replies_train.jsonl
形式如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a605b94a9daf492f8f17242ea2e7b83e.png)
第一次用低配10%不好使,内存不够,第二次换用30%的配置。果然过程中显卡已经到了12G多了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cc4864ee9b88416eaa9e4e118bc27541.png)
max_epochs = 3意味着只训练3次。按最近文章说gpt2大概训练1000次才能一个参数记住2bit信息,100次大约只能记住1比特。估计训练3次微调能记住的还是太少了些,微调和预训练应该还是有点区别,毕竟微调是命题作文,标注的数据,知道结果的。不过训练3次时间也不短,一次10分钟,三次估计半小时了。哦,我错了,其实是预计10小时,那估计算力快不够了。 问过助教再看怎么整合适?调参充分利用显存估计快不了1倍。其它优化也没啥思路。
等不及助教回答,看教程,修改max-length=4096, batch-size看起来内存不够翻倍,不改。
–deepspeed deepspeed_zero2开个加速,略有点效果
搜了一下,目前速度还是不够快,得着眼于增加batch-size。
果然是炼丹,max-length=3072, batch-size=3.应该是把显存榨的差不多了。gpu貌似还一般。目前范围内能到的最优?batch-size=4或者max-length=4096都会oom。所以几乎可以下结论压榨的差不多了。
先快后慢,取决于gpu利用率。
大约不到5小时完成。(跑完发现不知道啥时候max_epochs = 2)。(一个epochs2小时10分左右)
35=15点。比起原先默认的103应该还是节省了一些时间的。不过摸索这个参数2小时,耗费6点,只是略微减少了一点gpu点数。看了一眼loss,略有起伏,最终loss差不多,所以merge选pth1也还没啥问题。不过如果做QA之类的,我想应该max_epochs取1000,确保该记住的都记住了,然后选pth 1000。过拟合不是问题。这个应该比rag直接。毕竟一个QA的excel整理出来也就几M。一次微调就算max_epochs取1000加大算力一天肯定可以搞定。一个月更新一次就再微调一次。
教程感觉有问题:眼科问题估计不在微调数据集里。所以还是从eval里找一个比较靠谱。
这个看着ok。
Medication QA 微调
这个数据量小,所以很快。
果然,tutorial里的截图位置有问题
用 MS-Agent 数据集 赋予 LLM 以 Agent 能力
用微调好的模型直接运行,看起来和langchain上使用serp体验差远了。估计这个msagent指令跟随还是做得比较差,毕竟只是7B,也没有专门针对function call增强。对于function call没有给出测评参数,所以估计只是初级阶段。
一直是那个反应很慢,最终结果老是对不起,我怀疑两种可能,指令跟随不行,不能用到serp,另一种可能是开发机网络问题,serp超时。因为响应时间比之前的微调模型慢太多了,基本1分钟后才有回复。