追踪概念

跟踪是一种可观测性技术,它通过应用程序捕获请求的完整执行流。 与传统记录隔离事件的日志不同,跟踪会创建一个详细的映射,展示数据如何流经系统,并记录沿途的每个操作。

GenAI 应用程序运行复杂的多步骤工作流,这些工作流结合了多个组件,例如 LLM、检索器、工具和代理。 通过捕获完整执行流程,追踪让这些工作流便于调试。

跟踪结构

MLflow Trace 包括两个主要对象:

  1. Trace.info 类型 TraceInfo:描述跟踪的源、状态和执行时间的元数据。 TraceInfo 还包含 标签。 标记是用户、会话和开发人员提供的键值对,可用于搜索或筛选跟踪。

  2. Trace.data 类型 TraceData:包含仪器化的 Span 对象的实际载荷,这些对象捕获应用程序从输入到输出的每一步执行。

跟踪体系结构

MLflow 跟踪与 OpenTelemetry 规范兼容,这是一种广泛使用的可观测性行业标准。 跟踪与其他与 OpenTelemetry 兼容的可观测性工具保持互操作,而 MLflow 使用特定于 GenAI 的结构和属性扩展 OpenTelemetry 模型。

TraceInfo

TraceInfo 提供有关总体跟踪的轻量级元数据。 关键字段包括:

领域 Description
trace_id 跟踪的唯一标识符
trace_location 存储追踪的位置(MLflow 试验或 Databricks 推理表)
request_time 跟踪的开始时间(以毫秒为单位)
state 跟踪状态:OK、、ERRORIN_PROGRESSSTATE_UNSPECIFIED
execution_duration 跟踪持续时间(以毫秒为单位)
request_preview 输入的 JSON 编码预览(根跨度输入)
response_preview 输出的 JSON 编码预览(根范围输出)
tags 用于筛选和搜索追踪的键值对

TraceData

TraceData 对象是 Span 对象的容器,其中存储执行详细信息。 每个跨度捕获与特定操作有关的信息,包括:

  • 请求和响应
  • 延迟测量
  • LLM 消息和工具参数
  • 检索的文档和上下文
  • 元数据和属性

跨度通过父-子连接形成分层结构,创建一个表示应用程序执行流程的树。

Span 体系结构

标记

标记是附加到跟踪上的可变键值对,用于组织和筛选。 MLflow 为常见用例定义标准标记:

  • mlflow.trace.session:用于对相关跟踪进行分组的会话标识符
  • mlflow.trace.user:用于跟踪每个用户交互的用户标识符
  • mlflow.source.name:生成跟踪的入口点或脚本
  • mlflow.source.git.commit:源代码的 Git 提交哈希(如果适用)
  • mlflow.source.type:源类型(PROJECTNOTEBOOK

还可以为特定需求添加自定义标记。 在 添加上下文以跟踪附加自定义标记/元数据中了解详细信息。

存储布局

MLflow 针对性能和成本优化跟踪存储。 若要自定义存储位置,在 创建试验时附加 Unity 目录卷。 然后,访问受 Unity Catalog 卷权限控制。

TraceInfo 以建立索引的行形式直接存储在关系型数据库中,从而能够对追踪数据进行快速搜索和筛选。

TraceData (范围)存储在项目存储中,而不是关系数据库,因为范围更大。 即使追踪数据量增加,查询仍能保持快速响应。

活动跟踪与已完成跟踪

活跃跟踪是指 MLflow 当前正在写入的跟踪,例如,当使用@mlflow.trace修饰的函数正在运行时。 修饰函数退出后,跟踪已完成,但仍可以使用新数据对其进行批注。

若要处理当前或最近的跟踪,请使用以下方法:

后续步骤