代理的 MLflow 跟踪

重要

此功能目前以公共预览版提供。

本文介绍 MLflow 跟踪,以及它帮助评估 AI 系统中的生成式 AI 应用程序的方案。

在软件开发中,跟踪涉及到记录事件序列,例如用户会话或请求流。 在 AI 系统的上下文中,跟踪通常是指你与 AI 系统的交互。 AI 系统的跟踪的例子可以是检测 RAG 应用程序的输入和参数,包括带有提示的用户消息、矢量查找和生成式 AI 模型的接口。

什么是 MLflow 跟踪?

通过使用 MLflow 跟踪,可以记录、分析和比较不同版本的生成式 AI 应用程序的跟踪。 它允许你调试生成式 AI Python 代码,并跟踪输入和响应。 这样做有助于发现导致应用程序性能不佳的条件或参数。 MLflow 跟踪与 Databricks 工具和基础结构紧密集成,使你可以在运行代码时在 Databricks 笔记本或 MLflow 试验 UI 中存储和显示所有跟踪。

使用库(例如 LangChain、LlamaIndex, OpenAI, 或自定义 PyFunc)在 Databricks 上开发 AI 系统时,MLflow 跟踪让你可以查看代理的每个步骤中的所有事件和中间输出。 可以轻松查看提示、使用了哪些模型和检索器、检索了哪些文档来增强响应、操作花费的时间、最终输出。 例如,如果你的模型出现幻觉,你可以快速检查导致幻觉的每个步骤。

为何使用 MLflow 跟踪?

MLflow 跟踪提供几种优势来帮助跟踪开发工作流。 例如,可以:

  • 查看交互式跟踪可视化,并使用调查工具来诊断开发中的问题。
  • 验证提示模板和护栏是否产生了合理的结果。
  • 探索并最大程度地减少不同框架、模型、区块大小和软件开发做法的延迟影响。
  • 通过跟踪不同模型的标记使用情况来衡量应用程序成本。
  • 建立基准(“黄金”)数据集来评估不同版本的性能。
  • 存储生产模型终结点中的跟踪以调试问题,并执行离线评审和评估。

安装 MLflow 跟踪

MLflow 跟踪在 MLflow 版本 2.13.0 及更高版本中可用。

%pip install mlflow>=2.13.0 -qqqU
%restart_python

或者,可以 %pip install databricks-agents 以安装包含兼容 MLflow 版本的 databricks-agents 的最新版本。

在开发中使用 MLflow 跟踪

MLflow 跟踪可帮助你分析性能问题并加速代理开发周期。 以下部分假设你正在从笔记本进行代理开发和 MLflow 跟踪。

注意

在笔记本环境中,MLflow 跟踪可能会在代理运行时增加多达几秒钟的开销。 这主要来自日志记录跟踪到 MLflow 试验的延迟。 在生产模型终结点中,MLflow 跟踪对性能的影响要小得多。 请参阅在生产环境中使用 MLflow 跟踪

注意

从 Databricks Runtime 15.4 LTS ML 开始,默认在笔记本中启用 MLflow 跟踪。 若要禁用跟踪,例如使用 LangChain,可在笔记本中执行 mlflow.langchain.autolog(log_traces=False)

向代理添加跟踪

MLflow 跟踪提供三种不同的方式来将跟踪与具有跟踪的生成式 AI 应用程序配合使用。 有关使用这些方法的示例,请参阅向代理添加跟踪。 有关 API 参考的详细信息,请参阅 MLflow 文档

API 推荐用例 说明
MLflow 自动日志记录 集成 GenAI 库的开发 自动日志记录会自动检测流行开源框架(例如 Langchain、LlamaIndex 和 OpenAI)的跟踪。 当你在笔记本的开头添加 mlflow.<library>.autolog() 后,MLflow 会自动记录代理执行的每个步骤的跟踪。
Fluent API 使用 Pyfunc 的自定义代理 用于检测 AI 系统而无需担心跟踪的树结构的低代码 API。 MLflow 根据 Python 堆栈确定适当的父子树结构(跨度)。
MLflow 客户端 API 高级用例,例如多线程 MLflowClient 为高级用例实现了更精细的线程安全 API。 这些 API 不管理跨度的父子关系,因此需要手动指定它来构造所需的跟踪结构。 这需要更多代码,但可更好地控制跟踪生命周期,尤其是对于多线程用例。

建议用于需要更多控制的用例,例如多线程应用程序或基于回调的检测。

查看跟踪

运行已检测的代理后,可以通过不同的方式查看生成的跟踪:

  • 跟踪可视化在单元格输出中以内联方式呈现。
  • 跟踪将记录到 MLflow 试验。 可以在“试验”页的 Traces 选项卡中查看历史跟踪的完整列表并搜索跟踪。 代理在活动 MLflow 运行下运行时,还可以在“运行”页中找到跟踪。
  • 使用 search_traces() API 以编程方式检索跟踪。

在生产环境中使用 MLflow 跟踪

MLflow 跟踪还与 Mosaic AI 模型服务集成,使你能够高效调试问题、监视性能,并创建用于离线评估的黄金数据集。 为服务终结点启用 MLflow 跟踪后,跟踪将记录在 response 列下的推理表中。

若要为服务终结点启用 MLflow 跟踪,必须将终结点配置中的 ENABLE_MLFLOW_TRACING 环境变量设置为 True。 有关如何使用自定义环境变量部署终结点的信息,请参阅添加纯文本环境变量。 如果使用 deploy() API 部署了代理,则跟踪会自动记录到推理表中。 请参阅为生成式 AI 应用程序部署代理

注意

跟踪是以异步方式写入推理表的,因此在开发过程中,这不会产生与在笔记本环境中进行跟踪时的同样高的开销。 但是,它仍可能会对终结点响应速度造成一定的开销,尤其是在每个推理请求的跟踪大小较大时。 Databricks 不保证任何服务级别协议 (SLA) 对模型终结点的实际延迟影响,因为它严重依赖于环境和模型实现。 Databricks 建议先测试终结点性能并深入了解跟踪开销,再部署到生产应用程序。

下表粗略地展示了不同跟踪大小对推理延迟的影响。

每个请求的跟踪大小 对延迟的影响 (ms)
~10 KB ~ 1 毫秒
~ 1 MB 50 ~ 100 毫秒
10 MB 150 毫秒 ~

限制

  • Databricks 笔记本、笔记本作业和模型服务中提供了 MLflow 跟踪。

  • LangChain 自动记录可能不支持所有 LangChain 预测 API。 有关支持的 API 的完整列表,请参阅 MLflow 文档