Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ /
Atlas 架构中心
/ / /

使用 Fireworks AI 和 MongoDB 优化生成式人工智能应用程序以实现最佳性能

使用 MongoDB 和 Fireworks AI 优化 AI:实现更快的推理、更低的成本和更高效的 RAG 应用。

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

行业: 金融服务

产品: MongoDB Atlas

合作伙伴: Fireworks AILangChain

在当今 AI 驱动的环境中,提供高性能仅仅是成功的一半。真正的成功在于实现性能与总拥有成本 (TCO) 之间的完美平衡。企业始终面临优化性价比的挑战,要确保速度或效率的每一次提升都能转化为切实的成本收益。MongoDB 与 Fireworks.AI 建立了战略合作伙伴关系,这一强强联合将助力组织在提升性能的同时节省资源。这一协作将 MongoDB 强大的数据管理能力与 Fireworks.AI 的模型优化工具无缝融合,不仅缩短了延迟,增加了吞吐量,还有效降低了运营成本。

本文将讨论以下主题:

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

  • 将 MongoDB Atlas 与生成式 AI 模型结合使用时,制定策略来缓存查询和响应,以帮助优化后续的检索增强生成 (RAG)。

  • 基于大型语言模型 (LLM) 微调小型语言模型 (SLM),以实现更快的性能和相当的响应质量。

  • Fireworks.AI 平台采用的技术可以微调模型、加快推理速度,并降低 LLM 的硬件需求。

  • 一个信用卡推荐系统的案例研究,展示了延迟、内存利用率和成本效益方面的量化改进。

  • 在生产环境中部署和扩展这些解决方案的最佳实践。

读完本文后,读者将获得一套提升 AI 性能且降低开支的综合且可行的策略,同时配合实践案例与性能指标作为支撑。

MongoDB 以其灵活的模式、高效的索引和分布式架构而闻名,支持组织按需扩展其数据基础架构。当与 Fireworks.AI 的尖端模型调优功能结合使用时,企业便可以实现显著的效率和性能提升,且不会产生任何财务压力。

FireOptimizer 和 FireAttention:核心组件简介

这种优化方法的核心是 FireOptimizer 框架,它将 MongoDB 灵活的高性能数据库与 Fireworks.AI 的模型微调流程相集成。

该框架通过诸如 FireAttention 之类的解决方案加速批处理推理,FireAttention 利用现有硬件提升请求处理效率,从而优化资源利用。此外,参数高效微调 (PEFT),包括 LoRA 和 QLoRA 等方法,能够利用轨迹数据或标签数据高效地微调模型以完成特定任务,从而提升模型的可移植性并降低计算资源消耗。

FireOptimizer

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

可实现的关键优势是:

  • 更快的推理:通过 FireOptimizer 的自适应推测执行,各种模型的生产工作负载实现了最高达 3 倍的延迟提升,确保应用始终保持高度响应。

  • 无忧优化:FireOptimizer 自动化复杂的优化过程,让您专注于构建应用程序,其余工作由我们来处理。

让我们更深入地了解 FireOptimizer 框架。

LLM 通常一次生成一个单词(或词元)的输出,这会使响应速度变慢,尤其是对于较长的输出。为了加速这一过程,采用了一种称为“推测解码”的技术。该技术涉及一个规模较小、速度更快的草稿模型,它可以在主 LLM 仍在处理时,提前快速生成多个可能的单词或短语。然后,主 LLM 会评估这些猜测的单词或短语,并只保留准确的猜测结果。这种技术通常被称为推测执行或解码

这种传统方法的局限在于,大多数草稿模型都是基于通用数据(例如公开对话)进行训练的。虽然这种方法对一般任务有效,但在诸如编码或金融分析等专业场景中的准确性或“命中率”会显著降低。

