MLflow 的 LLM 跟踪功能

MLflow 的 LLM 跟踪系统是对现有 MLflow 跟踪系统的增强,提供了额外的功能来监控、管理和解释与大型语言模型(LLMs)的交互。

在其核心,MLflow 的 LLM 套件建立在专业人士熟悉的传统机器学习 (ML) 和深度学习 (DL) 的标准日志记录功能之上。然而,它引入了针对 LLM 独特复杂性的独特功能。

其中一个突出的特点是引入了“提示”——指向LLM的查询或输入——以及模型随后生成的数据。虽然MLflow对其他模型类型的支持通常不包括内置的推理结果保存机制,但由于LLMs的动态和生成性质,这一点是必需的。认识到这一点,MLflow引入了“预测”这一术语,与现有的跟踪组件**artifacts**、parameters**tags**和**metrics**并列,确保对文本生成模型进行全面的谱系和质量跟踪。

LLM 跟踪简介

大型语言模型的世界是广阔的,随着这些模型变得更加复杂和精密,一个强大的跟踪系统变得至关重要。MLflow 的 LLM 跟踪围绕着 运行 的概念展开。本质上,一次运行是与 LLM 的一次独立执行或交互——无论是单个查询、一批提示,还是整个微调会话。

每次运行都精心记录:

  • 参数: 详细描述LLM输入参数的键值对。这些参数可能包括模型特定的参数,如 top_ktemperature,以及更通用的参数。它们为每次运行提供上下文和配置。参数可以通过 mlflow.log_param() 记录单个条目,或通过 mlflow.log_params() 批量记录。

  • 指标: 这些是定量测量,通常是数值,提供了对LLM交互性能、准确性或任何其他可测量方面的洞察。指标是动态的,可以在运行过程中更新,提供对模型行为的实时或事后洞察。指标的记录通过 mlflow.log_metric()mlflow.log_metrics() 实现。

  • 预测: 为了理解和评估LLM输出,MLflow允许记录预测。这包括发送给LLM的提示或输入以及接收到的输出或响应。为了结构化存储和方便检索,这些预测以CSV格式存储为工件,确保每次交互都完整保存。此记录通过专用的 mlflow.log_table() 实现。

  • 工件:除了预测,MLflow 的 LLM 跟踪功能还可以存储多种输出文件,包括可视化图像(例如,PNG 文件)、序列化模型(例如,openai 模型)以及结构化数据文件(例如,Parquet 文件)。mlflow.log_artifact() 函数是这一功能的核心,使用户能够轻松地记录和组织他们的工件。

此外,为了提供结构化的组织和比较分析能力,运行可以被分组到 实验 中。这些实验作为容器,将相关的运行分组,并提供更高层次的组织。这种组织确保了相关的运行可以作为一个整体进行比较、分析和管理。

LLM 交互的详细日志记录

MLflow 的 LLM 跟踪不仅仅记录数据——它还提供了专门针对 LLM 交互需求的结构化日志记录机制:

  • 参数: 记录参数非常直接。无论是使用 mlflow.log_param() 记录单个参数,还是使用 mlflow.log_params() 同时记录多个参数,MLflow 都能确保捕捉到每一个细节。

  • 指标: 定量洞察至关重要。无论是跟踪微调后的LLM的准确性还是理解其响应时间,指标都提供了这种洞察。它们可以通过 mlflow.log_metric() 单独记录,或者使用 mlflow.log_metrics() 批量记录。

  • 预测:每次与LLM的交互都会产生一个结果——一个预测。捕获这个预测及其导致它的输入是至关重要的。mlflow.log_table() 函数正是为此设计的,确保输入和输出都被一致地记录下来。

  • Artifacts: Artifacts 作为 LLM 运行的有形输出。它们可以是图像、模型或任何其他形式的数据。使用 mlflow.log_artifact() 记录它们是无缝的,这确保了每一条数据,无论其格式如何,都被存储并链接到其相应的运行。

LLM 跟踪数据的结构化存储

每一条数据、每一个参数、指标、预测和工件不仅仅是被记录——它们被结构化并作为 MLflow 实验运行的一部分存储。这种组织方式确保了数据完整性、易于检索,以及在机器学习工作流程的大框架下分析和理解 LLM 交互的结构化方法。