Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語
Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語

期待从检索增强生成和自托管LLMs中获得什么

检索增强生成(RAG)是一种人工智能框架,旨在通过将其与从外部知识库检索到的信息集成,增强LLM。鉴于RAG近来所受到的关注不断增加,可以合理地得出结论,RAG现在是人工智能/自然语言处理(AI/NLP)生态系统中的一个重要话题。因此,让我们深入讨论一下当RAG系统与自托管LLMs配对时可以期待什么。

在题为“*发现检索增强生成的性能提升 (opens new window)”的博客文章中,我们研究了检索到的文档数量如何提高LLM答案的质量。我们还描述了基于存储在向量数据库(如MyScale (opens new window))中的MMLU数据集的矢量化LLM如何在集成上下文相关知识时生成更准确的响应,而无需对数据集进行微调。

因此,要点如下:

RAG通过使用外部数据增强提示来填补知识空白,减少幻觉。

在应用程序中使用外部LLM API可能会对数据安全性造成潜在风险,降低控制力,并且在用户量较大时会显著增加成本。因此,引发的问题是:

如何确保更大的数据安全性并保持对系统的控制?

简明的答案是使用自托管LLM。这种方法不仅可以提供对数据和模型的更高控制力,还可以增强数据隐私和安全性,同时提高成本效益。

# 为什么选择自托管LLMs?

基于云的大型语言模型即服务(如OpenAI的ChatGPT)易于访问,并且可以为各种应用领域增加价值,提供即时和可追溯的访问。然而,公共LLM提供商可能会侵犯数据安全和隐私,以及对过度控制、知识泄漏和成本效益的担忧。

注意:

如果您对其中任何/所有这些问题感同身受,那么使用自托管LLM是值得的。

随着我们继续讨论,让我们详细讨论这四个重要问题:

# 🔒 隐私

在将LLM API与应用程序集成时,隐私必须是首要关注的问题。

为什么隐私是一个问题?

对这个问题的回答有几个方面,如下所示:

  • LLM服务提供商可能会使用您的个人信息进行训练或分析,从而危及隐私和安全。
  • 其次,LLM提供商可能会将您的搜索查询纳入其训练数据中。

自托管LLMs解决了这些问题,因为它们是安全的,您的数据永远不会暴露给第三方API。

# 🔧 控制力

LLM服务(如OpenAI GPT-3.5)通常会对暴力和寻求医疗建议等主题进行审查。您无法控制哪些内容被审查。然而,您可能希望开发自己的审查模型(和规则)。

如何采用符合您要求的审查模型?

总体上理论上的答案是通过构建定制的过滤器来对LLM进行自定义微调,而不是使用提示,因为经过微调的模型更加稳定。此外,自托管精调模型提供了修改和覆盖默认审查内容的自由,这是公共领域LLMs所不具备的。

# 📖 知识泄漏

如上所述,使用第三方LLM服务器时,知识泄漏是一个问题,特别是如果您运行包含专有业务信息的查询。

注意:

可能的知识泄漏是双向的,从提示到LLM,然后返回到查询应用程序。

如何防止知识泄漏?

总结起来,使用自托管LLM而不是公共领域LLM,因为您的专有业务知识库是其最有价值的资产之一。

# 💰 成本效益

自托管LLMs是否比云托管LLMs更具成本效益还有争议。文章“连续批处理如何在LLM推理中实现23倍吞吐量提升并降低p50延迟 (opens new window)”中描述的研究报告称,当延迟和吞吐量与先进的连续批处理策略正确平衡时,自托管LLMs更具成本效益。

注意:

我们将在本文后面进一步扩展这个概念。

# 通过自托管LLMs最大化您的RAG

LLMs消耗计算资源。它们需要大量资源来进行推理和提供响应。添加RAG只会增加对计算资源的需求,因为它们可以为了提高准确性而增加超过2000个标记。不幸的是,这些额外的标记会产生额外的成本,特别是如果您与像OpenAI这样的开源LLM API进行接口交互。

通过自托管LLM,使用矩阵和方法(如KV Cache (opens new window)Continuous Batching (opens new window))可以改善效率,随着提示的增加,这些数字可能会有所改善。然而,另一方面,大多数基于云的核心GPU计算平台(如RunPod (opens new window))计费的是运行时间,而不是标记吞吐量:这对于自托管的RAG系统来说是个好消息,导致每个提示标记的较低成本费率。

