"三板斧"解决大模型推理"慢"问题

217 阅读11分钟

☞ 如果您在大模型落地过程中遇到任何问题,可以提交工单咨询:console.bce.baidu.com/ticket/#/ti…

☞ 同时,大模型技术专家可为您提供效果调优、应用定制和技术培训等付费专属服务cloud.baidu.com/product/llm…

一、前言****

要想理解和解决大模型服务推理“慢”的问题,首先要知道大模型的推理结果是怎么产生的。

image.png 转存失败,建议直接上传图片文件

由上图可知,推理过程是不断地根据上文(robot must obey)来猜测下文最可能出现的token(orders),最后拼接而成。如果需要输出更长的结果,那么就需要不断地去根据上文推理下一个token,直到结束。所以影响大模型推理“慢”的主要原因是不同模型推理速度和输出长度

总体来说,解决大模型推理“慢”大致有三种常见方案,您可以根据实际业务场景和工程需要来选择:

1. 流式请求 (快速获得结果的头部部分tokens,尽快使用/展示,缓解长时间等待的焦虑)

2. 切换模型 (不同模型推理速度不同,可以合理选择不同效果、速度的模型)

3. 约束输出内容长度 (输出长度和推理时间成正比,合理有效的减少输出长度可以减少等待时间)

二、解决方案****

流式请求****

非流式请求与流式请求的差异****

· 非流式请求

o 阻塞式等待服务端返回数据

o 所有推理结果一次性返回

o 适用场景:需要对结果进行固定格式解析、其他对完整性结果有要求

o 入参:stream: false(默认)

o 出参:

{

  "id": "as-fg4g836x8n",

  "object": "chat.completion",

  "created": 1709716601,

  "result": "北京,简称“京”,古称燕京、北平,中华民族的发祥地之一,是中华人民共和国首都、直辖市、国家中心城市、超大城市,也是国务院批复确定的中国政治中心、文化中心、国际交往中心、科技创新中心,中国历史文化名城和古都之一,世界一线城市。\n\n北京被世界城市研究机构评为世界一线城市,联合国报告指出北京市人类发展指数居中国城市第二位。北京市成功举办夏奥会与冬奥会,成为全世界第一个“双奥之城”。北京有着3000余年的建城史和850余年的建都史,是全球拥有世界遗产(7处)最多的城市。\n\n北京是一个充满活力和创新精神的城市,也是中国传统文化与现代文明的交汇点。在这里,你可以看到古老的四合院、传统的胡同、雄伟的长城和现代化的高楼大厦交相辉映。此外,北京还拥有丰富的美食文化,如烤鸭、炸酱面等,以及各种传统艺术表演,如京剧、相声等。\n\n总的来说,北京是一个充满魅力和活力的城市,无论你是历史爱好者、美食家还是现代都市人,都能在这里找到属于自己的乐趣和归属感。",

  "is\_truncated": false,

  "need\_clear\_history": false,

  "finish\_reason": "normal",

  "usage": {

    "prompt\_tokens": 2,

    "completion\_tokens": 221,

    "total\_tokens": 223

  }

}

· 流式请求

o 服务端生成一段推理内容(非语义连贯)后即输出,调用方无需等待所有数据返回后再处理;

提升了首个token的响应时间,减少用户等待

o 适用场景:对话、检索类,无需对结果进行特殊格式解析等

o 入参:stream: true

o 出参:

data: {"id":"as-vb0m37ti8y","object":"chat.completion","created":1709089502,"sentence\_id":0,"is\_end":false,"is\_truncated":false,"result":"当然可以,","need\_clear\_history":false,"finish\_reason":"normal","usage":{"prompt\_tokens":5,"completion\_tokens":2,"total\_tokens":7}}

... ...

data: {"id":"as-vb0m37ti8y","object":"chat.completion","created":1709089508,"sentence\_id":3,"is\_end":false,"is\_truncated":false,"result":"您可以参观西安的兵马俑、大雁塔,体验兰州的黄河风情,以及在敦煌欣赏壮丽的莫高窟。","need\_clear\_history":false,"finish\_reason":"normal","usage":{"prompt\_tokens":5,"completion\_tokens":2,"total\_tokens":7}}

