你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 机器学习模型监控
模型监视是机器学习端到端生命周期的最后一步。 此步骤跟踪生产中的模型性能,并从数据科学和操作角度分析性能。 在本文中,你将了解 Azure 机器学习中的模型监控、可以监控的信号和指标,以及模型监控的建议做法。
与传统软件系统不同,机器学习系统行为不仅取决于代码中指定的规则,而且从数据中学习。 数据分布变化、训练服务倾斜、数据质量问题、环境变化和使用者行为变化都可能导致模型变得过时。
当模型变得过时时,其性能可能会下降到无法增加商业价值或开始在高度监管的环境中导致严重的合规性问题。 因此,监控模型性能非常重要。
Azure 机器学习模型监控的工作原理
为了实施监控,Azure 机器学习通过对流式生产推理数据和参考数据执行统计计算来获取监控信号。 生产推理数据是指在生产中收集的模型的输入和输出数据。 参考数据可能是历史训练数据、验证数据或地面实况数据。
重要
Azure 机器学习模型监控仅支持使用基于凭据的身份验证(例如共享访问签名 (SAS) 令牌)来访问数据存储中包含的数据。 若要详细了解数据存储和身份验证模式,请参阅数据管理。
每个监视信号都有一个或多个指标。 你可以为这些指标设置阈值,以便通过 Azure 机器学习或 Azure 事件网格触发有关模型或数据异常的警报。 当你收到警报时,可以使用 Azure 机器学习工作室来分析或排查监控信号,从而持续改进模型质量。
Azure 机器学习使用以下过程来处理生产中模型的内置监控信号,例如数据偏移:
首先,Azure 机器学习计算训练数据中特征值的统计分布。 此分布是该特征的基线分布。
接下来,Azure 机器学习计算在生产中记录的特征最新值的统计分布。
然后,Azure 机器学习执行统计测试或计算距离得分,将特征在生产中的最新值的分布与基线分布进行比较。 如果测试统计信息或两个分布之间的距离得分超过用户指定的阈值,Azure 机器学习会识别异常并通知用户。
设置和使用模型监控
在 Azure 机器学习中使用模型监控:
首先,启用生产推理数据收集。
- 如果将模型部署到 Azure 机器学习联机终结点,可以使用 Azure 机器学习模型数据收集启用生产推理数据收集。
- 如果将模型部署到 Azure 机器学习外部或 Azure 机器学习批处理终结点,需负责收集可用于 Azure 机器学习模型监控的生产推理数据。
接下来,设置模型监控。可以使用 Azure 机器学习 SDK/CLI 2.0 或工作室 UI 轻松设置模型监控。 在设置过程中,可以指定首选监控信号,并自定义每个信号的指标和阈值。
最后,查看并分析模型监控结果。设置模型监控后,Azure 机器学习会按指定的计划运行监控作业。 每次运行都会计算并评估所有选定监视信号的指标,并在超过任何指定阈值时触发警报通知。 你可以单击警报通知中的链接来查看和分析 Azure 机器学习工作区中的监控结果。
模型监视的功能
Azure 机器学习为持续模型监视提供了以下功能:
- 表格数据的内置监控信号包括数据偏移、预测偏移、数据质量、特征归因偏移和模型性能。
- 联机终结点的现有模型监控。 如果在联机终结点中将模型部署到生产,Azure 机器学习会自动收集生产推理数据并将其用于持续监控。
- 一个监控设置中的多个监控信号。 对于每个监控信号,可以选择首选指标和警报阈值。
- 选择用于比较的参考数据。 对于监控信号,你可以使用训练数据或最近的生产数据来设置参考数据。
- 数据偏移或数据质量监控的前 N 个特征。 如果使用训练数据作为参考数据,则可以定义基于特征重要性进行分层的数据偏移或数据质量信号。
- 灵活定义监控信号的能力。 如果内置监视信号不适合业务场景,可以使用自定义的监视信号组件定义自己的监视信号。
- 灵活使用来自任何源的生产推理数据。 如果在 Azure 机器学习外部部署模型,或者将模型部署到批处理终结点,则仍可以自行收集生产推理数据,以在 Azure 机器学习中使用该数据进行模型监控。
模型监控最佳做法
每个机器学习模型及其用例都具有唯一性。 因此,模型监视对于每种情况都具有唯一性。 下面的列表描述了推荐的模型监控最佳做法。
- 将模型部署到生产环境后立即开始模型监控。
- 与熟悉模型的数据科学家携手设置监控。 深入了解模型及其用例的数据科学家可以推荐监控信号和指标,并为每个指标设置正确的警报阈值,以避免警报疲劳。
- 在设置中包含多个监控信号。 使用多个监控信号,可以获得监控的广泛视图和精细视图。 例如,可以结合使用数据偏移和特征归因偏移信号,从而获取模型性能问题预警。
- 使用适当的参考数据作为比较基线。 对于用作比较基线的参考数据,你可以使用最近的生产数据或历史数据,例如训练数据或验证数据。 为了进行更有意义的比较,请将训练数据用作数据偏移和数据质量的比较基线。 对于预测偏移,请将验证数据用作比较基线。
- 根据一段时间内的生产数据增长指定监控频率。 例如,如果生产模型每天都有大量流量,并且每日数据累积足够多,可以将监控频率设置为每日。 否则,可以根据生产数据随时间推移的增长情况考虑每周或每月的监控频率。
- 监控前 N 个特征或特征子集。 如果使用训练数据作为比较基线,可以轻松地为前 N 个重要特征配置数据偏移监控或数据质量监控。 对于具有大量特征的模型,请考虑监视这些特征的子集,从而降低计算成本和监视干扰。
- 当你可以访问地面实况数据时,请使用模型性能信号。 如果你可以根据机器学习应用程序访问地面实况数据(也称为实际数据),请使用模型性能信号将地面实况数据与模型输出进行比较。 这种比较可以客观地了解模型在生产中的性能。
回溯窗口大小和偏移
“回溯窗口大小”是生产或参考数据窗口的持续时间(采用 ISO 8601 格式)。 “回溯窗口偏移”是从监控运行日期开始到数据窗口结束的偏移的持续时间。
例如,生产中的模型有一个监视器设置为在 1 月 31 日下午 3:15(UTC 时间)运行。 生产数据回溯窗口大小为 P7D
(7 天),数据回溯窗口偏移为 P0D
(零天)意味着监视器使用从 1 月 24 日下午 3:15(UTC 时间)到 1 月 31 日下午 3:15(UTC 时间)的生产数据,即监视器的运行时间。
对于参考数据,如果将回溯窗口偏移设置为 P7D
(7 天),则参考数据窗口正好在生产数据窗口开始之前结束,因此不会出现重叠。 然后,可以将参考数据回溯窗口大小设置为你喜欢的大小。
例如,如果将参考数据回溯窗口大小设置为 P24D
(24 天),参考数据窗口将包含从 1 月 1 日下午 3:15(UTC 时间)到 1 月 24 日下午 3:15(UTC 时间)的数据。 下图演示了此示例。
在某些情况下,将生产数据的“回溯窗口偏移”设置为大于零天的数字很有用。 例如,如果监视器计划每周一下午 3:15(UTC 时间)运行,但你不希望在监控运行中使用周末的数据,则可以使用 P5D
(5 天)作为“回溯窗口大小”,使用 P2D
(2 天)作为“回溯窗口偏移”。 然后,数据窗口就会从上周一下午 3:15(UTC 时间)开始,到周五下午 3:15(UTC 时间)结束。
在实践中,应确保参考数据窗口和生产数据窗口不重叠。 如下图所示,可以通过确保参考数据回溯窗口偏移(在本例中为 P10D
(10 天))大于或等于生产数据的回溯窗口大小及其回溯窗口偏移的总和(在本例中为 7 天)来确保窗口不重叠。
在 Azure 机器学习模型监控中,你可以使用回溯窗口大小和回溯窗口偏移的智能默认值,也可以自定义它们来满足自己的需求。 支持滚动窗口和固定窗口。
自定义回溯窗口大小
可以灵活地为生产数据和参考数据选择回溯窗口大小。
默认情况下,生产数据的回溯窗口大小是监控频率。 在运行监控作业之前在监控期间收集的所有数据将包含在回溯窗口中。 可以使用
production_data.data_window.lookback_window_size
属性调整生产数据的滚动数据窗口。默认情况下,参考数据的回溯窗口是完整的数据集。 可以使用
reference_data.data_window.lookback_window_size
属性来调整参考回溯窗口大小。
若要为参考数据指定固定数据窗口,请使用属性 reference_data.data_window.window_start_date
和 reference_data.data_window.window_end_date
。
自定义回溯窗口偏移
可以灵活地为生产数据和参考数据选择数据窗口的回溯窗口偏移。 可以使用偏移对显示器使用的数据进行精细控制。 该偏移仅适用于滚动数据窗口。
默认情况下,生产数据的偏移为
P0D
(零天)。 可以使用production_data.data_window.lookback_window_offset
属性修改此偏移。默认情况下,参考数据的偏移是
production_data.data_window.lookback_window_size
的两倍。 此设置可确保有足够的参考数据来获得具有统计意义的监控结果。 可以使用reference_data.data_window.lookback_window_offset
属性修改此偏移。
监视信号和指标
Azure 机器学习模型监控支持以下监控信号和指标。
重要
本文中标记了“(预览版)”的项目目前为公共预览版。 该预览版在提供时没有附带服务级别协议,建议不要将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
监视信号 | 说明 | 指标 | 模型任务(受支持的数据格式) | 生产数据 | 参考数据 |
---|---|---|---|---|---|
数据偏移 | 通过将模型的输入数据的分布与模型的训练数据或最近的生产数据进行比较来跟踪模型输入数据的分布变化。 | Jensen-Shannon 散度,群体稳定性指标,归一化Wasserstein 距离,双样本柯尔莫哥洛夫-斯米尔诺夫检验,皮尔逊卡方检验 | 分类(表格数据)、回归(表格数据) | 生产数据:模型输入 | 最近的生产数据或训练数据 |
预测偏移 | 通过将模型预测输出的分布与验证数据、标记的测试数据或最近的生产数据进行比较,来跟踪该分布的变化。 | Jensen-Shannon 散度,群体稳定性指标,归一化Wasserstein 距离,切比雪夫距离,双样本柯尔莫哥洛夫-斯米尔诺夫检验,皮尔逊卡方检验 | 分类(表格数据)、回归(表格数据) | 生产数据:模型输出 | 最近的生产数据或验证数据 |
数据质量 | 通过将模型输入与模型的训练数据或最近的生产数据进行比较,来跟踪该输入的数据完整性。 数据质量检查包括检查是否存在 null 值、类型不匹配或值超出范围的情况。 | null 值率、数据类型错误率、出界率 | 分类(表格数据)、回归(表格数据) | 生产数据:模型输入 | 最近的生产数据或训练数据 |
特征归因偏移(预览版) | 基于特征对预测的贡献(也称为特征重要性)。 特征归因偏移跟踪生产期间的特征重要性的方式是将其与训练期间的特征重要性进行比较。 | 归一化折损累计增益 | 分类(表格数据)、回归(表格数据) | 生产数据:模型输入和输出 | 训练数据(必需) |
模型性能:分类(预览版) | 跟踪生产中模型输出的客观性能的方式是将其与收集的地面实况数据进行比较。 | 准确度、精准率和召回率 | 分类(表格数据) | 生产数据:模型输出 | 地面实况数据(必需) |
模型性能:回归(预览版) | 跟踪生产中模型输出的客观性能的方式是将其与收集的地面实况数据进行比较。 | 平均绝对误差 (MAE)、均方误差 (MSE)、均方根误差 (RMSE) | 回归(表格数据) | 生产数据:模型输出 | 地面实况数据(必需) |
生成式 AI:生成安全性和质量(预览版) | 使用 GPT 辅助指标评估生成式 AI 应用程序的安全性和质量。 | 基础性、相关性、流畅性、相似性、一致性 | 问题和回答 | 提示、补全、上下文、注释模板 | 空值 |
数据质量指标
数据质量监控信号通过计算以下三个指标来跟踪模型输入数据的完整性:
- Null 值率
- 数据类型错误率
- 出界率
Azure 机器学习模型监控支持 null 值率、数据类型错误率和出界率的计算,其精准率高达 0.00001。
Null 值率
null 值率是每个特征的模型输入中 null 值的比率。 例如,如果监控生产数据窗口包含 100 行,其中 10 行的特征 temperature
的值为 null,则 temperature
的 null 值率为 10%。
Azure 机器学习支持计算所有特征数据类型的 null 值率。
数据类型错误率
在每次监控运行期间,Azure 机器学习模型监控都会从参考数据推断每个特征的数据类型。 数据类型错误率是当前生产数据窗口与参考数据之间的数据类型差异率。
例如,如果根据参考数据推断特征 temperature
的数据类型为 IntegerType
,但在生产数据窗口中,temperature
的 100 个值中有 10 个值不是 IntegerType
,则 temperature
的数据类型错误率为 10%。
Azure 机器学习支持计算 PySpark 中提供的以下数据类型的数据类型错误率:ShortType
、BooleanType
、BinaryType
、DoubleType
、TimestampType
、StringType
、IntegerType
、FloatType
、ByteType
、LongType
、DateType
。 如果某个特征的数据类型不在此列表中,Azure 机器学习模型监控仍会运行,但不会计算该特征的数据类型错误率。
出界率
在每次监控运行期间,Azure 机器学习模型监控会根据参考数据确定每个特征的可接受范围或集合。 出界率是每个特征的值超出由参考数据确定的适当范围或集合的比率。
- 就数值特征来说,合适的范围是参考数据集中的最小值和最大值的数值区间,例如
[0, 100]
。 - 就分类特征(例如
color
)来说,合适的范围是参考数据集中包含的所有值的集合,例如[red, yellow, green]
。
例如,如果你有一个数值特征 temperature
,其中参考数据集中的所有值都落在范围 [37, 77]
内,但在生产数据窗口中,temperature
的 100 个值中有 10 个落在范围 [37, 77]
之外,则 temperature
的出界率为 10%。
Azure 机器学习支持计算 PySpark 中提供的以下数据类型的出界率:StringType
、IntegerType
、DoubleType
、ByteType
、LongType
和 FloatType
。 即使某个特征的数据类型不在此列表中,Azure 机器学习模型监控仍会运行,但不会计算该特征的出界率。
模型监控与 Azure 事件网格的集成
可以使用 Azure 机器学习模型监控运行生成的事件,通过 Azure 事件网格设置事件驱动型应用程序、流程或持续集成/持续交付 (CI/CD) 工作流。 当模型监视器检测到偏移、数据质量问题或模型性能下降情况时,你可以使用事件网格跟踪这些事件并以编程方式采取操作。
例如,如果生产中的分类模型的准确度低于某个阈值,你可以使用事件网格开始使用收集的地面实况数据进行再训练作业。 要了解如何将 Azure 机器学习与事件网格集成,请参阅监控部署到生产的模型的性能。