跳到主要内容

删除追踪

您可以使用 mlflow.client.MlflowClient.delete_traces() 方法根据特定条件删除跟踪。此方法允许您通过实验ID最大时间戳跟踪ID删除跟踪。

提示

删除跟踪是一个不可逆的过程。请确保提供给delete_traces API的参数符合预期的删除范围。

删除方法

删除早于特定时间戳的跟踪

import time
from mlflow import MlflowClient

client = MlflowClient()

# Get current timestamp in milliseconds
current_time = int(time.time() * 1000)

# Delete traces older than current time, limit to 100 traces
deleted_count = client.delete_traces(
experiment_id="1", max_timestamp_millis=current_time, max_traces=100
)

print(f"Deleted {deleted_count} traces")

删除早于特定时间段的跟踪

from datetime import datetime, timedelta

# Calculate timestamp for 7 days ago
seven_days_ago = datetime.now() - timedelta(days=7)
timestamp_ms = int(seven_days_ago.timestamp() * 1000)

deleted_count = client.delete_traces(
experiment_id="1", max_timestamp_millis=timestamp_ms
)

高级用例

根据特定条件删除跟踪

import mlflow
from mlflow import MlflowClient


def delete_error_traces(experiment_id: str):
"""Delete only traces that resulted in errors"""
client = MlflowClient()

# Search for error traces
traces = mlflow.search_traces(
experiment_ids=[experiment_id],
filter_string="status = 'ERROR'",
max_results=1000,
)

if traces:
trace_ids = [trace.info.trace_id for trace in traces]
deleted_count = client.delete_traces(
experiment_id=experiment_id, trace_ids=trace_ids
)
print(f"Deleted {deleted_count} error traces")
return deleted_count

return 0


# Usage
delete_error_traces("1")

最佳实践

始终先测试:使用搜索查询或试运行模式,在进行删除前验证将删除哪些跟踪。

批量删除:对于大量跟踪,请分批删除以避免超时和性能问题。

设置合理限制:使用max_traces参数,防止一次意外删除过多跟踪。

监控和日志记录:记录删除活动,以供审计,尤其是在生产环境中。

优雅地处理错误:实施适当的错误处理,以管理网络问题、权限问题或无效参数。

参数参考

参数类型描述
experiment_idstr必需。包含要删除跟踪的实验ID
max_timestamp_millisint删除在此时间戳(毫秒)之前创建的跟踪
trace_idsList[str]删除具有这些特定跟踪ID的跟踪
max_tracesint在此操作中要删除的最大跟踪数量
注意

您必须指定max_timestamp_millistrace_ids之一,但不能同时指定两者。max_traces参数不能与trace_ids一起使用。