跳到主要内容

使用情况跟踪

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 仓库 上提交问题。

收集哪些数据?

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

数据说明

数据元素说明示例我们为何跟踪此项
唯一会话 ID为每次会话(定义为每次导入 MLflow)生成一个随机生成的、不可识别个人的 UUID。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”环境变量,则将其作为参数进行跟踪。

事件名称跟踪的参数示例
import_mlflow
create_experiment创建的实验 ID(随机 UUID 或整数){"experiment_id": "0"}
create_run导入的包,来自 MODULES_TO_CHECK_IMPORT 是否已导入;创建运行时的实验 ID{"imports": ["sklearn"], "experiment_id": "0"}
create_logged_model模型的风味(例如,langchain、sklearn){"flavor": "langchain"}
get_logged_model导入的包,来自 MODULES_TO_CHECK_IMPORT 是否已导入{"imports": ["sklearn"]}
create_registered_model
create_model_version
create_prompt
start_trace
log_assessment
evaluate
create_webhookWebhook 的实体{"events": ["model_version.created"]}
genai_evaluateGenAI Evaluate 期间使用的内置评分器{"builtin_scorers": ["relevance_to_query"]}
prompt_optimization
log_dataset
log_metric同步模式是否开启{"synchronous": False}
log_param同步模式是否开启{"synchronous": True}
log_batch有关是否记录指标、参数或标签以及记录模式的信息{"metrics": False, "params": True, "tags": False, "synchronous": False}
invoke_custom_judge_modelJudge 模型提供商{"model_provider": "databricks"}
make_judge模型提供商(如果格式为 provider,则从模型字符串中提取:model){"model_provider": "openai"}
align_judge提供的跟踪数量和优化器类型{"trace_count": 100, "optimizer_type": "AlignmentOptimizer"}

MLflow 遥测为何是选择退出模式?

MLflow 采用选择退出遥测模式,以利用真实的用法模式来改进平台,造福所有用户。默认收集匿名使用数据使我们能够:

  • 了解 MLflow 在各种环境和工作流中的使用情况
  • 更有效地识别常见痛点和需要改进的功能领域
  • 衡量更改的影响,并确保它们能改善更广泛社区的体验

如果遥测是选择加入模式,则只会有少量用户被代表,这将导致有偏差的见解,并可能导致优先级错位。我们致力于透明度和用户选择。遥测已清楚记录、匿名化,并且可以通过配置随时轻松禁用。这种方法有助于我们让 MLflow 对每个人都更好,同时让您完全掌控。请参阅 我们正在如何处理这些数据 部分以获取更多信息。

如何选择退出?

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

  • MLFLOW_DISABLE_TELEMETRY=true
  • DO_NOT_TRACK=true

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

注意

MLflow 在 某些 CI 环境 中会自动禁用遥测。如果您希望支持其他 CI 环境,请在我们的 GitHub 仓库上 提出问题

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

设置的范围

  • 环境变量仅在显式设置或继承它的进程中生效。
  • 如果您从干净的环境中启动子进程,这些子进程可能不会继承您 shell 的环境变量,遥测功能可能会保持启用状态。例如:subprocess.run([...], env={})

确保在所有环境中一致禁用遥测的建议

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

如何验证遥测已禁用?

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

from mlflow.telemetry import get_telemetry_client

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

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

组织可以通过阻止网络访问 https://config.mlflow-telemetry.io 来禁用遥测。当此端点不可达时,MLflow 会自动禁用遥测。

我们如何处理这些数据?

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