相比之下,Fireworks AI 通过自适应推测执行增强了这一方法。它并非使用通用的草稿模型,而是使用针对特定领域或用户配置文件定制的模型。利用这种自适应方法,它可以根据特定领域的特征优化预测。这种方法提高了准确性,增加了命中率(例如,在代码生成任务中将命中率从 29% 提高到 76%),并降低了推理成本,最终实现了高达 3 倍的延迟优化。

专有 LLM 服务堆栈:掌握长上下文工作负载

处理长提示(8K-32K 词元)对于文档分析或代码补全等应用程序至关重要,但往往会拖慢系统速度。Fireworks AI 的 FireAttention V2 解决了这个问题,将长上下文任务的处理速度提高了 12 倍。

  • 优化的注意力扩展:在处理较长输入时减少计算开销。

  • 多主机部署:在多个 GPU 间高效分配工作负载。

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

借助 FireAttention V3,Fireworks AI 将其领先优势扩大到 AMD 的 MI300 GPU,提供了一个经济高效的 NVIDIA 替代方案。性能亮点包括:

  • 1.4x–1.8x 更高的吞吐量:针对 LLaMA 8B 和 70B 等模型,相较于标准配置。

  • 速度提升高达 5.5 倍:在低延迟场景中,性能优于 AMD 自家的 vLLM。

  • 这一飞跃得益于架构上的调整,例如重新设计的注意力核以及更智能地使用内存,这证明了 AMD GPU 现在已成为 LLM 推理领域的强势竞争者。

借助上述功能,FireAttention 可以通过高效处理长上下文输入(8K–32K 词元)显著改进小型语言模型的微调,而这对于文档分析或多轮对话等特定领域的任务往往至关重要。其优化的注意力机制减少了计算开销,缩短了训练周期并增加了批处理大小。通过支持多主机 GPU 部署和高级注意力内核,它简化了硬件上的工作负载,提高了吞吐量,降低了延迟,并能更快、更经济地完成微调。

规模化效率提升:自适应资源优化

Fireworks AI 的优化不仅限于自适应推测解码。其三大关键技术可最大限度提升吞吐量与成本效益:

  • 自适应缓存:复用频繁计算(例如,重复的 API 调用)以跳过冗余工作,将高流量工作负载的延迟降低 30–50%。

  • 可定制的量化:在保持模型质量的同时,平衡 4-位和 8-位精度,实现速度翻倍,并在批处理等任务中保持超过 99% 的准确率。

  • 解耦式服务:根据工作负载类型调整硬件分配,可以托管多个轻量级模型副本(例如,8 个 GPU → 8 个并行实例),也可以将大型模型(例如,LLaMA 70B)分片到多个 GPU 以处理复杂任务。

更小、更高效的模型为微调提供了独特的机会,使其能够在保持资源效率的同时进行专门的适应。由于对云、设备、专用硬件等多种媒介进行微调或优化的 SLM 变得极具竞争力,该领域的研究一直在持续进行。

这些微调技术可以分为以下几类:

1

此类别包括在不修改现有预训练模型权重的情况下,向模型引入额外可训练参数的方法。

  • 适配器:这些方法涉及在预训练模型的各层之间插入小型、可训练的层,称为适配器模块。这些适配器学习任务特定的转换,使其能够在不更改预训练参数的情况下适应新任务。

  • 软提示:这些是附加到输入序列的可训练向量嵌入。它们作为指导线索,影响模型为完成预期任务所采取的行为。

  • 前缀调整:该技术涉及在输入序列中添加一个可训练的前缀。此前缀会学习特定任务的信息,而无需修改核心模型架构。

2

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

  • 低秩适应(LoRA):LoRA 使用低秩矩阵来近似预训练模型中注意力层的权重更新。这显著减少了可训练参数的数量。

  • 量化 LoRA (QLoRA):QLoRA 通过引入量化技术增强了 LoRA,进一步减少了内存使用和计算成本。

3