从上述返回结果数据结构上可以看出,调用方需要针对不同的请求方式分别处理。

更多请求示例和细节,您可以参考官方文档:cloud.baidu.com/doc/WENXINW…(此处以ERNIE-4.0-8K模型为例)

首token响应时间对比****

{

    "messages": \[

        {

            "role": "user",

            "content": "请介绍北京有哪些好玩的景点"

        }

    ],

    "stream":false

}

stream:false 时的响应时间:等待所有所有结果都返回的时间是33秒

image.png 转存失败,建议直接上传图片文件

stream:true时的首包响应时间:3秒

image.png 转存失败,建议直接上传图片文件

image.png 转存失败,建议直接上传图片文件

从上述两个测试对比可以看出,使用流式请求能够更快地获取到推理结果,随后每隔几秒就会返回更多推理文本段落。有效的缓解了用户侧等待焦虑。

切换模型****

如何选择模型?

选择模型要从不同的角度入手,如tokens单价、生成速度、结果质量等;可以根据业务场景和需求按需选择使用。

费用&场景推荐****

下面是简单列举了几个模型的费用情况,更多最新的模型资费您可以参考:cloud.baidu.com/doc/WENXINW…

模型名称输入单价输出单价适用场景
ERNIE-4.0-8K0.12元/千tokens0.12元/千tokens处理十分复杂场景、任务,需要严格按照Prompt执行的场景(复杂标签生成、参数提取、任务判断和直接搜索等)。
ERNIE-3.5-8K0.012元/千tokens0.012元/千tokens常规任务场景,如意图识别、脚本生成、直接搜索等
ERNIE-Lite-8K-09220.008元/千tokens0.008元/千tokens聊天、文章扩写等
ERNIE-Speed-8K0.004元/千tokens0.008元/千tokens聊天、简单任务处理等

 

如果您的业务场景包含不同的子场景,可以根据不同子场景对模型效果、响应速度等各方面的要求择优选择合适的模型即可(各取所长,多模融合)。

tokens响应速度****

不同模型对应的tokens生成速度也都不一样。我们可以通过下面对不同模型测试的对比结果,观察到它们之间的差异(这些结果仅代表本次测试过程):

{

    "messages": \[

        {

            "role": "user",

            "content": "帮我生成一个故宫一日游的旅游攻略"

        }

    ],

    "stream": false

}

ERNIE-4.0-8K****

测试1-模型推理时间:35.88s,推理结果402tokens:平均11.2 tokens/s (仅单次测试,供参考)

测试2-模型推理时间:50.02s,推理结果532tokens:平均10.63 tokens/s(仅单次测试,供参考)

image.png 转存失败,建议直接上传图片文件

image.png 转存失败,建议直接上传图片文件

ERNIE-3.5-8k****

测试1-模型推理时间:27.58s,推理结果453tokens:平均16.42 tokens/s(仅单次测试,供参考)

测试2-模型推理时间:26.60s,推理结果461tokens:平均17.33 tokens/s(仅单次测试,供参考)

image.png 转存失败,建议直接上传图片文件

image.png 转存失败,建议直接上传图片文件

ERNIE-Speed-8K****

测试1-模型推理时间:15.67s,推理结果606tokens:平均38.67 tokens/s(仅单次测试,供参考)

测试2-模型推理时间:15.51s,推理结果494tokens:平均31.85 tokens/s(仅单次测试,供参考)

image.png 转存失败,建议直接上传图片文件

image.png 转存失败,建议直接上传图片文件

ERNIE-Lite-8K-0308****

测试1-模型推理时间:6.05s,推理结果476tokens:平均78.67 tokens/s(仅单次测试,供参考)

测试2-模型推理时间:6.26s,推理结果495tokens:平均79.07 tokens/s(仅单次测试,供参考)

image.png 转存失败,建议直接上传图片文件