下表讲述了自托管LLMs与RAG相结合可以提供成本效益和准确性的故事。总结如下:

  • 当达到最大限度时,成本仅为gpt-3.5-turbo的10%。
  • llama-2-13b-chat RAG流水线仅花费0.04美元,用于1840个标记的十个上下文,是没有任何上下文的gpt-3.5-turbo成本的三分之一。

注意:

有关RAG的性能提升的更多详细信息,请参阅我们的第一篇RAG博客文章 (opens new window)

表格:总成本比较(美分)

# 上下文 平均标记数 LLaMA-2-13B准确性提升 llama-2-13b-chat @ 1线程 llama-2-13b-chat @ 8线程 llama-2-13b-chat @ 32线程 gpt-3.5-turbo
0 417 +0.00% 0.3090 0.0423 0.0143 0.1225
1 554 +4.83% 0.3151 0.0450 0.0166 0.1431
3 737 +6.80% 0.3366 0.0514 0.0201 0.1705
5 1159 +9.07% 0.3627 0.0575 0.0271 0.2339
10 1840 +8.77% 0.4207 0.0717 0.0400 0.3360

# 我们的方法

我们使用text-generation-inference (opens new window)在本文中的所有评估中运行了一个未量化的llama-2-13b-chat模型。我们还租用了一个云Pod,配备1个NVIDIA A100 80GB,每小时费用为1.99美元。这种规模的Pod可以部署llama-2-13b-chat。值得注意的是,每个数字都使用第一个四分位数作为下界,第三个四分位数作为上界,以箱线图的形式直观地表示数据的分布。

注意:

使用70B的模型需要更多可用的GPU内存。

# 将LLM吞吐量推向极限

整体吞吐量应该是首要考虑的因素。我们将LLM从1个线程过载到64个线程,以模拟许多同时到达的查询。下图描述了随着提示变大,生成吞吐量如何下降。无论如何增加并发性,生成吞吐量都会在大约400个标记/秒左右收敛。

添加提示会降低吞吐量。作为解决方案,我们建议使用少于10个上下文的RAG来平衡准确性和吞吐量。

生成标记吞吐量

# 测量更长提示的启动时间

模型的响应速度对我们来说至关重要。我们还知道,非正式语言建模的生成过程是迭代的。为了提高模型的响应时间,我们使用KV Cache缓存了从先前生成的结果,以减少使用KV Cache生成LLM的计算时间。

注意:

您始终需要计算所有输入提示的键和值。

对于更长的提示,启动过程会变慢

随着提示长度的增加,我们继续评估模型的启动时间。下图使用对数刻度来说明启动时间。

以下是关于此图表的几点说明:

  • 32个线程以下的启动时间是可以接受的;
  • 大多数样本的启动时间低于1000毫秒;
  • 当我们增加并发性时,启动时间急剧上升;
  • 使用64个线程的示例从1000毫秒以上开始,最终在大约10秒结束;
  • 这对于用户来说等待时间太长了。

不同并发性的启动时间

我们的设置显示,当并发性低于32个线程时,平均启动时间约为1000毫秒。因此,我们不建议过度加载LLM,因为启动时间将变得非常长。

不同并发性的启动时间

# 评估生成延迟

我们知道,使用KV Cache的LLM生成可以分为启动时间和生成时间;我们可以评估实际的生成延迟,即用户等待在应用程序中看到下一个标记所需的时间。

生成延迟

生成延迟比启动时间更稳定,因为在启动过程中较大的提示很难放置在连续批处理策略中。因此,当您有更多请求同时到达时,您必须等待前一个提示被缓存,然后才能显示下一个标记。

生成P95延迟

另一方面,一旦建立了缓存,生成就变得简单得多,因为KV缓存减少了迭代次数,并且在批次中有空位时,生成被安排进行。延迟在不同的步骤上升,这些步骤随着更大的提示而到达得更早,并且批次饱和。更多的请求很快就会耗尽LLM,增加限制同时提供更多的请求。

合理地预期生成延迟在90毫秒以下,甚至在60毫秒左右,如果您不过度使用上下文和并发性。因此,在此设置中,我们建议使用32个并发性的五个上下文。

