兴智杯 多模态检索赛道比赛总结
比赛分享,欢迎指教指点
这次比赛历时约两个月,时间:9.16-10.19,
基本过程是:
- 一个最基本的是跑baseline,数据预处理一次加载爆内存,求助比赛群,得知gihthub里面有被closed的issue,加了一个研究生三年级学生,并得知另一个模型仓库Chinese-clip。
- 通过分块预训练处理,解决内存问题,baseline分数达到37
- 找到Chinese-clip模型预训练权重,放在baseline上跑zeroshot,得到效果提升,分数达到57
- 尝试finetune,分数直接降到10以下,表现为微调没有效果,卡掉,读源代码没有发现问题,很长时间读源码并读不懂,模型文件太大,给原作者发邮件,原作者很长时间没有回复。
- 比赛群里认识的研三哥,他实践了可以使用Chinese-clip官方模型微调,只是得到很小的分数下降:我认识到,可能是baseline代码的原因,我开始跑配Chinese-clip官方代码,并微调参数,调了很多的学习率,warmup,weight_decay,batchsize参数,最终在10.1日得到最好的分数64.39
- 原作者yang过了很久回复我邮件不过当时我以为那个预训练模型是不能下载(???没有详细去看网站是干什么的,糊弄过去?),这一天是10.18正在进行答辩收到邮件,答辩完晚上就开始尝试,当晚就到12点多正常睡觉了,实在不想通宵,邮件里面给了他们modelscope的预训练模型的仓库给我说large模型可用,发现他们有large224和large336模型,不过文件是hf类型,原来我是用.pt文件直接运行代码,这里是.bin文件,不知道怎么跑,于是立即给作者发了邮件,得到回复其实 bin文件和pt文件是一样的,这和我上网搜索到的信息一致,但为什么我自己本地下载下来传到服务器上和原来一样跑不行呢-?因为这个是4G以上大文件,使用git lfs下载出了问题,根本没下载下来,文件不完整,报错信息模糊,以为是bin文件不能跑。后来直接使用modelscope服务器下载,速度很快,然后就能运行了。在19号白天,我尝试使用modelscope提供的embedding编码来弄,不过格式不太对,报错这里element突然冒出来个str类型不知道是什么,明明传入的都是数字型的tensor
在这个时候我有三个选择(报错解决):
- 继续整pytorch.bin,来进行zero-shot
- 尝试继续微调一下pytorch.bin(不过时间当时只剩6h,微调应该时间不够了)
- 继续调那个modelscope接口问题,估计就是修改输入的格式,做一些输出输出的格式修改,吐槽,modelscope似乎是模仿的huggingface,但那些接口并没有明确的文档使用方法,使用起来一头雾水
最后我选择了第一个方案,排查出了是bin文件下载不完整的原因,使用自带的东西在服务加载,保存在了.cache/modelscope文件下就有,不用额外git下载。
终于在结束前1小时,zeroshot出large336模型结果,直接可以得到62的分数,large模型看起来有很大的潜力,之后我尝试finetune,但时间已经来不及了,希望后面还有机会继续弄一下吧~
最后的调参经历是极限1h,原来有个坑就是不知道这个分布式训练是怎么搞的,现场学的所幸搞出来了,但还是一知半解,打算接下来把比赛的技术问题整理记录出来,避免以后继续采坑,问题主要包括:
- git报错代码与回退:来保留原来的代码,然后尝试新想法,当新想法不work时回退到原来的版本,目前是用的复制文件修改的方法
- 能不能直接在服务器上直接使用git
- hf使用
- pytorch环境版本迅速配置:直接用官网给定配置下载就行,我在下午配环境没有遇到网络问题,反倒是使用清华源下载然后本地安装,出现了缺少动态链接库的问题
- 学习率训练策略的代码积累
- A100备用服务器配置
- pycharm临时文件保存位置与我的电脑的适配
- pycharm debug方法:这里就咨询了大佬才知道要进入代码去看里面的原因,不过卡了很长时间还是没有想法
顺便说,调参,base模型分数从57->64提升了7个点,一般情况能提56个点,所以这个模型大概能到6770之间。
但排行榜上的77的大佬是怎么做出来的呀
总结
- 40多天的比赛,最终收获应该在于读代码,跑代码;不过很明显,提升最快的是有懂这个的人,比如本次邮件联系的yang老师,虽然邮件交流缓慢,但他提供的信息却是点睛部分,以及研三哥也给了我一些启发,第一要义就是 不要造轮子,找巨人最好。
- 我之后去看了一些其他比赛,目前感觉这个赛题选的不是太好
- 一开始信息满满,满包劲,觉得用尽方法,一定能登上榜,事实证明,在这个方面没有积累,很难。
- 另一方面,去看了一个师兄的比赛,觉得这个赛题选的不好,问题定义的太明确,就是刷分任务,开放性问题,可以加一些新想法那种是比较好的,另一方面也是说科研就是提出新想法,后面也方面出论文写总结
- 做问题,一开始就分析最难的问题是什么,然后对着最难的问题思考对策这才是做问题的要点,分析难点,参考shuang师兄比赛分享。
码字:1.5h
挖坑:本次比赛相关的技术总结