赛博禅心 2024年07月11日
大模型真实速度一览(附:测试脚本)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文测试了多个国产大模型的文本生成速度,包括智谱、通义千问、百川、深度求索、阶跃星辰等,并与 OpenAI 的 GPT-3.5-turbo、GPT-4 进行对比。测试结果显示,智谱的 GLM-4-AirX 模型在中杯(百亿级别参数规模)测试中表现突出,生成速度远超其他模型。在小杯(十亿级别参数规模)测试中,OpenAI 的 GPT-3.5-turbo 和智谱的 GLM-4-flash 表现出色。大杯(千亿级别参数规模)测试中,月之暗面、OpenAI 和智谱的模型表现不分伯仲,阶跃星辰稍逊一筹。其他模型则相对较慢。

😄 **智谱 GLM-4-AirX 在中杯测试中表现突出**:智谱的 GLM-4-AirX 模型在中杯测试中表现突出,生成速度远超其他模型,显示出其在百亿级别参数规模的模型中具有显著优势。

🚀 **OpenAI GPT-3.5-turbo 和智谱 GLM-4-flash 在小杯测试中表现出色**:OpenAI 的 GPT-3.5-turbo 和智谱的 GLM-4-flash 在小杯测试中表现出色,速度明显快于其他模型,表明它们在十亿级别参数规模的模型中具有较高的效率。

🌟 **大杯测试中,月之暗面、OpenAI 和智谱表现不分伯仲**:在千亿级别参数规模的模型测试中,月之暗面的 moonshot-v1-32k、OpenAI 的 GPT-4 和智谱的 GLM-4 表现不分伯仲,速度较为接近,说明它们在处理大规模任务时具有较强的能力。

🐢 **其他模型在各杯测试中速度相对较慢**:与上述模型相比,其他模型在各个测试中速度相对较慢,说明它们在生成速度方面还有提升空间。

📊 **测试结果显示国产大模型在速度方面取得了明显进步**:通过测试,我们可以看到国产大模型在速度方面取得了明显进步,部分模型甚至超越了 OpenAI 的 GPT 模型,展现出国产大模型的潜力和竞争力。

原创 金色传说大聪明 2024-07-11 09:03 浙江

各家差异明显,智谱中杯 GLM-4-AirX 领跑全场

由于国产模型降价到不讲武德

我最近一直在做迁移测试

尝试换用国内大模型


从开发者角度,就关心仨事

好不好

贵不贵

快不快


前俩个话题

有太多讨论了

我就测试一下各家模型的速度

以 api 访问的方式进行测试

分小/中/大杯的模型

于是就有了这个图



测试方法

代码我放在了最后,可以自己跑

任务:让各个模型,将「出师表」翻译成现代汉语

#测试 prompt:将以下内容,翻译成现代汉语:先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。今当远离,临表涕零,不知所言。


目标:获取模型的文本生成速度


已知:


故,我需要做的就是每家模型调用 2 次:

 

具体的话,我使用 api + colab 的方式进行测试:极简 Python:10分钟会用 OpenAI / Kimi API。由于 colab 在海外,这也是为什么我需要把 【网络延迟 + 理解上文的时间】剪掉,不然影响有点大。

考虑到工作量,我暂时目前只对兼容 OpenAI SDK 的接口进行了测试(代码附在了最后),之后可能会迭代到全覆盖的测试,并开源出来(感觉自己像是戏台上的老将军,浑身插满了 flag)



以下是测试切片

按生成速度从高到底排序

测试于中国时间上午 11 点左右


小杯:一般聪明

OpenAI 还是你大爷,智谱紧随其后

其他慢了一截


来自「OpenAI」的 gpt-3.5-turbo: 

上下文总长度:2250,用时:14.62 秒 

内容:先帝创业未半,就中途意外去世,如今天下局...

输入 token:1070,输入解析(含网络延迟):0.47 秒 

输出 token:1180,生成用时:14.15 秒,生成速度:83.42 token/s


来自「智谱」的 glm-4-flash: 

上下文总长度:1409,用时:11.35 秒 

内容:先帝开创的事业还没有完成一半,却突然驾崩...