# 比较gpt-3.5-turbo的成本

我们非常关注这个解决方案的成本。因此,我们根据上述收集的数据估算了成本,并为我们的流水线创建了以下成本模型:

  • 是云GPU服务器的每小时费用。
  • 分别是每个请求的启动时间和生成时间(以毫秒为单位)。
  • 计算并行处理的线程数。

一个查询的估计总成本

使用KV Cache和连续批处理可以提高系统的成本效益,通过正确的设置,潜在地将成本降低到gpt-3.5-turbo的十分之一。建议使用32个线程的并发性以获得最佳结果。

Boost Your AI App Efficiency now
Sign up for free to benefit from 150+ QPS with 5,000,000 vectors
Free Trial
Explore our product

# 接下来做什么?

我们提出的最后一个问题是:

我们可以从这些图表中学到什么,并从哪里继续?

# 在延迟和吞吐量之间取得平衡

延迟和吞吐量之间总是存在权衡。估计您的每日使用量和用户对延迟的容忍度是一个很好的起点。为了最大化每美元的性能,我们建议您在1x NVIDIA A100 80GB上预期32个并发性,使用llama-2-13b或类似模型。这样可以获得最佳吞吐量、相对较低的延迟和合理的预算。您始终可以更改决策;请记住始终首先估计您的用例。

# 模型微调:更长和更强

您现在可以使用RAG系统对模型进行微调。这将帮助模型适应更长的上下文。有一些开源存储库对LLMs进行了更长输入长度的微调,例如Long-LLaMA (opens new window)。使用更长上下文进行微调的模型是良好的上下文学习者,并且比通过RoPE rescaling (opens new window)拉伸的模型表现更好。

# 将MyScale与RAG系统配对:推理与数据库成本分析

通过将MyScale和RunPod的10个A100 GPU与MyScale(向量数据库)配对,您可以轻松配置一个Llama2-13B + Wikipedia知识库RAG系统,无缝满足多达100个并发用户的需求。

在我们结束这个讨论之前,让我们考虑一下运行这样一个系统的简单成本分析:

推荐产品 建议规格 每月大约成本(美元)
RunPod 10个A100 GPU $14,000
MyScale 4000万个向量(记录)x 2个副本 $2,000
总计 $16,000

注意:

  • 这些成本是基于上述突出的成本计算的近似值。
  • 大规模的RAG系统显着提高了LLM的性能,向量数据库服务的额外成本不到15%。
  • 随着用户数量的增加,向量数据库的摊销成本将更低。
Join Our Newsletter

# 总结

直观地可以得出结论,RAG中的额外提示成本更高且更慢。然而,我们的评估显示,这是一个适用于实际应用的可行解决方案。本次评估还评估了您在部署具有外部知识库的LLM时可以期望的成本和整体性能,帮助您建立成本模型。

最后,我们可以看到,MyScale的成本效益使RAG系统具有更高的可扩展性!

因此,如果您有兴趣评估RAG流水线的问答性能,请加入我们的discord (opens new window)推特 (opens new window)。您还可以使用RQABenchmark (opens new window)评估自己的RAG流水线!

我们将向您发布有关LLMs和向量数据库的最新发现!

Keep Reading
images
SQL向量数据库正在塑造新的LLM和大数据范式

强大的大型语言模型(LLM)如GPT-4、Gemini 1.5和Claude 3在人工智能和技术领域产生了巨大影响。一些模型能够处理超过100万个标记,它们处理长上下文的能力令人印象深刻。然而: 许多数据结构对LLM来 ...

images
过滤向量搜索:重要性及技术解析

向量搜索可以在大量文本、图像和其他数据中快速定位语义上相似或相关的候选。然而,在实际应用场景中,纯向量搜索通常是不够的。 实际数据通常包含时间、类别、用户 ID 和其他关键词等属性。对这些属性应用一个或多个过滤条件可以显著提高检索增强生成(RAG)系统的准确性,同时为大规模多租户系统奠定基础。基于 ClickHouse 数据库开发的 MyScale 支持各种 SQL 数据类型,实现了高准确性和高 ...

Start building your Al projects with MyScale today

Free Trial
Contact Us