跳到主要内容

使用跟踪

3.2.0 版本开始,MLflow 默认会收集匿名化的使用数据。这些数据不包含任何敏感信息或个人身份信息。

重要

根据 GDPR 和其他隐私法规,MLflow 不会收集任何包含个人信息的数据。作为 Linux 基金会项目,MLflow 遵循 LF 遥测数据收集与使用政策。该实施方案已通过 Linux 基金会的审查与批准,批准的建议书记录在官方政策的 已完成审查 (Completed Reviews) 部分。有关收集内容的详细信息,请参阅下方的 数据说明部分

注意

遥测功能仅在 开源版 MLflow 中启用。如果您通过托管服务或分发版使用 MLflow,请咨询您的供应商以确定在您的环境中是否启用了遥测功能。在任何情况下,您都可以按照我们文档中提供的指导选择退出。

为什么要收集数据?

MLflow 使用匿名遥测来了解功能的使用情况,这有助于指导开发优先级并改进库。这些数据有助于我们识别哪些功能最有价值,以及应重点关注哪些错误修复或功能增强。

GDPR 合规性

根据《通用数据保护条例》(GDPR),数据控制者和处理者有责任谨慎、透明且负责任地处理个人数据。

MLflow 通过以下方式遵守 GDPR:

  • 不收集个人数据:收集的遥测数据已完全匿名化,不包含任何个人或敏感信息(例如用户名、IP 地址、文件名、参数或模型内容)。MLflow 为每个会话生成一个随机 UUID 用于聚合使用事件,该 ID 无法用于识别或追踪单个用户。
  • 目的限制:数据仅用于根据聚合的功能使用模式来改进 MLflow 项目。
  • 数据最小化:仅收集项目优先级所需的最低限度元数据(例如:功能开关状态、使用的 SDK/平台、版本信息)。
  • 用户控制:用户可以随时通过设置环境变量 MLFLOW_DISABLE_TELEMETRY=trueDO_NOT_TRACK=true 来选择退出遥测。MLflow 会立即遵循这些设置,无需重启。
  • 透明度:遥测端点和行为已公开记录,MLflow 用户可以检查或拦截相关的网络调用。

如有进一步咨询或数据保护相关问题,用户可以在 MLflow GitHub 仓库 上提交 issue。

收集哪些数据?

MLflow 仅收集非敏感的匿名数据,以帮助我们更好地了解使用模式。下文概述了此版本 MLflow 当前收集的数据。您可以查看 源代码 中确切的收集数据。

数据说明

数据元素说明示例为何追踪此项
唯一会话 ID为每个会话(定义为每次导入 MLflow)创建一个随机生成的、不可识别个人的 UUID45e2751243e84c7e87aca6ac25d75a0d作为当前 MLflow 会话中数据的标识符
唯一安装 ID为每个安装(定义为首次导入 MLflow 时)创建一个随机生成的、不可识别个人的 UUID。于 MLflow 3.7.0 添加。45e2751243e84c7e87aca6ac25d75a0d作为当前 MLflow 安装中数据的标识符
源 SDK当前使用的 SDK 名称mlflow | mlflow-skinny | mlflow-tracing了解不同 MLflow SDK 的采用情况并确定改进领域
MLflow 版本当前 SDK 版本3.2.0识别特定版本的使用模式,并支持错误修复或弃用决策
Python 版本当前 Python 版本3.10.16确保跨 Python 版本的兼容性,并指导测试或升级建议
操作系统MLflow 运行所在的操作系统macOS-15.4.1-arm64-arm-64bit了解平台特定的使用情况并检测平台依赖性问题
追踪 URI 方案当前追踪 URI 的方案file | sqlite | mysql | postgresql | mssql | https | http | custom_scheme | None确定最常用的追踪后端并优化后端支持
事件名称被追踪的事件名称(参见下表了解哪些事件被追踪)create_experiment衡量功能使用情况和改进
事件状态事件是否成功success | failure | unknown识别常见的故障点并提高可靠性和错误处理能力
时间戳(纳秒)事件发生的时间1753760188623715000作为事件的标识符
持续时间事件调用所需的时间(毫秒)1000监控性能趋势并检测响应时间的回归
参数(布尔值或枚举值)参见下表了解每个事件收集的参数create_logged_model 事件: {"flavor": "langchain"}更好地了解每个事件的使用模式

