BGE-M3是效果较好的Embedding模型,详细的介绍可以阅读论文《BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation》。
在RAG中应用中,BGE-M3可以替代商业的embedding模型,实现低成本、可控的解决方案。它具备的两个重要的功能:
- 多语言,可以支持100多种工作语言
- 可输入最长8192个token的长文本。 在进行生成应用时,我们除了关注模型本身的能力外,还需要关注其服务化的性能,本篇文章,将会对比BGE-M3在GPU和CPU下的服务响应延迟。
1. 软硬件
1.1 硬件:
CPU:Intel(R) Xeon(R) Gold 6330(28核)
GPU: 英伟达A800(80G)
1.2 软件:
操作系统:Linux version 3.10.0-1160.95.1.el7.x86_64
其他:GPU Driver Version: 525.105.17 CUDA Version: 12.0
模型:BGE-M3
serving:基于FlagEmbedding自行开发,比较简单,没有额外的逻辑,做了open ai兼容的api接口,源代码可以在github的代码仓库embeddingserver中查看
2. 测试和对比
将通过调用http的接口,输入3个不同长度的文本获取embedding,并分别对比运行于CPU和运行于GPU的服务请求耗时。
2.1 请求文本和curl命令样例
文本片段1,字符数为:20:
亚特兰蒂斯的海景房和豪华海景房有什么区别
文本片段2,该片段的字符数为:405:
三亚·亚特兰蒂斯坐落在风光旖旎的海棠湾,以消失的亚特兰蒂斯大陆之谜为蓝本匠心打造的海洋文化主题旅游景区目的地,融汇失落的空间水族馆、惊险刺激的水上冒险乐园、精品购物大道、C秀剧场及度假酒店于一身,充满神话色彩和无限精彩,成为亲子探秘之旅和休闲度假的明星打卡胜地。 步入这片海洋王国,如同开启了一扇通往探索宝藏之门,瞬间奇幻的色彩弥漫而来,随处都有惊奇发现。下榻时尚现代的海景客房或套房便可领略南海的瑰丽壮美;置身梦幻般的水底套房,与万千游戈的异域海洋生物来一场奇遇;前往水世界体验急速漂流和多条滑水天梯的惊险刺激,感受鲨鱼擦身而过的震撼;徜徉于各色风格迥异的环球美食之巅,尽情犒赏味蕾;奔向巨大的失落的空间水族馆,水下漫步、潜水、观赏光怪陆离的海洋鱼类;沉醉在AHAVA SPA,享受死海矿物质的温柔呵护,舒缓身心;流连在琳琅满目的购物大道,挑选心仪的纪念品......在这里,可以满足您所有好奇心和度假梦想。
文本片段3,该片段的字符数为:2433:
第1回 惊天地美猴王出世 这是一个神话故事,传说在很久很久以前,天下分为东胜神洲、西牛贺洲、南赡部洲、北俱芦洲。在东胜神洲傲来国,有一座花果山,山上有一块仙石,一天仙石崩裂,从石头中滚出一个卵,这个卵一见风就变成一个石猴,猴眼射出一道道金光,向四方朝拜。那猴能走、能跑,渴了就喝些山涧中的泉水,饿了就吃些山上的果子。 整天和山中的动物一起玩乐,过得十分快活。一天,天气特别热,猴子们为了躲避炎热的天气,跑到山涧里洗澡。它们看见这泉水哗哗地流,就顺着涧往前走,去寻找它的源头。猴子们爬呀、爬呀,走到了尽头,却看见一股瀑布,像是从天而降一样。猴子们觉得惊奇,商量说∶“哪个敢钻进瀑布,把泉水的源头找出来,又不伤身体,就拜他为王。”连喊了三遍,那石猴呼地跳了出来,高声喊道∶“我进去,我进去!”那石猴闭眼纵身跳入瀑布,觉得不像是在水中,这才睁开眼,四处打量,发现自己站在一座铁板桥上,桥下的水冲贯于石窍之间,倒挂着流出来,将桥门遮住,使外面的人看不到里面。石猴走过桥,发现这真是个好地方,石椅、石床、石盆、石碗,样样都有。这里就像不久以前有人住过一样,天然的房子,安静整洁,锅、碗、瓢、盆,整齐地放在炉灶上。正当中有一块石碑,上面刻着∶花果山福地,水帘洞洞天。石猴高兴得不得了,忙转身向外走去,嗖的一下跳出了洞。猴子们见石猴出来了,身上又一点伤也没有,又惊又喜,把他团团围住,争著问他里面的情况。石猴抓抓腮,挠挠痒,笑嘻嘻地对大家说∶“里面没有水,是一个安身的好地方,刮大风我们有地方躲,下大雨我们也不怕淋。”猴子们一听,一个个高兴得又蹦又跳。猴子们随着石猴穿过了瀑布,进入水帘洞中,看见了这么多的好东西,一个个你争我夺,拿盆的拿盆,拿碗的拿碗,占灶的占灶,争床的争床,搬过来,移过去,直到精疲力尽为止。猴子们都遵照诺言,拜石猴为王,石猴从此登上王位,将石字省去,自称“美猴王”。美猴王每天带着猴子们游山玩水,很快三、五百年过去了。一天正在玩乐时,美猴王想到自己将来难免一死,不由悲伤得掉下眼泪来,这时猴群中跳出个通背猿猴来,说∶“大王想要长生不老,只有去学佛、学仙、学神之术。”美猴王决定走遍天涯海角,也要找到神仙,学那长生不老的本领。第二天,猴子们为他做了一个木筏,又准备了一些野果,于是美猴王告别了群猴们,一个人撑着木筏,奔向汪洋大海。大概是美猴王的运气好,连日的东南风,将他送到西北岸边。他下了木筏,登上了岸,看见岸边有许多人都在干活,有的捉鱼,有的打天上的大雁,有的挖蛤蜊,有的淘盐,他悄悄地走过去,没想到,吓得那些人将东西一扔,四处逃命。这一天,他来到一座高山前,突然从半山腰的树林里传出一阵美妙的歌声,唱的是一些关于成仙的话。猴王想∶这个唱歌的人一定是神仙,就顺着歌声找去。唱歌的是一个正在树林里砍柴的青年人,猴王从这青年人的口中了解到,这座山叫灵台方寸山,离这儿七八里路,有个斜月三星洞,洞中住着一个称为菩提祖师的神仙。美猴王告别打柴的青年人,出了树林,走过山坡,果然远远地看见一座洞府,只见洞门紧紧地闭着,洞门对面的山岗上立着一块石碑,大约有三丈多高,八尺多宽,上面写着十个大字∶“灵台方寸山斜月三星洞”。正在看时,门却忽然打开了,走出来一个仙童。美猴王赶快走上前,深深地鞠了一个躬,说明来意,那仙童说∶“我师父刚才正要讲道,忽然叫我出来开门,说外面来了个拜师学艺的,原来就是你呀!跟我来吧!”美猴王赶紧整整衣服,恭恭敬敬地跟着仙童进到洞内,来到祖师讲道的法台跟前。猴王看见菩提祖师端端正正地坐在台上,台下两边站着三十多个仙童,就赶紧跪下叩头。祖师问清楚他的来意,很高兴,见他没有姓名,便说∶“你就叫悟空吧!”祖师叫孙悟空又拜见了各位师兄,并给悟空找了间空房住下。从此悟空跟着师兄学习生活常识,讲究经典,写字烧香,空时做些扫地挑水的活。很快七年过去了,一天,祖师讲道结束后,问悟空想学什么本领。孙悟空不管祖师讲什么求神拜佛、打坐修行,只要一听不能长生不老,就不愿意学,菩提祖师对此非常生气。祖师从高台上跳了下来,手里拿着戒尺指着孙悟空说∶“你这猴子,这也不学,那也不学,你要学些什么?”说完走过去在悟空头上打了三下,倒背着手走到里间,关上了门。师兄们看到师父生气了,感到很害怕,纷纷责怪孙悟空。孙悟空既不怕,又不生气,心里反而十分高兴。当天晚上,悟空假装睡着了,可是一到半夜,就悄悄起来,从前门出去,等到三更,绕到后门口,看见门半开半闭,高兴地不得了,心想∶“哈哈,我没有猜错师父的意思。”孙悟空走了进去,看见祖师面朝里睡着,就跪在床前说∶“师父,我跪在这里等着您呢!”祖师听见声音就起来了,盘着腿坐好后,严厉地问孙悟空来做什么,悟空说∶“师父白天当着大家的面不是答应我,让我三更时从后门进来,教我长生不老的法术吗?”菩提祖师听到这话心里很高兴。心想∶“这个猴子果然是天地生成的,不然,怎么能猜透我的暗谜。”于是,让孙悟空跪在床前,教给他长生不老的法术。孙悟空洗耳恭听,用心理解,牢牢记住口诀,并叩头拜谢了祖师的恩情。很快三年又过去了,祖师又教了孙悟空七十二般变化的法术和驾筋斗云的本领,学会了这个本领,一个筋斗便能翻出十万八千里路程。孙悟空是个猴子,本来就喜欢蹦蹦跳跳的,所以学起筋斗云来很容易。有一个夏天,孙悟空和师兄们在洞门前玩耍,大家要孙悟空变个东西看看,孙悟空心里感到很高兴,得意地念起咒语,摇身一变变成了一棵大树。师兄们见了,鼓着掌称赞他。大家的吵闹声,让菩提祖师听到了,他拄着拐杖出来,问∶“是谁在吵闹?你们这样大吵大叫的,哪里像个出家修行的人呢?”大家都赶紧停住了笑,孙悟空也恢复了原样,给师父解释,请求原谅。菩提祖师看见孙悟空刚刚学会了一些本领就卖弄起来,十分生气。祖师叫其他人离开,把悟空狠狠地教训了一顿,并且要把孙悟空赶走。孙悟空着急了,哀求祖师不要赶他走,祖师却不肯留下他,并要他立下誓言∶任何时候都不能说孙悟空是菩提祖师的徒弟。
在GPU服务器上启动两个服务,占用不同的端口,一个只使用CPU、一个会使用GPU(建议只占用一张GPU即可,模型加载后,会占用4G的显存,如果是占用多张显卡在请求数据较少时,会响应很慢,具体原因还需进一步查看)。 使用的curl命令的样例如下:
curl -w "\n总时间: %{time_total}s\n名称解析时间: %{time_namelookup}s\n连接时间: %{time_connect}s\nTLS握手时间: %{time_appconnect}s\n等待时间: %{time_starttransfer}s\n数据传输时间: %{time_total}s\nHTTP状态码: %{http_code}\n" --location 'http://localhost:8085/embeddings' \
--header 'Content-Type: application/json' \
--data '{
"input":["三亚·亚特兰蒂斯坐落在风光旖旎的海棠湾,以消失的亚特兰蒂斯大陆之谜为蓝本匠心打造的海洋文化主题旅游景区目的地,融汇失落的空间水族馆、惊险刺激的水上冒险乐园、精品购物大道、C秀剧场及度假酒店于一身,充满神话色彩和无限精彩,成为亲子探秘之旅和休闲度假的明星打卡胜地。 步入这片海洋王国,如同开启了一扇通往探索宝藏之门,瞬间奇幻的色彩弥漫而来,随处都有惊奇发现。下榻时尚现代的海景客房或套房便可领略南海的瑰丽壮美;置身梦幻般的水底套房,与万千游戈的异域海洋生物来一场奇遇;前往水世界体验急速漂流和多条滑水天梯的惊险刺激,感受鲨鱼擦身而过的震撼;徜徉于各色风格迥异的环球美食之巅,尽情犒赏味蕾;奔向巨大的失落的空间水族馆,水下漫步、潜水、观赏光怪陆离的海洋鱼类;沉醉在AHAVA SPA,享受死海矿物质的温柔呵护,舒缓身心;流连在琳琅满目的购物大道,挑选心仪的纪念品......在这里,可以满足您所有好奇心和度假梦想。"],
"model":"bge-m3"
}'
这段curl会统计请求的各个阶段的耗时,将其在服务器上直接运行,避免网络带来的影响。
2.2 测试结果
以405字符长度的文本输入,在GPU上的请求为例,结果如下图
整体的结果如下表:
文本片段长度 | GPU耗时(秒) | CPU耗时(秒) |
---|---|---|
20 | 0.087 | 0.427 |
405 | 0.084 | 0.510 |
2433 | 0.212 | 4.132 |
长度为20字符的文本:CPU耗时是GPU的接近5倍;
长度为405字符的文本:CPU耗时是GPU的6倍;
长度为2433字符的文本:CPU耗时是GPU的接近20倍。
3.总结
由于GPU算力昂贵,基于对服务性能的客观评价,可以更加合理的设计系统架构,控制成本。