该类别专注于选择性地微调预训练模型的特定参数,从而实现更高的计算效率。

  • BitFit:此方法仅微调预训练模型的偏置项或其他特定参数,以提高计算效率。

  • 差异化修剪:此技术将识别并删除对模型性能影响最小的参数,从而减少可训练参数的数量。

4

这些策略包括在微调预训练模型的某些层级时策略化地冻结其他层级,以优化适应过程。

  • 冻结与重新配置(FAR):FAR 涉及冻结预训练模型的特定层,并对剩余层进行微调,以优化模型的适应性。

  • FishMask:此技术使用掩码来选择性地冻结或微调层级,以更好地适应特定任务。

其中最受欢迎的技术是基于 PEFT 的技术。PEFT 技术与大型预训练模型结合使用,可以通过仅调整其一小部分参数来使其适应新任务。这种方法有助于防止过拟合,尤其是针对较小的数据集,并且与全面微调相比,显著降低了计算和内存需求。PEFT 还能有效缓解 LLM 中的灾难性遗忘问题。这些技术无需完全重新训练即可实现高效的模型定制,因而成为资源受限环境的理想选择。

我们可以采用 PEFT LoRA 技术,结合轨迹数据(模型交互产生的数据)和标注数据(为特定任务明确标注的数据),实现对小型模型的微调,从而在无需大量计算资源的情况下,在特定任务上达到高性能表现。

为了突出实际应用,我们以一个 MongoDB 信用卡申请演示为例,展示如何利用 MongoDB 进行信用评分的预测分析,使用生成式人工智能解释信用评分结果,并通过结合大语言模型 (LLM) 的检索增强生成 (RAG) 方法进行信用卡推荐。在本次微调示例中,我们将重点使用大语言模型 (LLM) 简化信用评级说明。该应用涵盖多个功能范围,即用户个人资料生成、产品推荐以及带有摘要功能的重新排序任务。应用程序的设计细节和源代码可在 MongoDB Credit Card Application Solution Library Page 中找到。

由于 LLM 必须对数十亿个参数执行复杂的计算,因此可能会导致响应时间变慢。例如,生成信用卡推荐可能需要多个 LLM 查询,导致总响应时间长达 10 到 20 秒(每个查询需要 5 秒或更长时间)。此外,LLM 的规模化生产和百万级用户部署也面临很大困难且成本高昂。

利用 SLM,企业可以显著提升处理速度和成本效率。SLM 需要的计算能力较低,非常适合资源有限的设备,同时还能提供更快的响应速度并降低运营成本。

PEFT 及其 LoRA 方法通过仅优化部分参数显著提高了效率。这种方法减少了内存需求并降低了运营成本。与 MongoDB 的协同作用增强了数据处理能力,并促进了高效的模型调优过程。

MongoDB 作为不可或缺的部分,通过无缝数据管理与实时集成能力,显著提升系统运营效率。通过将跟踪数据存储为 JSON 并实现高效的检索和存储,MongoDB 为微调模型的过程增加了可观的价值。MongoDB 还可以兼作缓存层,以避免在对相同数据的重复请求上不必要地调用 LLM。

信用卡申请演示的一个关键方面是用清晰、通俗的语言向客户解释信用评分或信用评级。前沿大语言模型(如 Meta 的 LLaMA 3.1-405B)可基于以下要素生成解释性分析:用户个人资料参数、模型输入特征,以及预测客户替代性信用评分/信用评级所用模型的特征重要性。然而,由于有效推理和解释所需的参数数量有限,这些任务无法通过 SLM 一致地实现。为了实现预期的结果,我们需要利用 Fireworks AI 微调平台中所述的微调过程。

以下步骤将逐步介绍如何使用该平台来微调 SLM。

以下是如何利用此平台和工具:

LLM 微调过程

图 2. LLM/SLM 微调过程