被追踪事件

不收集有关特定模型、代码或权重的详细信息。 仅记录 `Tracked Parameters`(被追踪参数)列下方的参数;对于 `Tracked Parameters` 列为 None 的事件,仅记录事件名称。如果存在 "MLFLOW_EXPERIMENT_ID" 环境变量,则将其作为参数追踪。如需获取完整的被追踪事件列表,请参阅 源代码

事件名称被追踪参数示例
create_experiment创建的实验 ID(随机 uuid 或整数){"experiment_id": "0"}
create_runMODULES_TO_CHECK_IMPORT 中的包是否被导入;创建运行 (run) 时使用的实验 ID{"imports": ["sklearn"], "experiment_id": "0"}
create_logged_model模型类型 (Flavor)(例如 langchain, sklearn){"flavor": "langchain"}
get_logged_modelMODULES_TO_CHECK_IMPORT 中的包是否被导入{"imports": ["sklearn"]}
create_registered_model
create_model_version
create_prompt
load_prompt是否使用了别名{"uses_alias": True}
start_trace
traces_received_by_server提交追踪的客户端类型(已脱敏)及接收到的已完成追踪的数量{"source": "MLFLOW_PYTHON_CLIENT", "count": 3}
log_assessment评估的类型和来源{"type": "feedback", "source_type": "CODE"}
进行评估
create_webhookWebhook 的实体{"events": ["model_version.created"]}
genai_evaluate在 GenAI Evaluate 中使用的内置评分器{"builtin_scorers": ["relevance_to_query"]}
prompt_optimization优化器类型、Prompt 数量和评分器数量{"optimizer_type": True, "prompt_count": 5, "scorer_count": 1}
log_dataset
log_metric是否开启同步模式{"synchronous": False}
log_param是否开启同步模式{"synchronous": True}
log_batch关于是否记录了指标、参数或标签的信息,以及记录模式{"metrics": False, "params": True, "tags": False, "synchronous": False}
invoke_custom_judge_model判别模型 (Judge model) 提供商{"model_provider": "databricks"}
make_judge模型提供商(若格式为 provider,则从模型字符串中提取:model){"model_provider": "openai"}
align_judge提供的追踪数量和优化器类型{"trace_count": 100, "optimizer_type": "AlignmentOptimizer"}
autologging类型 (Flavor) 和元数据{"flavor": "openai", "log_traces": True, "disable": False}
ai_command_run命令键和调用上下文(cli 或 mcp){"command_key": "genai/analyze_experiment", "context": "cli"}
gateway_start
gateway_create_endpoint是否设置了回退配置、路由策略及模型配置数量{"has_fallback_config": true, "routing_strategy": "REQUEST_BASED_TRAFFIC_SPLIT", "num_model_configs": 2}
gateway_update_endpoint是否设置了回退配置、路由策略及模型配置数量(若未提供则为 null){"has_fallback_config": false, "routing_strategy": "ROUND_ROBIN", "num_model_configs": 1}
gateway_delete_endpoint
gateway_get_endpoint
gateway_list_endpoints是否按提供商进行过滤{"filter_by_provider": true}
gateway_create_secret提供商名称{"provider": "openai"}
gateway_update_secret
gateway_delete_secret
gateway_list_secrets是否按提供商进行过滤{"filter_by_provider": false}
gateway_invocation是否启用了流式传输以及调用类型{"is_streaming": true, "invocation_type": "mlflow_chat_completions"}
ui_eventUI 交互事件。有关各种元数据元素的描述,请参见下表{ "eventType": "onClick", "componentViewId": "88fc9edd-5e9e-4a17-abd2-c543f505b8eb", "componentId": "mlflow.prompts.list.create", "componentType": "button", timestamp_ns: 1765784028467000000 }

UI 交互元数据

下表描述了可能随特定 UI 交互日志一起收集的元数据列表。

