跳到主要内容

使用情况跟踪

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

重要

MLflow 不会收集任何包含个人信息的数据,以符合 GDPR 和其他隐私法规。作为 Linux Foundation 项目,MLflow 遵守 LF 遥测数据收集和使用政策。此实施已由 Linux Foundation 审查和批准,经批准的提案记录在官方政策的 已完成的审查 部分。有关收集内容的详细信息,请参阅下面的 数据解释部分

注意

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

为什么要收集数据?

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

GDPR 合规性

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

MLflow 以以下方式遵守 GDPR

  • 不收集个人数据:收集的遥测数据是完全匿名的,不包含任何个人或敏感信息(例如,用户名、IP 地址、文件名、参数或模型内容)。MLflow 为每个会话生成一个随机 UUID 用于汇总使用事件,该 UUID 不能用于识别或跟踪单个用户。
  • 目的限制:数据仅用于根据汇总的功能使用模式来改进 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"}更好地了解每个事件的使用模式

跟踪的事件

不收集有关特定模型、代码或权重的详细信息。 仅将 跟踪的参数 列中列出的参数与事件一起记录;对于 跟踪的参数 列中为 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"}
evaluate
create_webhookWebhook 的实体{"events": ["model_version.created"]}
genai_evaluateGenAI 评估期间使用的内置评分器{"builtin_scorers": ["relevance_to_query"]}
prompt_optimization优化器类型、提示数量和评分器数量{"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判官模型提供商{"model_provider": "databricks"}
make_judge模型提供商(如果格式为 provider:model,则从模型字符串中提取):model){"model_provider": "openai"}
align_judge提供的跟踪数量和优化器类型{"trace_count": 100, "optimizer_type": "AlignmentOptimizer"}
autologgingFlavor 和元数据{"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_event一个 UI 交互事件。有关各种元数据元素的描述,请参阅 下面的表格{ "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一个随机生成的 UUID,每当 UI 元素重新渲染时都会重新生成774db636-5cfa-4ce8-8f56-7e7126dc3439
时间戳交互发生时的客户端时间戳1765789548484000.

为什么 MLflow 遥测默认启用(选择退出)?

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 中的“设置”页面(MLflow 3.8.0 中引入)来为自己选择退出 UI 遥测。

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

我们用这些数据做什么?

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