Compartir a través de

追踪常见问题解答

问:跟踪引入的延迟开销是什么?

跟踪会以异步方式写入,以最大程度地降低性能影响。 但是,跟踪仍会增加最小延迟,尤其是在跟踪大小较大时。 MLflow 建议在部署到生产环境之前测试应用程序,以了解跟踪延迟影响。

下表显示了按跟踪大小粗略估计的延迟影响:

每个请求的跟踪大小 对响应速度延迟的影响(ms)
大约10 KB ~ 1 毫秒
~ 1 兆字节 50 ~ 100 毫秒
10 MB 150 毫秒 ~

问:Databricks 中 MLflow 跟踪的速率限制和配额是多少?

在 Databricks 工作区内,配额和速率限制适用于使用 MLflow 跟踪,以确保服务的稳定性和公平使用。 请参阅资源限制

问:我无法在 MLflow UI 中打开追踪。 我该怎么办?

在 MLflow UI 中可能无法查看跟踪的原因有多种。

  1. 跟踪尚未完成:如果仍在收集跟踪,MLflow 无法在 UI 中显示范围。 确保所有区段都以“正常”或“ERROR”状态正确结束。

  2. 浏览器缓存已过时:将 MLflow 升级到新版本时,浏览器缓存可能包含过时的数据,并阻止 UI 正确显示跟踪。 清除浏览器缓存(Shift+F5)并刷新页面。

问:模型执行停滞,我的跟踪将永远处于“正在进行中”。

有时,模型或代理会卡在长时间运行的操作或无限循环中,导致执行状态一直停留在“正在进行”状态。

若要防止出现这种情况,可以使用环境变量为跟踪 MLFLOW_TRACE_TIMEOUT_SECONDS 设置超时。 如果跟踪超过超时时间,MLflow 将自动中止具有 ERROR 状态的跟踪并将其导出到后端,以便你可以分析这些跨度以识别问题。 默认情况下,不会设置超时。

注释

超时时间仅适用于 MLflow 跟踪。 即使跟踪停止,主程序、模型或代理也会继续运行。

例如,以下代码将超时设置为 5 秒,并模拟 MLflow 如何处理长时间运行的作:

import mlflow
import os
import time

# Set the timeout to 5 seconds for demonstration purposes
os.environ["MLFLOW_TRACE_TIMEOUT_SECONDS"] = "5"

# Simulate a long-running operation
@mlflow.trace
def long_running():
    for _ in range(10):
        child()

@mlflow.trace
def child():
    time.sleep(1)

long_running()

注释

MLflow 监视后台线程中的跟踪执行时间和过期时间。 默认情况下,此检查每秒执行一次,资源消耗可忽略不计。 如果要调整间隔,可以设置 MLFLOW_TRACE_TIMEOUT_CHECK_INTERVAL_SECONDS 环境变量。

问:执行多线程处理时,我的跟踪拆分为多个跟踪。 如何将它们合并到单个轨迹中?

由于 MLflow 跟踪依赖于 Python ContextVar,因此每个线程默认都有自己的跟踪上下文,但可以使用几个附加步骤为多线程应用程序生成单个跟踪。 有关详细信息,请参阅 多线程处理 部分。

问:如何暂时禁用跟踪?

若要 禁用 跟踪, mlflow.tracing.disable API 将从 MLflow 中停止收集跟踪数据,并且不会将任何数据记录到有关跟踪的 MLflow 跟踪服务。

若要 启用 跟踪(如果已暂时禁用跟踪), mlflow.tracing.enable API 将为调用的已检测模型重新启用跟踪功能。

问:我的跟踪搜索结果对于 mlflow.search_traces() 来说太大了。 如何大规模搜索追踪日志?

MLflow API 提供分页功能,通过MlflowClient.search_traces() 方法实现。 但是,对于不需要分页的用例, mlflow.search_traces() 建议使用,因为它提供了更多功能和方便的默认值。

对于生产中的大规模追踪分析,通常最好使用 生产监控 将追踪日志记录至 Unity 目录中的 Delta 表。 请查看 在 Databricks 上部署的跟踪代理 以获取生产跟踪指南。