输入 token:689,输入解析(含网络延迟):1.37 秒 

输出 token:720,生成用时:9.98 秒,生成速度:72.14 token/s


来自「通义千问」的 qwen-turbo: 

上下文总长度:1440,用时:18.17 秒 

内容:先帝开创大业未竟一半,却中途去世,现在天...

输入 token:690,输入解析(含网络延迟):1.12 秒 

输出 token:750,生成用时:17.05 秒,生成速度:43.99 token/s


来自「百川」的 Baichuan3-Turbo: 

上下文总长度:1485,用时:22.00 秒 

内容:先帝开创大业还没完成一半却中途去世了,现...

输入 token:752,输入解析(含网络延迟):1.84 秒 

输出 token:733,生成用时:20.16 秒,生成速度:36.36 token/s


中杯:比较聪明

智谱快的离谱非常离谱,特别离谱


来自「智谱」的 glm-4-airx: 

上下文总长度:1415,用时:9.67 秒 

内容:先帝开创的事业还未完成一半就不幸去世,现...

输入 token:689,输入解析(含网络延迟):1.86 秒 

输出 token:726,生成用时:7.81 秒,生成速度:92.95 token/s


来自「OpenAI」的 gpt-4o(我觉得没有4聪明): 

上下文总长度:1690,用时:12.68 秒 

内容:先帝创业还未完成,中途就去世了。现在天下...

输入 token:776,输入解析(含网络延迟):0.51 秒 

输出 token:914,生成用时:12.16 秒,生成速度:75.14 token/s


来自「通义千问」的 qwen-plus: 

上下文总长度:1500,用时:48.10 秒 

内容:先帝创立帝业还未完成一半,却中途去世,现...

输入 token:690,输入解析(含网络延迟):1.05 秒 

输出 token:810,生成用时:47.05 秒,生成速度:17.22 token/s



大杯:超级聪明

月之暗面 & OpenAI & 智谱:不分伯仲

阶跃星辰:稍逊一筹

其他家:慢了许多


来自「月之暗面」的 moonshot-v1-32k

上下文总长度:1445,用时:27.03 秒 

内容:这段文字出自《出师表》,是三国时期蜀汉丞...

输入 token数:729,解析用时(含网络延迟):3.37 秒 

输出 token数:716,生成用时:23.66 秒,生成速度:30.26 token/s


来自「OpenAI」的 gpt-4: 

上下文总长度:2409,用时:45.64 秒 

内容:前朝皇帝开创事业还没完成,就在半路中逝世...

输入 token数:1070,解析用时(含网络延迟):1.21 秒 

输出 token数:1339,生成用时:44.43 秒,生成速度:30.14 token/s


来自「智谱」的 glm-4: 

上下文总长度:1415,用时:25.98 秒 

内容:以下是该段古文的现代汉语翻译:先帝开...

输入 token:689,输入解析(含网络延迟):1.89 秒 

输出 token:726,生成用时:24.09 秒,生成速度:30.13 token/s


来自「阶跃星辰」的 step-1-8k: 

上下文总长度1590,用时:33.38 秒 

内容:先帝开创的大业未完成一半却中途去世了。现...

输入 token数:694,解析用时(含网络延迟):2.03 秒 

输出 token数:896,生成用时:31.35 秒,生成速度:28.58 token/s


来自「百川」的 Baichuan4: 

上下文总长度1413,用时:40.05 秒 

内容:先帝创立的基业还没有完成一半就去世了,现...

输入 token数:690,解析用时(含网络延迟):2.42 秒 

输出 token数:723,生成用时:37.63 秒,生成速度:19.21 token/s


来自「深度求索」的 deepseek-chat: 

上下文总长度:1691,用时:52.08 秒 

内容:先帝开创大业未完成一半,却中途去世。如今...

输入 token数:739,解析用时(含网络延迟):1.43 秒 

输出 token数:952,生成用时:50.65 秒,生成速度:18.80 token/s


来自「通义千问」的 qwen-max: 

上下文总长度:1538,用时:57.39 秒 

内容:先帝开创大业未完成一半,却中途去世了,现...

