跟踪概念

小窍门

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

什么是跟踪?

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

MLflow 追踪

跨度的概念

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

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

跨度结构

痕迹的概念

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

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

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

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

关于跟踪的简要介绍

此应用程序中涉及的子系统对于系统的质量和相关性至关重要。 在与最终阶段的 LLM 交互时,无法了解数据将经过的路径,这导致创建的应用程序,其质量只能通过对每个部分进行高程度的单调、繁琐且成本高昂的单独验证来实现。

GenAI ChatCompletions 用例

在生成式 AI(GenAI)应用程序中(如聊天完成),跟踪对于模型和 GenAI 支持的应用程序的开发人员来说更为重要。 这些用例涉及基于输入提示生成类似人类的文本。 虽然聊天界面远不如涉及代理或信息检索以增强 GenAI 模型的 GenAI 应用程序复杂,但它仍然可以从跟踪中获益。 通过聊天会话在每次交互接口上启用跟踪,可以评估完整的上下文历史、提示、输入、配置参数及输出,进而全面涵盖提交到 GenAI 模型的请求负载的上下文。

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

GenAI 聊天完成系统架构

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

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

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

高级 Retrieval-Augmented 生成技术(RAG)应用

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

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

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

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

例如,下图展示了组成简单 RAG 应用程序的复杂交互,其中,GenAI 模型被重复调用,用于处理检索到的额外数据,以指导最终输出生成的响应。

RAG 体系结构

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

  1. 嵌入输入查询
  2. 编码查询向量的返回
  3. 矢量搜索输入
  4. 从向量数据库中检索到的文档区块
  5. GenAI 模型的最终输入

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

MLflow 中的跟踪入门

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

超越 GenAI:传统机器学习的跟踪

注释

虽然本文档重点介绍跟踪最有价值的 GenAI 应用程序,但 MLflow 跟踪也可以应用于传统的 ML 工作流。 接下来的部分简要介绍了这个用例以保持完整性。

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

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

传统 ML 推理体系结构

此过程完全可见,这意味着输入和输出都明确定义,并且便于最终用户理解。 例如,在垃圾邮件检测模型中,输入是电子邮件,输出是二进制标签,指示电子邮件是否为垃圾邮件。 整个推理过程是透明的,使得可以轻松确定所发送的数据和返回的预测,这使得在定性模型性能的背景下,完全跟踪变得无关紧要。

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

后续步骤

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

参考指南

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