微调过程从收集相关的、特定任务的数据开始。如图 2 所示,MongoDB Atlas 作为一款通用型数据库,可以用于缓存大语言模型 (LLM) 或小语言模型 (SLM) 基于用户在信用卡申请中的输入生成的响应(用户被允许在网页界面上模拟用户的信用档案)。以下是一个示例 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 applicaiton.
Args:
prompt (str): The prompt to pass to the LLM.
"""
response = llm.invoke(prompt)
return response

如图所示,微调过程所需的培训数据集可以通过模拟器生成。这里,我们尝试使用分层抽样方法来模拟用户个人资料,从三个信用等级(良好、一般和较差)分别选取相等数量的示例。在本次演示中,我们生成了大约 1300+ 个示例响应。

现在,生成的响应需要被转换成 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 模型性能的流程。这在上述提供的逐步微调指南中得到了体现。

在将模型作为无服务器 API 部署到 Fireworks 平台后,图 2 中显示的模型 ID(models/ft-m88hxaga-pi11m)可用于通过您选择的语言模型框架调用微调的 SLM 模型。

对小语言模型 (SLM) 进行信用卡推荐的微调已取得了显著成果:

在将上述微调步骤应用于替代性信用卡产品推荐流程中的 SLM(小型语言模型)后,我们观察到:经过微调的 SLM 使流程响应时间得到显著提升

  1. 响应时间改进:最初,大型 LLM 的响应时间约为 5 秒。通过使用小语言模型 (SLM),延迟可减少约 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 invole LLM method can invoke either a LLM or SLM based on the Fireworks Model ID initialised.
    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 通常需要大量内存,通常在 8×80 GB VRAM 范围内。使用大约 16 GB 的 VRAM,SLM 可以高效运行,从而将内存使用量减少 97.5%。

  3. 硬件减少:部署 LLM 通常需要高端 GPU 或多台服务器。使用小语言模型 (SLM) 可以大幅降低硬件需求,可能实现基于标准 CPU 或单台服务器的部署,从而大幅降低硬件成本。

MongoDB 与 Fireworks AI 的集成显著提高了培训 SLM 的效率和成本效益。这种合作伙伴关系使先进的 AI 解决方案更易获取且经济上可行,确保面向未来的 AI 投资。本次合作的关键价值主张包括:

  • 降低总体拥有成本:Fireworks AI 的 LoRA 和 qLoRA 技术通过应用低秩适配和量化,最大限度地减少了计算资源需求,从而降低了微调小语言模型 (SLM) 的成本。MongoDB 通过其分布式架构、灵活的模式设计和高效的索引机制,支持按需扩展数据基础设施并最大限度地降低存储成本,从而减少了资本支出 (CapEx) 和运营支出 (OpEx)。

  • 集成数据和 AI 工作流程:MongoDB 促进实时数据集成,使 AI 模型能够即时获取数据,从而提高效率。与 Fireworks AI 的微调工具的集成确保了简化的工作流程,使 AI 模型保持持续更新和相关性,从而改善决策并提供准确的见解。

  • 强大的 RAG 解决方案:MongoDB Atlas 与 Fireworks AI 的无缝结合,简化了 RAG 框架的创建,提升了数据存储和检索的效率。MongoDB Atlas 提供了可扩展的向量存储平台,而 Fireworks AI 则提供托管的大语言模型 (LLM)/小语言模型 (SLM) 服务及其他功能。我们共同实现了可扩展且智能的系统,通过相关信息检索来提升用户体验。

采用此策略的组织能够实现 AI 性能加速、资源节省和未来可持续的解决方案,从而推动各行业的创新与竞争优势。

Fireworks AI 平台如何加速推理速度和吞吐量:

  • Wei You Pan,MongoDB

  • Ashwin Gangadhar,MongoDB

  • Peyman Parsi, MongoDB

  • Benny Chen,Fireworks AI

  • Ayaan Momin,Fireworks AI

后退

信用卡应用程序

在此页面上