Docs 菜单
Docs 主页
/

使用MongoDB Atlas和 Fireworks AI优化AI性能

MongoDB Atlas和 Fireworks AI可提供更快的AI推理速度、更低的费用和高效的 RAG 应用程序。

使用案例: 生成式 AI模型性能调优

行业: 金融服务

产品: MongoDB Atlas

合作伙伴: Fireworks AILangChain

AI应用程序需要高性能和费用效率。企业必须优化性价比,确保速度和效率的提升转化为费用效益。MongoDB和 Fireworks AI提供的解决方案可提高性能并降低费用。MongoDB处理数据管理,Fireworks AI优化模型。它们共同提高了延迟和吞吐量,同时最大限度地降低了运营成本。

该解决方案解决以下主题:

  • 使用MongoDB和 Fireworks AI提高性能并降低 TCO 的方法

  • 使用 MongoDB Atlas 和生成式人工智能模型优化 RAG 的缓存策略

  • LLM 微调 SLM ,从而在具有可比响应质量的情况下提高性能

  • 用于微调模型、加速推理和降低硬件要求的 Fireworks AI平台技术

  • 信用推荐案例研究,在延迟、内存使用和成本效益方面进行了量化改进

  • 生产部署和扩展的最佳实践

该解决方案提供了可行的策略,以提高AI性能并降低成本,并有实际示例和性能指标支持。

MongoDB 灵活的模式、高效的索引和分布式架构启用组织能够按需扩展数据基础架构。该解决方案与 Fireworks AI 的模型优化功能相结合,提高了AI性能,同时降低了成本。

FireOptimizer框架将MongoDB与 Fireworks AI 的模型调优进程集成在一起,通过以下组件加速批处理推理:

  • FireAttention:增强请求处理并优化资源利用率

  • 参数高效的微调:使用LoRAQLoRA方法,通过跟踪或标签数据高效地微调模型,从而降低计算要求

FireOptimizer

图 1。FireOptimizer 架构用于自适应优化和高质量推理

该解决方案具有以下优点:

  • 提高推理速度:FireOptimizer 的自适应推测执行可为生产工作负载提供高达 3 倍的延迟改进。

  • 自动优化:FireOptimizer 自动处理复杂的优化过程。

LLM 一次生成一个词元,这会减慢长输出的响应速度。推测性解码通过在主 LLM 处理时使用较小的草稿模型生成多个候选词元来加速此进程。LLM 仅评估和保留准确的预测。

使用通用数据进行训练的传统草稿模型适用于一般任务,但在编码或财务分析等专门领域的准确性较低。

借助 Fireworks AI,自适应推测执行通过使用特定于领域或用户配置文件的自定义模型而不是通用模型来改进这种方法。这种优化提高了准确性和命中率,例如将代码生成率从 29% 提高到 76%,降低了推理成本,并将延迟改进高达 3 倍。

使用介于 8K-32K 词元之间的长提示会给文档分析或代码完成等应用程序造成性能瓶颈。Firework AI 的 FireAttention V2 通过以下功能将长上下文任务的处理速度提高 12 倍,从而应对了这一挑战:

  • 优化注意扩展:减少冗长输入的计算开销

  • 多托管部署:跨 GPU 高效分配工作负载

  • 高级内核:简化操作以加快执行速度

FireAttention V3 扩展了对 AMD MI300 GPU 的支持,将其作为 NVIDIA 的经济高效替代方案。性能改进包括:

  • 1.4x–1.8x为 LLaMA 8B 和 70B 等模型提供更高的吞吐量

  • 低延迟场景下速度提升高达 5.5 倍

  • 通过重新设计注意内核和优化内存使用来提高性能

这些功能可高效处理特定领域任务的长上下文输入,从而增强 SLM 的微调。优化的注意机制可减少计算开销,支持更快的培训周期,并在多托管 GPU 部署中启用更大的批处理大小。

Fireworks AI优化通过三种可最大限度提高吞吐量和费用效率的技术超越了自适应推测:

  • 自适应缓存:重复使用频繁计算以跳过冗余工作,将高流量工作负载的延迟减少 30–50%

  • 可自定义的量化:在 4-/8-位精度与模型质量之间取得平衡,将批处理任务的速度提高一倍,同时保持超过 99% 的准确度

  • 分类服务:通过托管多个轻量级模型副本或跨 GPU分片大型模型来执行复杂任务,从而根据工作负载类型定制硬件分配

更小、更高效的模型为专门的适应提供了微调机会,同时保持了资源效率。针对云、设备端和专用硬件部署优化 SLM 的研究仍在继续。

微调技术包括:

1