image.png 转存失败,建议直接上传图片文件

任务指令遵循效果对比****

输入相同的Prompt,测试下列4个模型的指令遵循效果

本周完成了一些研发工作,我会给你一个列表,列表结构为第一列表示工作的类型,通常有Story、Feature、Bug等;第二列表示这项工作的状态,通常有新建,开发中,测试中,已完成;第三列代表工作是否有超期风险,如:已超期,未超期;第四列表示这列工作的内容,具体描述了我做了什么。

请一步一步的思考,按照要求帮我写一份周报,我希望通过这些工作内容,生成一份周报。周报的结构由3部分组成:1. 工作摘要:请把第四列的内容进行合并总结改写成一句通顺的话,其中类似的话请合并;2. 主观分析:请根据第四列中已经超期的工作进行总结,表明需要重点关注;3.详细卡片:根据我输入的列表内容生成一个表格,给表格命名为“原始卡片”。我期望的返回格式是:## 本周进展 。  Begin:

Task 新建 已超期【后端】自动化规则动作执行数据统计 ;

Story 新建 自动化规则动作执行数据统计 ;

 TechTask 新建 未超期 快速编辑接口关联卡片支持传卡片 id, 目前需要空间前缀+编号 ;

Story 新建 未超期 iTest 接入 iCafe 新建/编辑弹窗 ;

 Task 开发中 已超期【后端】order脏数据处理:如果order不为null,isDesc为null,那么给个默认值 ;

Story 新建 未超期 迭代计划需要将viewId 同步到URL上,这样就能根据一个url唯一确定视图 ;

Bug(线上) 已完成 未超期 请求storymapping dubbo 接口超时导致卡片创建失败 ;

TechTask 完成 未超期 map-bugs 空间的「问题分类」字段有超过 1000个选项,卡顿明显。

image.png 转存失败,建议直接上传图片文件

从上面结果可以看出:

· ERNIE-4.0-8K 工作摘要、主观分析内容比较简短精炼,效果最好;ERNIE-3.5-8K效果次之;ERNIE-Speed-8K和ERNIE-Lite-8K模型内容较多,稍显啰嗦。

· 最终都按照指令要求生成了周报,结构基本符合预期,都生成了表格内容。

综上所述,ERNIE-Speed-8K和ERNIE-Lite-8K模型也能按需求输出较为完整的关键信息和表格,在保证输出速度的前提下也能得到较好的输出结果。

约束输出内容长度****

下面我们一起来看下如何约束输出内容长度达到缩短耗时的效果。以ERNIE-4.0-8K模型为例。

输入

{"messages": \[{"role": "user","content": "生成一段描述故宫的内容,**不超过100字**"}],"stream": false} 

输出结果 image.png 输出260tokens,耗时20.46秒

输入

{"messages": \[{"role": "user","content": "生成一段描述故宫的内容"}],"stream": false} 

输出结果 image.png 输出55tokens,耗时7.61秒。

从上面对比结果可以看到,通过“不超过100字”类似的Prompt约束后,模型返回的结果长度大大缩短,耗时也从20秒减少到了7秒。在这种开放性问题回答场景效果显著。

但值得注意的点是:大语言模型对Prompt中字符约束的效果和提示词内容相关(例如:写一篇符合高考要求的议论文,字数不超过10个字。提示词前后矛盾,大模型便不会遵循字数约束的要求),是一个锦上添花的方案。

三、总结****

在现有模型服务基础上,通过流式请求、切换模型和约束输出长度等三种方案,可以快速解决“大模型推理慢”的问题,成为常见的解决方案,可以根据业务场景按需使用。

当然千帆各模型推理速度、效果都在高速优化迭代中,相信我们会不断提升体验给您带来不一样惊喜,敬请期待

☞ 如果您在大模型落地过程中遇到任何问题,可以提交工单咨询:console.bce.baidu.com/ticket/#/ti…

☞ 同时,大模型技术专家可为您提供效果调优、应用定制和技术培训等付费专属服务cloud.baidu.com/product/llm…