元数据元素说明示例
交互式 UI 元素的组件 IDUI 中交互式元素(例如按钮、开关、链接、输入字段)的 ID 字符串。当点击、键入或以其他方式与此类元素交互时,会生成一条日志。可以通过此搜索查询找到完整的组件 ID 值列表。mlflow.prompts.list.create(提示页面上“创建提示”按钮的标识符)
事件类型描述交互性质的枚举分类值onView, onClick, onValueChange
组件类型描述发生交互的组件类型的枚举分类值button, alert, banner, radio, input, ...
组件视图 ID每次 UI 元素重新渲染时都会重新生成的随机 UUID774db636-5cfa-4ce8-8f56-7e7126dc3439
时间戳交互发生时的客户端时间戳1765789548484000.

为什么 MLflow 遥测采用选择退出 (Opt-Out) 机制?

MLflow 使用选择退出 (Opt-Out) 的遥测模型,旨在根据真实使用模式帮助改进所有用户的平台。默认收集匿名使用数据使我们能够:

  • 了解 MLflow 在广泛的环境和工作流程中是如何被使用的
  • 更有效地识别常见痛点并确定功能改进领域
  • 衡量变更的影响,并确保它们能为更广泛的社区改善体验

如果遥测采用选择加入 (Opt-In) 机制,则只有一小部分自选用户会被涵盖,从而导致偏差并可能导致优先级错位。我们致力于透明度和用户选择权。遥测已清晰记录、匿名化,并可通过配置随时轻松禁用。这种方法帮助我们将 MLflow 变得更好,同时让您拥有完全的控制权。有关更多信息,请查看 我们如何使用这些数据 部分。

如何选择退出?

MLflow 支持通过以下任一环境变量选择退出遥测:

  • MLFLOW_DISABLE_TELEMETRY=true
  • DO_NOT_TRACK=true

设置其中任何一个都将 立即禁用遥测,无需重新导入 MLflow 或重启会话。

注意

MLflow 会自动在 某些 CI 环境 中禁用遥测。如果您需要对其他 CI 环境的支持,请 在我们的 GitHub 仓库上提交 issue

  • CI
  • Github Actions
  • CircleCI
  • GitLab CI/CD
  • Jenkins Pipeline
  • Travis CI
  • Azure Pipelines
  • BitBucket
  • AWS CodeBuild
  • BuildKite
  • ...

设置范围

  • 该环境变量仅在明确设置或继承它的进程中生效。
  • 如果您从干净的环境中启动子进程,这些子进程可能不会继承您的 shell 环境,导致遥测可能保持启用状态。例如:subprocess.run([...], env={})
  • 在运行 mlflow server 之前设置此环境变量也会禁用所有 UI 遥测。

确保所有环境中均禁用遥测的建议:

  • 将变量添加到您的 shell 启动文件 (~/.bashrc, ~/.zshrc 等): export MLFLOW_DISABLE_TELEMETRY=true
  • 如果您正在使用子进程或隔离环境,请使用 dotenv 管理器或在启动时显式传递该变量。

如何验证遥测已禁用?

使用以下代码来验证遥测是否已禁用。

python
from mlflow.telemetry import get_telemetry_client

assert get_telemetry_client() is None, "Telemetry is enabled"

如何为您的组织选择退出?

除了设置上述环境变量外,组织还可以通过阻止对 mlflow-telemetry.io 域名的网络访问来选择退出遥测。当此域名无法访问时,遥测将被禁用。

退出 UI 遥测

如上所述,MLflow 服务器管理员可以设置 MLFLOW_DISABLE_TELEMETRYDO_NOT_TRACK 环境变量,在服务器全局禁用 UI 遥测。但是,如果您不是管理员(即无法设置环境变量),您仍然可以通过访问 MLflow UI 中的“设置”页面个人选择退出 UI 遥测(引入于 MLflow 3.8.0)。

将开关设置为“关闭”将从您的设备禁用 UI 遥测,即使管理员未在服务器端选择退出。

我们如何使用这些数据?

我们聚合匿名使用数据,并计划通过公共仪表板与社区分享见解。您将能够了解 MLflow 功能的使用情况,并通过贡献帮助改进它们。