此类别在现有预训练模型中引入了额外的可训练参数,而无需修改原始权重。

  • 适配器:在模型层之间插入小型可训练层。适配器学习;了解特定于任务的转换,而无需更改预先训练的参数。

  • 软提示:可训练的向量嵌入附加到输入序列。它们指南模型行为执行所需的任务。

  • 前缀调整:向输入序列添加可训练前缀。前缀无需修改核心模型学习;了解特定于任务的信息。

2

这种方法使用低秩近似值重新参数化现有模型权重,以减少可训练参数。

  • 低秩适应:使用低秩矩阵近似关注层中的权重更新。这会减少可训练参数。

  • 量化 LoRA:通过量化技术增强 LoRA,从而降低内存使用量和计算成本。

3

此类别有选择地微调特定的预训练模型参数,从而提高计算效率。

  • BitFit:仅微调偏差项或其他特定参数,从而提高计算效率。

  • DiffPruning:识别并删除对模型性能影响最小的参数,从而减少可训练参数。

4

这些策略会冻结某些预先训练的模型层,同时对其他层进行微调,从而优化适应。

  • 冻结并重新配置:冻结特定模型层并微调剩余层以优化适应。

  • FishMask:使用遮罩有选择地冻结或微调特定任务的图层。

最流行的技术是 PEFT。PEFT 技术通过调整一小部分参数,使大型预训练模型适应新任务。与完全微调相比,这种方法可以防止过度拟合,减少计算和内存需求,并减轻法学硕士中的灾难性遗忘。PEFT 可以实现高效的模型定制,而无需完全重新训练,因此非常适合资源有限的环境。

您可以将 PEFT LoRA 技术与模型交互生成的跟踪数据和标记数据(为任务进行显式注释)一起使用,以微调较小的模型,从而在特定任务上获得高性能,而无需大量计算资源。

对于实际应用程序,此示例使用MongoDB信用应用程序演示。该演示演示了MongoDB通过预测分析进行信用评分,使用生成式人工智能解释信用评分结果,并使用 RAG 和 LLMs 执行信用推荐。这个微调示例侧重于使用法学硕士简化信用评级解释。该应用程序包括用户配置文件生成、产品推荐和带摘要的重新排名。在MongoDB信用卡应用程序解决方案库页面查找应用程序设计和源代码的详细信息。

由于涉及数十亿个参数的复杂计算,法学硕士会导致响应时间减慢。信用卡建议需要多个 LLM 查询,导致总响应时间为 10 到 20 秒,其中每个查询需要 5 或更多秒。为数百万用户部署和扩展LLM 既困难又昂贵。

  • 小语言模型:SLM 提供更快的处理速度和费用效率。SLM 需要的计算能力较低,因此适用于资源有限的设备。它们可以提供更快的响应并降低运营成本。

  • PEFT 和 LoRA:PEFT 和 LoRA 通过优化参数子集来提高效率。这种方法降低了内存要求和运营成本。MongoDB集成增强了数据处理并实现了高效的模型调优。

  • MongoDB:MongoDB提供数据管理和实时集成,可提高运营效率。MongoDB将跟踪数据存储为JSON,并实现高效检索和存储,为模型微调增加了价值。MongoDB充当缓存层,以避免对相同请求重复调用 LLM。

信用卡应用程序演示以清晰的语言向客户数解释信用评分。像 Meta 的 LLaMA 3.1-405B 这样的 LLM 使用用户配置文件参数、模型输入功能以及来自预测客户数信用评分或评级的模型的功能重要性来生成这些解释。由于有效推理和解释的参数有限,SLM 无法始终如一地完成这些任务。使用 Fireworks AI微调平台的微调进程来实现所需的结果。

微调 SLM 的进程使用以下工作流程:

LLM 微调过程

图 2. LLM/SLM 微调过程

微调进程从收集特定于任务的相关数据开始。图 2 显示了 MongoDB Atlas 如何根据信用卡应用程序输入缓存特定用户的 LLM/SLM 响应。用户可以在 Web用户界面上模拟信用档案。以下Python代码片段演示了如何设立装饰器以在MongoDB Atlas中缓存LLM/SLM响应:

class mdbcache:
def __init__(self, function):
self.function = function
def __call__(self, *args, **kwargs):
key = str(args) + str(kwargs)
ele = ccol.find_one({"key": key})
if ele:
return ele["response"]
value = self.function(*args, **kwargs)
ccol.insert_one({"key":key, "response": value})
return value
@mdbcache
def invoke_llm(prompt):
"""
Invoke the language model with the given prompt with cache. The llm.invoke method can invoke either a LLM or SLM based on the Fireworks Model ID provided at the start of application.
Args:
prompt (str): The prompt to pass to the LLM.
"""
response = llm.invoke(prompt)
return response

