尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DataHub MLflow 数据源接入指南:架构映射、认证配置与数据集血缘实践

DataHub MLflow 数据源接入指南:架构映射、认证配置与数据集血缘实践 DataHub MLflow 数据源接入指南架构映射、认证配置与数据集血缘实践【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahubMLflow 是机器学习生命周期管理平台本文围绕 DataHub 元数据摄取管道中内置的mlflow连接器mlflow.py系统讲解其摄取能力、MLflow 与 DataHub 实体之间的概念映射、认证与数据集血缘配置并结合源码与单元测试说明底层实现机制。读完本文你将掌握如何编写可运行的 MLflow 摄取 Recipe、如何用source_mapping_to_platform与materialize_dataset_inputs控制数据集血缘行为以及如何排障常见摄取问题。连接器能力总览MLflow 连接器用于将 MLflow 中的元数据摄取到 DataHub面向生产环境摄取工作流。模块整体能力声明位于源码的装饰器定义中mlflow.py能力说明是否需要额外配置描述DESCRIPTIONS提取 MLflow Registered Model 与 Model Version 的描述信息否容器CONTAINERS将 MLflow Experiments 提取为容器subtype 为 MLFLOW_EXPERIMENT否标签TAGS为 MLflow Model Registry 的 Stage 生成对应标签否数据集血缘Dataset Lineage将 Run 的 dataset inputs 映射为 DataHub 数据集并建立血缘是见下文数据集血缘章节有状态删除Stateful Deletion通过stateful_ingestion配置启用陈旧实体清理否可选从源码看MLflowSource继承自StatefulIngestionSourceBase因此天然支持有状态摄取其摄取入口get_workunits_internalmlflow.py依次产出三类工作单元Stage 标签、Experiments含 Runs 与数据集输入、ML ModelsRegistered Model 与 Model Version。版本兼容性连接器要求 MLflow 服务器版本1.28.0 或更高。如果使用更早的版本Experiments 和 Runs 的摄取将被跳过。该约束同样体现在源码中_traverse_mlflow_search_func遍历 MLflow 的search_experiments/search_runs等分页接口时若捕获到ENDPOINT_NOT_FOUND错误会在报告中记录警告并跳过实验与运行的摄取mlflow.py。这也是文档建议升级到 1.28.0 的底层原因——较旧版本缺少按分页 token 遍历的搜索端点。摄取内容边界MLflow 集成覆盖Registered Models、Model Versions、Experiments、Runs以及 Run 到 Model 的血缘同时捕获标签和有状态删除检测。需要特别说明的两个边界MLflow 特性不会以 DataHubMlFeature实体摄入MLflow 的 tracking API 不记录 feature 到列的出处信息连接器没有可读取的数据来源。模型不会在模型级别链接其训练数据集mlModelTrainingData不会被填充但 Run 级别的数据集血缘会被捕获详见下方概念映射的 Dataset Input 行。概念映射MLflow 实体如何落到 DataHubMLflow 中的实体与 DataHub 元数据模型并不是一一对应连接器遵循以下映射规则来源mlflow READMEMLflow 源概念DataHub 目标概念说明Registered ModelMlModelGroupModel Group 的名称与 Registered Model 名称相同如my_mlflow_model。Registered Model 在 MLflow 中充当同一模型多个版本的容器。Model VersionMlModel模型名称格式为{registered_model_name}{model_name_separator}{model_version}如 Registered Model 为my_mlflow_model且 Version 为 1 时对应my_mlflow_model_1、my_mlflow_model_2等。每个 Model Version 代表模型的一次具体迭代带自己的产物与元数据。ExperimentContainerMLflow 中每个 Experiment 映射为 DataHub 的 Container。Experiment 组织相关 Runs是模型开发迭代的逻辑分组可追踪参数、指标与产物。RunDataProcessInstance捕获 Run 的执行细节、参数、指标以及与模型的血缘。Model StageTagStage 与标签的映射关系Production →mlflow_production、Staging →mlflow_staging、Archived →mlflow_archived、None →mlflow_none。Model Stage 标识每个版本的部署状态。Dataset InputDataProcessInstanceInput通过mlflow.log_input()记录将 Run 链接到其训练数据集。需要开启materialize_dataset_inputs才会同时创建被引用的数据集实体。这些映射在源码中均有对应实现Stage 标签在_get_tags_workunits中创建标签名称由_make_stage_tag_name统一生成为mlflow_{stage_name.lower()}mlflow.py且四个 Stage 均带有预置的颜色与描述Production 为绿色#308613、Staging 为黄色#FACB66、Archived 为灰色#5D7283、None 为浅灰#F2F4F5。Experiment 通过Container与ExperimentKey平台 experiment 名称生成容器实体并把mlflow.note.content解析为容器描述、artifacts_location写入自定义属性mlflow.py。Model Version 的命名由model_name_separator配置决定默认_在_make_ml_model_urn中拼接mlflow.py同时每个 Model Version 还会通过VersionPropertiesClass关联到VersionSet并写入别名aliases与排序 IDmlflow.py。Run 被建模为DataProcessInstance其参数、指标分别转为MLHyperParamClass与MLMetricClass运行状态FINISHED/FAILED 等映射为 SUCCESS/FAILURE/SKIPPEDmlflow.py。前置条件开始摄取前请确认到 MLflow 源tracking server / registry server的网络连通性有效的认证凭据本模块所需元数据 API 的读取权限。安装与最小 Recipemlflow连接器随 DataHub 元数据摄取框架提供通过metadata-ingestion包使用。最小 Recipe 如下来源mlflow_recipe.ymlsource: type: mlflow config: # Coordinates tracking_uri: tracking_uri sink: # sink configstracking_uri用于指定 MLflow Tracking Server 地址如http://127.0.0.1:5000。根据源码MLflowConfig的定义mlflow.py若未设置连接器将回退到 MLflow 默认行为本地mlruns/目录或MLFLOW_TRACKING_URI环境变量。完整配置参数说明以下是MLflowConfig支持的全部配置项来自源码字段定义与注释配置项类型默认值说明tracking_uristrNone回退 MLflow 默认值Tracking Server URI未设置时使用本地mlruns/目录或MLFLOW_TRACKING_URI环境变量registry_uristrNone回退默认值Registry Server URI未设置时使用tracking_uri或MLFLOW_REGISTRY_URI环境变量model_name_separatorstr_模型名称与其版本号之间的分隔符如model_1或model-1base_external_urlstrNone构造指向 MLflow UI 的外部 URL 时使用的基础 URL未设置时若tracking_uri为 HTTP URL 则使用之两者均未设置则不生成外部 URLmaterialize_dataset_inputsboolFalse是否为每个 Run 物化创建数据集输入实体source_mapping_to_platformdictNone将 MLflow 数据集 source type 映射到 DataHub 平台的映射表usernamestrNoneMLflow 认证用户名passwordTransparentSecretStrNoneMLflow 认证密码摄入日志中会被脱敏处理stateful_ingestionStatefulStaleMetadataRemovalConfigNone有状态摄取配置用于陈旧实体删除另外MLflowConfig继承自EnvConfigMixin这意味着标准的环境相关配置如env默认PROD同样可用并会体现在生成的实体 URN 中。认证配置连接器支持通过username与password两个配置项向 MLflow 服务器进行认证source: type: mlflow config: tracking_uri: http://127.0.0.1:5000 username: username password: password底层实现中_configure_client会先校验username与password必须成对出现——只设置其中一个会直接抛出ValueErrormlflow.py。校验通过后连接器将凭据写入MLFLOW_TRACKING_USERNAME与MLFLOW_TRACKING_PASSWORD环境变量再构造MlflowClient(tracking_uri..., registry_uri...)。由于password字段使用TransparentSecretStr类型摄入日志中不会明文打印密码。数据集血缘配置MLflow Run 可以通过mlflow.log_input()记录训练数据集Dataset Input。连接器支持将不同 MLflow 引擎产生的数据集映射到指定的 DataHub 平台这是通过source_mapping_to_platform配置项实现的。平台映射规则source_mapping_to_platform: huggingface: snowflake # Maps Hugging Face datasets to Snowflake platform http: s3 # Maps HTTP data sources to s3 platform平台解析的完整优先级来自_get_dataset_platform_from_source_typemlflow.py用户自定义映射source_mapping_to_platform中配置的 source type → 平台映射优先使用内置映射gs会被转换为gcs直接平台匹配若 source type 本身是 DataHub 已知平台名称如snowflake、s3、bigquery则直接使用。其中已知平台名称来自 data_platforms.py 中的KNOWN_VALID_PLATFORM_NAMES列表包含bigquery、cassandra、databricks、delta-lake、dbt、feast、file、gcs、hdfs、hive、mssql、mysql、oracle、postgres、redshift、s3、sagemaker、snowflake、streamlit。注意该列表注释说明它并不完整仅用于血缘生成时的自动平台映射与手动覆盖不应作为 URN 校验依据。数据集物化materialize行为默认行为仅按平台和名称链接到已存在的数据集不会创建新数据集。若希望自动创建数据集实体需启用materialize_dataset_inputsmaterlize_dataset_inputs: true # Creates new datasets if they dont exist两个配置项可以独立组合使用# Only map to existing datasets materlize_dataset_inputs: false source_mapping_to_platform: huggingface: snowflake # Maps Hugging Face datasets to Snowflake platform pytorch: snowflake # Maps PyTorch datasets to Snowflake platform # Create new datasets and map platforms materlize_dataset_inputs: true source_mapping_to_platform: huggingface: snowflake pytorch: snowflake注意materlize_dataset_inputs是官方文档与 Recipe 中使用的键名拼写如此非materialize配置时请保持与文档一致。源码中的 Python 字段名为materialize_dataset_inputs两者对应同一配置。底层血缘实现_get_dataset_input_workunitsmlflow.py按以下分支处理每个 dataset input本地/代码数据集source type 为local或code直接在mlflow平台下创建数据集实体不涉及外部平台映射托管数据集其他 source type若materialize_dataset_inputs开启先在映射平台下创建托管数据集实体若 source type 找不到任何映射平台会在报告中记录失败failure提示请配置materialize_dataset_inputs.source_mapping_to_platform并跳过该数据集随后在mlflow平台下创建一个数据集引用实体并通过UpstreamLineageClasstype 为COPY指向外部平台的数据集——即使未开启物化只要平台可解析引用与上游血缘依然会建立与默认仅链接已有数据集的行为一致最后将所有数据集引用作为DataProcessInstanceInput的inputEdges附加到 Run 上形成 Run → 训练数据集的输入血缘。此外连接器会尝试解析数据集 schema优先读取mlflow_colspec格式的字段名与类型若 schema 不是该格式则原样放入自定义属性schemaJSON 解析失败时会在报告中记录警告mlflow.py。测试用例印证单元测试 test_mlflow_source.py 覆盖了上述全部分支test_materialization_disabled_with_supported_platform关闭物化且平台可解析时仅创建引用并建立 COPY 上游test_materialization_disabled_with_unsupported_platform关闭物化且平台不可解析时引用实体不带上游test_materialization_enabled_with_supported_platform开启物化时创建托管数据集实体test_materialization_enabled_with_unsupported_platform开启物化但无映射平台时记录失败并跳过test_materialization_enabled_with_custom_mapping通过source_mapping_to_platform将不支持的 source type如unsupported_platform映射为snowflake后成功物化。外部链接与运行细节连接器会为以下实体生成指向 MLflow UI 的外部 URLModel Version{base_url}/#/models/{model_name}/versions/{version}。基础 URL 优先使用base_external_url其次在tracking_uri为 HTTP URL 时使用tracking_uri两者皆无则不生成mlflow.py。单元测试test_make_external_link_local/test_make_external_link_remote/test_make_external_link_remote_via_config验证了这三种情形。Run{tracking_uri}/#/experiments/{experiment_id}/runs/{run_id}仅在tracking_uri以 http 开头时生成mlflow.py。此外Run 的元数据还包含run.info.run_name缺失时回退 run_id作为展示名称、user_id缺失时回退为mlflow作为执行者、artifact_uri作为输出 URL以及start_time/end_time计算出的运行时长durationMillismlflow.py。限制模块行为受平台暴露的源 API、权限与元数据约束请参考能力说明中标注为不支持或有条件的特性。当前已知限制包括MLflow tracking API 不暴露 feature 到列的出处因此无法摄取MlFeature实体模型级别不填充mlModelTrainingData训练数据集血缘仅在 Run 级别体现若 Model Version 没有关联的 Runmodel_version.run_id为空则该模型的超参数与训练指标不可用源码注释明确说明mlflow.pyExperiments 与 Runs 的摄取依赖 MLflow 1.28.0 的搜索 API旧版本会被跳过。故障排查若摄取失败请按以下顺序排查校验凭据确认username/password有效且成对配置只配其中一个会触发ValueError校验权限确认服务账号对 tracking/registry API 具备读取权限校验连通性确认tracking_uri/registry_uri可从执行摄取的主机访问校验范围过滤确认没有误配置导致实体被过滤查看摄入日志连接器会在SourceReport中记录 source-specific 错误与警告如 API 端点缺失、schema 解析失败、物化平台缺失等根据日志中的具体错误调整配置后重试。例如若日志出现 MLflow API Endpoint Not Found for Experiments 警告说明 MLflow 版本低于 1.28.0需升级服务器或接受 Experiments/Runs 被跳过的行为若出现 Unable to materialize dataset inputs 失败说明开启物化后未给对应 source type 配置source_mapping_to_platform映射。参考资料连接器官方文档mlflow_pre.md、mlflow_post.md、mlflow_recipe.yml、mlflow README核心实现mlflow.py平台列表data_platforms.py单元测试test_mlflow_source.py【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表