第一次在公司调试BGE模型,谨以此篇记录学习过程

1、写作背景

这个星期,领导想要调试BGE模型,关于这个模型的简介在网上可以看到,包括最新的论文也可以找到。比如链接:智源开源最强语义向量模型BGE!中英文测评全面超过OpenAI、Meta-腾讯云开发者社区-腾讯云 (tencent.com)

BGE论文解读:如何炼成中文世界的通用Embedding Model - 知乎 (zhihu.com)

都介绍了BGE的相关概念,简单来说,BGE就是一种语义向量模型,可以解决自然语言领域的诸多问题,包括幻觉问题、知识时效问题、超长文本问题等,广泛应用于搜索、推荐、数据挖掘等领域。

此次领导安排我在本地调试BGE-base-zh模型,根据指定的训练数据微调该模型,使得这个模型能够适配公司的数据,这里用于调试的数据集并不大,所以微调起来不会太耗时,因此这次的任务主要是能够让这个模型运行起来。

BGE对应的github仓库对应地址为:GitHub - FlagOpen/FlagEmbedding: Retrieval and Retrieval-augmented LLMs

BGE模型地址为:https://huggingface.co/BAAI/

在github公布的数据集基于MTEB,包括中文和非中文的。BGE模型相关代码均开源于FlagOpen飞智大模型技术开源体系旗下FlagEmbedding项目,一个聚焦于Embedding技术和模型的新版块。

2、调试过程

此次使用的BGE模型为bge-base-zh,公司已经将模型文件下载到本地,领导直接提供了微调数据(finetune.json),所以我需要做的是修改微调启动文件。这里一般启动文件有两种,一种就是直接python文件,公司用的是.sh的启动文件,其实也就是封装了一下。

所以我主要就是修改finetune.sh文件。这里面主要有几点更改:

(1)更改GPU-devisices的数量和开启的进程数,这两点都需要根据实际的设备进行更改;

(2)更改加载的模型,这里使用的是bge-base-zh模型,并且模型文件都已经保存在本地,所以直接引入模型文件即可,也就是修改加载模型的地址。需要注意的是,BGE多个版本的模型都在huggingFace上提供了(BGE - a BAAI Collection (huggingface.co)),理论上说,就算本地没有模型文件,使用“BAAI/bge-base-zh”也是可以通过远程加载模型的,只是因为在国内,这种加载模型的方式不可用,也不仅仅是加载这个模型不行,加载huggingFace上的其他数据集也是不行的,至少我试了多种方式都不大行,若有可行的方法,期待留言。

(3)更改加载的数据,导入微调数据地址即可。

理应按照这些步骤就可以得到想要的结果,但实际操作中还是遇到了问题。

对于这个微调,主要修改的还是finetune.sh文件,将里面对应的参数改正确即可。

后来,在此基础上,我有开始调试模型的评价,对于一个模型的评价,MTEB是一个非常常用的数据评测指标,C-MTEB是中文版本,这里也是使用C-MTEB,在github上也有(FlagEmbedding/C_MTEB at master · FlagOpen/FlagEmbedding · GitHub)。程序员的第一步肯定得看readme.md吧,里面给了一些测试案例。下图就是C-MTEB文件夹所有内容。

这个时候我就单纯的想运行eval_C-MTEB.py,按照README.md里面介绍的步骤。

我一开始没有看明白,所以我一直以python eval_C-MTEB.py的方式执行,没有带后面的东西。反正是没有运行成功,但是在错误信息里面看到了“BAAI/bge-large-zh”。能够想出来,这是huggingface上面的模型,然后我更加细致的看了eval_C-MTEB.py的代码,有这么一段,让我有了新的思考。

由这部分代码,让我想起了官方文档里面运行代码的那句(python eval_C-MTEB.py --model_name_or_path BAAI/bge-large-zh)。没有意外的话,--model_name_or_path对应的就是代码里面的第一个参数。经过验证,确实没错。所有这个python文件是可以接受4个参数的。

首先我就需要让这个文件运行本地的模型(bge-base-zh),我就需要传入本地模型给--model_name_or_path。

当我在此执行时,其实执行了很多次,老是会出现链接huggingface.co相关的错误,让我更加认为,连接huggingface肯定是不行的,这应该是需要在线远程从huggingface上获取点什么,之前要使用transfromer时,也是因为连接huggingface不成功而搁浅了。

后来才发现,运行代码中没有指定数据集,报错的原因是不是需要远程加载数据集呢?应该是的,后来我随便找了数据量小的数据集放在本地,通过修改evaluation对象,绑定本地数据集,然后进行模型评估。其实应该差不多了,只是又到最后一步,evaluation.run()的时候出现了错误,提示我一些库的原因,安装来安装去,有的库通过pip安装不了(报错:metadata-generation-failed)。网上都说这个错误很常见,我也是根据网上的一顿操作,升级pip,wheel,setuptools。还清除安装缓存(pip cache purge),但没有解决,很扎心。后来经过一个哥们的操作,我们pip下载都是通过公司的源,他直接查了一下源里是否真的存在需要的库,发现没有。我去,这就高级了点,我怎么能想到呢。后来我就去PyPI上面去下载了那个库,上传到本地服务器上的python里面就可以用。

后来又出现提示我:pip install mteb[bire],这种方式我都没见过。。。我就按照指令安装,又是不行,中途又出现缺少faiss这个库,真是缺的东西也太多了。我想去PyPI里面找faiss这个库,发现这是wheel文件,我就选了一个,通过pip install name.wheel来安装,又出错了,我都搞不懂。。。

至此,还是没有安装完,导致这个代码没有顺利执行完毕,后续希望能有所进展!

3、总结

调试模型是一个复杂的过程,特别是看别人写好的代码,对应那种封装好的代码,站在公司的角度,是希望数据和模型都在本地。需要调整的地方很多。经过这么一个流程下来,也有很多的收获,学习了不少排错的方法,继续加油。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值