使用情况跟踪
从版本 3.2.0 开始,MLflow 默认收集匿名使用数据。此数据不包含敏感或个人身份信息。
MLflow 不收集任何包含个人信息的数据,符合 GDPR 和其他隐私法规。作为 Linux 基金会项目,MLflow 遵循LF 遥测数据收集和使用政策。此实现已由 Linux 基金会审查和批准,批准的提案记录在官方政策的已完成审查部分。有关收集内容的详细信息,请参阅下面的数据解释部分
。
遥测仅在 开源 MLflow 中启用。如果您通过托管服务或分发使用 MLflow,请咨询您的供应商以确定您的环境中是否启用了遥测。在所有情况下,您都可以选择按照我们文档中提供的指南选择退出。
为什么要收集数据?
MLflow 使用匿名遥测来了解功能使用情况,这有助于指导开发优先级和改进库。此数据有助于我们确定哪些功能最有价值,以及将重点放在错误修复或增强功能上。
GDPR 合规性
根据《通用数据保护条例》(GDPR),数据控制者和处理者有责任谨慎、透明和负责任地处理个人数据。
MLflow 以以下方式符合 GDPR:
- 不收集个人数据:收集的遥测数据是完全匿名的,不包含任何个人或敏感信息(例如,用户名、IP 地址、文件名、参数或模型内容)。MLflow 为每个会话生成一个随机 UUID,用于聚合使用事件,该 UUID 不能用于识别或跟踪单个用户。
- 目的限制:数据仅用于根据聚合功能使用模式改进 MLflow 项目。
- 数据最小化:仅收集必要的最小元数据以告知项目优先级(例如,功能切换状态、使用的 SDK/平台、版本信息)。
- 用户控制:用户可以随时通过设置环境变量 MLFLOW_DISABLE_TELEMETRY=true 或 DO_NOT_TRACK=true 来选择退出遥测。MLflow 立即遵守这些设置,无需重新启动。
- 透明度:遥测端点和行为已公开记录,MLflow 用户可以检查或阻止相关的网络调用。
如需进一步查询或数据保护问题,用户可以在 MLflow GitHub 仓库上提交问题。
收集哪些数据?
MLflow 仅收集非敏感、匿名数据,以帮助我们更好地了解使用模式。以下部分概述了此版本 MLflow 当前收集的数据。您可以在源代码中查看收集的确切数据。
数据解释
数据元素 | 解释 | 示例 | 为什么我们跟踪这个 |
---|---|---|---|
唯一会话 ID | 为每个会话创建一个随机生成的、不可个人识别的 UUID——定义为每次导入 MLflow 时 | 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 的事件,仅记录事件名称。
事件名称 | 跟踪参数 | 示例 |
---|---|---|
import_mlflow | 无 | 无 |
create_experiment | 无 | 无 |
create_run | PACKAGES_TO_CHECK_IMPORT 中的包是否已导入 | {"imports": ["sklearn"]} |
create_logged_model | 模型的风格(例如 langchain、sklearn) | {"flavor": "langchain"} |
create_registered_model | 无 | 无 |
create_model_version | 无 | 无 |
create_prompt | 无 | 无 |
start_trace | 无 | 无 |
log_assessment | 无 | 无 |
evaluate | 无 | 无 |
为什么 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 功能的使用情况,并通过贡献帮助改进它们。