rag系列文章目录
前言
在rag流程中,经常会遇到大模型输出慢的问题,比较影响用户体验。在大模型应用中,如何优化大模型输出性能,减少延迟呢,一般有如下准则。
一、一些优化准则
1、 加速推理
加速推理,可以有效解决输出慢的问题。怎么加速推理呢?
可以选择量化版的大模型,量化版的大模型,推理速度明显加快
可以选择同类模型中模型较小的模型,模型小一般推理速度比较快
以上两种方案,提高速度的同时,一般会降低模型的输出质量,在速度优先级高的情况下,可以使用,然后,再通过其他方法优化模型输出质量,比如更详细的prompt。
2、 输出更少的token
减少输出Token数直接减少生成内容的长度,提升速度,可以通过设置限制模型生成的最大 token 数,例如减少生成内容至 50-100 个 token。一般减少50%的输出token,就可以减少50%的延迟。
也可以prompt 明确要求模型生成简洁的回答,例如:
• “用一句话回答以下问题:”
• “生成一个不超过 50 个词的总结。”
3、 输入更少的token
输入更少的token,确实会提高性能,减少延迟,但是这不是一个重要因素,一般减少50%的提示词,才会带来1%~5%的延迟改善。除非输入的长度确实特别长,否则没有必要花费大量精力来减少prompt输入token。
4、 减少请求数
在rag流程中,一般会多次调用大模型,可以考虑将连续多次调用大模型的提示词prompt,修改为一个,这样通过调用一次大模型就可以获取多次调用大模型的结果,结果可以以json格式展示,通过字段获取需要的多个结果。
比如rag流程中,query输入后,需要进行query的意图判断,判断后还需要对query进行改写,如果使用两个提示词prompt,顺序调用就会比较慢,整合为一个prompt,可以一次性获取结果,结果以json格式输出,比如这样定义结果json:{“意图”:“抽取”,“重写问题”:“你好吗”}。
5、 并行
在rag流程中,很多调用大模型的步骤,并不是完全顺序的,此时可以并行调用大模型,这样就不用进行等待,减少延迟。
6、 让用户尽量少等待
Rag整个流程,是比较长的,让客户尽量少等待很重要。可以使用流式输出,一般大模型都是支持的,流式输出可以让用户尽早看到结果。
还可以分步展示结果,比如先识别了意图,然后进行了问题重写,这些在大模型回答之前,均可以展示给用户。例如:大模型流式输出之后,一般还需要对答案进行溯源,这一步比较慢,可以在流式输出之后进行,这样就不会影响客户体验。
7、 不要默认使用大模型
大模型能力很强,但是并不是所有的任务均需要大模型处理,有些使用常规方法会更好。比如对query进行分词,可以使用lucene api进行分词,比大模型分词更高效。
再比如抽取系统,大模型抽取出值之后,还需要对其进行转义,使用大模型对抽取值进行转义,就比较慢,不是特别合适,这里可以使用代码使用一些转义规则,对抽取值进行转义,减轻大模型压力。
总结
以上是几种优化rag流程大模型输出延迟的方案,这些方案的使用成本不同,可以针对具体情况进行使用。