输入 token数:690 ,解析用时(含网络延迟):1.10 秒 

输出 token数:848 ,生成用时:56.28 秒,生成速度:15.07 token/s


吐槽

有的朋友会说

为啥没有文心一言

对此,我放几个截图


先是找不到入口



接着是付款让我犹豫


打算付款了,但按钮点不动


来自朋友的监控

本着:「与其麻烦自己,不如霍霍朋友」的原则

让朋友帮我监控了几天

他没国外api,所以监控的模型有点不一样


如下



用 GPT 整理了下


高清大图纯享版:智谱的 AirX 模型很显眼


顺便分了个杯

(有些我分不出来,就不瞎分了)


小杯

低定价/十亿级别参数规模的模型

两极分化的好严重...


中杯

中等定价/百亿级别参数规模的模型

智谱的 AirX 很明显的强


大杯

高定价/千亿级别参数规模的模型

月之暗面和智谱比较快,千问比较慢,豆包不太稳定


代码

测试代码如下

记得先配置 api key

然后 pip install openai


# 配置信息from google.colab import userdata
models_venti ={'GPT':{ 'brand':'OpenAI', 'model_version':'gpt-4', 'api_key' : userdata.get("Key_OpenAI"), 'base_url' : "https://api.openai.com/v1", },'Moonshot':{ 'brand':'月之暗面', 'model_version':'moonshot-v1-32k', 'api_key' : userdata.get("Key_Moonshot"), 'base_url' : "https://api.moonshot.cn/v1", },'Zhipu':{ 'brand':'智谱', 'model_version':'glm-4', 'api_key' : userdata.get("Key_Zhipu"), 'base_url' : "https://open.bigmodel.cn/api/paas/v4/", },'Qwen':{ 'brand':'通义千问', 'model_version':'qwen-max', 'api_key' : userdata.get("Key_Qwen"), 'base_url' : "https://dashscope.aliyuncs.com/compatible-mode/v1", },'DeepSeek':{ 'brand':'深度求索', 'model_version':"deepseek-chat", 'api_key' : userdata.get("Key_DeepSeek"), 'base_url' : "https://api.deepseek.com", },'Stepfun':{ 'brand':'阶跃星辰', 'model_version':'step-1-8k', 'api_key' : userdata.get("Key_Stepfun"), 'base_url' : "https://api.stepfun.com/v1", },'Baichuan':{ 'brand':'百川', 'model_version':'Baichuan4', 'api_key' : userdata.get("Key_Baichuan"), 'base_url' : "https://api.baichuan-ai.com/v1", },}

