다음을 통해 공유

跟踪概念

小窍门

本指南中解释的一个很好的助手是 跟踪数据模型 指南,该指南将展示 MLflow 跟踪如何表示此处讨论的概念。

什么是追踪?

机器学习(ML)上下文中的跟踪是指在执行 ML 模型期间详细跟踪和记录数据流和处理步骤。 它提供从数据输入到预测输出的各个阶段的透明性和洞察力。 此详细跟踪对于调试、优化和了解 ML 模型的性能至关重要。

MLflow 跟踪

Span概念

在跟踪上下文中,跨度表示在系统中进行的单个操作。 它捕获有关作的元数据,例如开始时间、结束时间和其他上下文信息。 除了元数据外,还会记录输入到工作单元的内容(例如,对 GenAI 模型的调用、来自向量存储的检索查询或函数调用)以及操作输出。

下图演示了对 GenAI 模型的调用以及跨度内相关信息的集合。 范围包括元数据,例如开始时间、结束时间和请求参数,以及调用调用的输入和输出。

跨度结构

跟踪的概念

在 GenAI 跟踪的上下文中,跟踪是指一种由类似定向无环图(DAG)的 Span 事件组成的集合,这些事件在处理器中以异步方式调用和记录。 每个范围表示系统中的单个作,包括开始时间、结束时间和其他上下文信息等元数据。 这些跨度链接在一起,形成跟踪,该跟踪提供端到端过程的综合视图。

  • 类似于 DAG 的结构:DAG 结构可确保作序列中没有周期,因此更容易理解执行流。
  • 范围信息:每个范围捕获离散的工作单元,例如函数调用、数据库查询或 API 请求。 范围包含有关操作的上下文的元数据。
  • 分层关联:跨度镜像应用程序的结构,使你能够了解不同的组件如何相互交互和相互依赖。

通过收集和分析这些范围,可以跟踪执行路径,识别瓶颈,并了解系统不同组件之间的依赖关系和交互。 这种可见性级别对于诊断问题、优化性能并确保 GenAI 应用程序的可靠性至关重要。

若要说明在 RAG 应用程序中可捕获的整个跟踪内容,请参阅下图。

跟踪简言之

此应用程序中涉及的子系统对于系统的质量和相关性至关重要。 在与最终阶段的 LLM 交互时,缺乏对数据路径的可见性,会导致创建一个应用程序,其质量只能通过对每个部分进行高度单调、繁琐且昂贵的手动隔离验证来实现。

GenAI ChatCompletions 用例

在生成式 AI(GenAI)应用程序中,例如聊天功能的完成,跟踪对于模型和利用 GenAI 的应用程序的开发人员来说至关重要。 这些用例涉及基于输入提示生成类似人类的文本。 虽然与涉及代理或信息检索以增强 GenAI 模型的 GenAI 应用程序几乎不一样复杂,但聊天界面可以从跟踪中受益。 通过聊天会话启用对每次交互接口的跟踪,可以评估整个上下文历史、提示、输入、配置参数以及输出,从而全面体现提交给 GenAI 模型的请求负载的完整上下文。

例如,下图显示了用于将部署服务器中托管的模型连接到外部 GenAI 服务的 ChatCompletions 接口的性质。

GenAI ChatCompletions 体系结构

推理过程周围的其他元数据因各种原因很有用,包括计费、性能评估、相关性、幻觉评估和常规调试。 密钥元数据包括:

  • 令牌计数:处理的令牌数,这会影响计费。
  • 模型名称:用于推理的特定模型。
  • 提供程序类型:提供模型的服务或平台。
  • 查询参数:影响生成进程的温度和 top-k 等设置。
  • 查询输入:请求输入(用户问题)。
  • 查询响应:系统生成的对输入查询的响应,利用查询参数调整生成。

此元数据有助于了解不同的设置如何影响生成的响应的质量和性能,从而有助于微调和优化。

高级检索增强生成(RAG)应用

在更复杂的应用程序中,比如 Retrieval-Augmented Generation(RAG),跟踪对于实现有效调试和优化至关重要。 RAG 涉及多个阶段,包括文档检索和与 GenAI 模型的交互。 仅当输入和输出可见时,确定问题或改进机会的来源将变得困难。

例如,如果 GenAI 系统生成不满意的响应,问题可能在于:

  • 矢量存储优化:文档检索过程的效率和准确性。
  • 嵌入模型:用于编码和搜索相关文档的模型的质量。
  • 参考资料:正在查询的文档的内容和质量。

跟踪允许对 RAG 管道中的每个步骤进行调查和判断质量。 通过提供每个阶段的可见性,跟踪有助于确定需要调整的位置,无论是在检索过程中、嵌入模型还是参考材料的内容。

例如,下图演示了构成简单 RAG 应用程序的复杂交互,其中,使用指导最终输出生成响应的其他检索数据重复调用 GenAI 模型。

RAG 体系结构

如果不在如此复杂的系统上启用跟踪,则很难确定问题或瓶颈的根本原因。 以下步骤实际上是一个“黑匣子”:

  1. 嵌入输入查询

  2. 编码查询向量的返回

  3. 矢量搜索输入

  4. 从向量数据库中检索到的文档区块

  5. GenAI 模型的最终输入

在没有配置用于捕捉每个请求相关输入、输出和元数据的检测工具的情况下,诊断此类系统中响应正确性的问题会使得调试、改进或优化此类应用程序变得极具挑战性。 考虑对响应能力或成本进行性能优化时,无法了解每个步骤的延迟,这会带来完全不同的挑战,需要配置和手动检测每个服务。

MLflow 中的追踪入门

若要了解如何在 MLflow 中使用跟踪,请参阅 MLflow 跟踪指南

探索 GenAI 之外的领域:传统机器学习的分析

注释

虽然本文档重点介绍跟踪最有价值的 GenAI 应用程序,但 MLflow 跟踪也可以应用于传统的 ML 工作流。 为了完整性,以下章节简要描述了这一用例。

在传统的 ML 中,推理过程相对简单。 发出请求时,输入数据会馈送到模型中,该模型处理数据并生成预测。

下图说明了输入数据、模型服务接口与模型本身之间的关系。

传统 ML 推理体系结构

此过程完全透明,这意味着输入和输出都明确定义,易于最终用户理解。 例如,在垃圾邮件检测模型中,输入是电子邮件,输出是二进制标签,指示电子邮件是否为垃圾邮件。 整个推理过程是透明的,使得可以轻松确定发送了哪些数据以及返回了什么预测,因此在定性模型性能上完全记录推理过程变得无足轻重。

但是,跟踪可能包括作为部署配置的一部分,以进一步了解处理对服务器发出的请求的性质、模型的预测延迟以及记录对系统的 API 访问。 对于这种经典形式的跟踪日志记录,从延迟和性能角度监视和记录与推理请求关联的元数据,模型开发人员或数据科学家通常不会使用这些日志来了解模型的作。

后续步骤

继续您的旅程,并参考这些推荐的行动和教程。

参考指南

浏览有关相关概念的详细文档。

  • 跟踪数据模型 - 了解 MLflow 如何表示跟踪和跨度
  • 通过 SDK 查询跟踪 - 学习编程式跟踪分析
  • 日志评估 - 了解如何将反馈附加到追踪数据