如图所示,您可以使用模拟器生成培训数据集。此示例通过分层采样模拟用户配置文件,为所有三个信用评级(良好、正常和差)选择相同的示例。此演示生成大约 1、300示例响应。

将生成的响应转换为 Fireworks AI平台支持进行微调的格式。运行以下代码,生成微调进程中使用的 cc_cache.jsonl文件:

from pymongo import MongoClient
import pandas as pd
import json
client = MongoClient("mongodb+srv://<uid>:<pwd>@bfsi-demo.2wqno.mongodb.net/?retryWrites=true&w=majority")
df = pd.DataFrame.from_records(client["bfsi-genai"]["cc_cache"].find({},{"_id": 0}))
df["prompt"] = df["key"].apply(lambda x: x.strip('(').strip('"').strip(")").strip("\\"))
del df["key"]
df["response"] = df["response"].apply(lambda x: x.strip())
df.to_json("cc_cache.jsonl", orient="records", lines=True)
# transform cache to messages
messages = []
for item in df.iterrows():
messages += [{"messages": [{"role": "user", "content": item["prompt"].strip(" \\")}, {"role": "assistant", "content": item["response"]}]}]
with open("cc_cache.jsonl", "w") as f:
for item in messages:
f.write(json.dumps(item) + "\n")

准备好数据集并生成 cc_cache.jsonl文件后,按照以下步骤微调预训练的 llama-v3p1-8b-instruct 模型:

1
pip install firectl
2
firectl login
3
firectl create dataset <dataset_name> cc_cache.jsonl
4
firectl create sftj --base-model accounts/fireworks/models/llama-v3p1-8b-instruct --dataset <dataset_name> --output-model ccmodel --lora-rank 8 --epochs 1
5
监控微调过程

图 3. 监控微调过程

6
firectl deploy ccmodel

此过程演示了MongoDB和Fireworks AI集成如何以低费用提高AI模型性能。

在 Fireworks 平台上将模型作为无服务器API部署后,使用模型 id models/ft-m88hxaga-pi11m(如图 2 所示)通过首选语言模型框架调用微调的 SLM 模型。

针对信用推荐对 SLM 进行微调会产生以下结果:

  1. 响应时间缩短:LLM 响应时间平均为 5 秒。SLM 将这一时间减少到大约 0.15 秒,从而将延迟减少了 19 倍。

    import time
    class tiktok:
    """
    Decorator to time the execution of a function and log the time taken.
    """
    def __init__(self, function):
    self.function = function
    def __call__(self, *args, **kwargs):
    import time
    start = time.time()
    value = self.function(*args, **kwargs)
    end = time.time()
    print(f"Time taken for {self.function.__name__}: {end - start} seconds")
    return value
    @tiktok
    @mdbcache
    def invoke_llm(prompt):
    """
    Invoke the language model with the given prompt with cache. The
    invoke LLM method can invoke either a LLM or SLM based on the
    Fireworks Model ID initialized.
    Args:
    prompt (str): The prompt to pass to the LLM.
    """
    ...
    模型
    推理时间 1 (秒)
    推理时间 2 (秒)
    推理时间 3 (秒)
    平均时间(秒)

    llama-v3p1-405b-instruct

    5.5954

    7.5936

    4.9121

    6.0337

    SLM - fine-tuned llama-v3p1-8b

    0.3554

    0.0480

    0.0473

    0.1502

  2. 内存减少:LLM 通常需要 8x80 GB VRAM。SLM 使用 16 GB VRAM 运行,将内存使用量减少 97.5%。

  3. 减少硬件:法学硕士需要高端 GPU 或多台服务器。SLM 可以部署在标准 CPU 或单个服务器上,从而降低硬件成本。

  • 降低总体拥有费用:LoRA 和 QLoRA 技术降低了 SLM 微调的计算要求。MongoDB 的分布式架构和高效索引按需扩展数据扩展架构,从而最大限度地降低存储成本并减少运营支出。

  • 简化数据和AI工作流程:MongoDB为AI模型实现了实时数据集成。与 Fireworks AI 的微调工具集成,创建的工作流程可保持模型更新并提高决策准确性。

  • 增强 RAG 解决方案: MongoDB Atlas和 Fireworks AI相结合创建了 RAG 框架,改进了数据存储和检索。MongoDB Atlas提供可扩展的存储,而Fireworks AI提供托管的LLM/SLM托管。

  • Wei You Pan,MongoDB

  • Ashwin Gangadhar,MongoDB

  • Peyman Parsi, MongoDB

  • Benny Chen,Fireworks AI

  • Ayaan Momin,Fireworks AI

后退

使用 Agentic AI实现文档智能

在此页面上