models_grande ={'GPT':{ 'brand':'OpenAI', 'model_version':'gpt-4o', 'api_key' : userdata.get("Key_OpenAI"), 'base_url' : "https://api.openai.com/v1", },'Zhipu':{ 'brand':'智谱', 'model_version':'glm-4-airx', 'api_key' : userdata.get("Key_Zhipu"), 'base_url' : "https://open.bigmodel.cn/api/paas/v4/", },'Qwen':{ 'brand':'通义千问', 'model_version':'qwen-plus', 'api_key' : userdata.get("Key_Qwen"), 'base_url' : "https://dashscope.aliyuncs.com/compatible-mode/v1", },}
models_tall ={'GPT':{ 'brand':'OpenAI', 'model_version':'gpt-3.5-turbo', 'api_key' : userdata.get("Key_OpenAI"), 'base_url' : "https://api.openai.com/v1", },'Zhipu':{ 'brand':'智谱', 'model_version':'glm-4-flash', 'api_key' : userdata.get("Key_Zhipu"), 'base_url' : "https://open.bigmodel.cn/api/paas/v4/", },'Qwen':{ 'brand':'通义千问', 'model_version':'qwen-turbo', 'api_key' : userdata.get("Key_Qwen"), 'base_url' : "https://dashscope.aliyuncs.com/compatible-mode/v1", },'Baichuan':{ 'brand':'百川', 'model_version':'Baichuan3-Turbo', 'api_key' : userdata.get("Key_Baichuan"), 'base_url' : "https://api.baichuan-ai.com/v1", },}
# 逻辑部分import threadingfrom concurrent.futures import ThreadPoolExecutor, as_completedfrom openai import OpenAIimport queueimport timeimport datetimeimport pytz
def LLM(messages, model, result_dict, use_streaming=False): client = OpenAI( api_key=model['api_key'], base_url=model['base_url'], )
api_params = { "model": model['model_version'], "messages": messages, "stream": use_streaming, }
start_time = time.time()
try: response = client.chat.completions.create(**api_params) if use_streaming: for chunk in response: infer_time = time.time() - start_time response.close() result = result_dict.get(model['model_version'], {'model': model}) result.update({ 'content': None, 'duration': infer_time, 'use_streaming': use_streaming, 'infer_time': infer_time, }) result_dict[model['model_version']] = result return else: result_message = response.choices[0].message content = result_message.content or f"蚌埠住了:{model['model_version']} 啥也没说" completion_tokens = response.usage.completion_tokens prompt_tokens = response.usage.prompt_tokens total_tokens = response.usage.total_tokens total_time = time.time() - start_time
result = result_dict.get(model['model_version'], {'model': model}) result.update({ 'content': content[:20]+'...', 'duration': total_time, 'prompt_tokens': prompt_tokens, 'completion_tokens': completion_tokens, 'total_tokens': total_tokens, 'use_streaming': use_streaming, 'generation_time': total_time - result.get('infer_time', 0), }) if 'infer_time' in result: result['infer_speed'] = prompt_tokens / result['infer_time'] if result['infer_time'] > 0 else 0 result['generation_speed'] = completion_tokens / result['generation_time'] if result['generation_time'] > 0 else 0 result_dict[model['model_version']] = result return except Exception as e: result_dict[model['model_version']] = { 'model': model, 'content': f"Error: {e}", 'use_streaming': use_streaming, }
def testALL(messages=[], prompts=[], models={}): tz = pytz.timezone('Asia/Shanghai') now = datetime.datetime.now(tz) print(f"\n测试开始时间:{now.strftime('%Y-%m-%d %H:%M:%S')}\n")
result_dict = {}
def process_messages(messages, use_streaming): futures = [executor.submit(LLM, messages, models[key], result_dict, use_streaming) for key in models] for future in as_completed(futures): future.result() # Ensure future completes
with ThreadPoolExecutor() as executor: for use_streaming in [True, False]: if prompts: for prompt in prompts: messages = [{"role": "user", "content": prompt}] process_messages(messages, use_streaming) else: process_messages(messages, use_streaming)
# 对结果按生成速度从高到低排序并输出 sorted_results = sorted(result_dict.values(), key=lambda x: x.get('generation_speed', 0), reverse=True) for result in sorted_results: print(f"来自「{result['model']['brand']}」的 {result['model']['model_version']}:") print(f"上下文总长度:{result['total_tokens']},用时:{result.get('duration', 0):.2f} 秒") print(f"内容:{result.get('content', '无输出')}") print(f"输入 token:{result['prompt_tokens']}") print(f"输入解析(含网络延迟):{result.get('infer_time', 0):.2f} 秒") print(f"输出 token:{result['completion_tokens']}") print(f"生成用时:{result.get('generation_time', 0):.2f} 秒,生成速度:{result.get('generation_speed', 0):.2f} token/s") print("\n")
# 执行部分prompts = [    """将以下内容,翻译成现代汉语:先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。
臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
今当远离,临表涕零,不知所言。"""]

print("我来测试大杯了~")testALL(prompts = prompts, models = models_venti)
print("="*30)print("我来测试中杯了~")testALL(prompts = prompts, models = models_grande)
print("="*30)print("我来测试小杯了~")testALL(prompts = prompts, models = models_tall)


PS:上面的代码拿去随便用


以及...

这个版本的测试还有一些问题

比如分杯可能有误

比如监控可能不够频繁

也比如没有覆盖到全样本


过段时间

我尝试把这个测试工具正式开源出来

到时候一起来改改测测

应该会成为一个不错的 benchmark

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

国产大模型 文本生成速度 智谱 OpenAI GLM-4-AirX
相关文章