常见问题
问:我在 MLflow UI 中无法打开我的追踪。我该怎么办?
追踪在 MLflow UI 中无法查看可能有多种原因。
-
追踪尚未完成:如果追踪仍在收集过程中,MLflow 无法在 UI 中显示跨度(span)。请确保所有跨度都以 "OK" 或 "ERROR" 状态正确结束。
-
浏览器缓存已过期:当您将 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,每个线程默认拥有自己的追踪上下文,但可以通过一些额外步骤为多线程应用生成单个追踪。有关更多信息,请参阅多线程部分。