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

资讯详情

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

MLflow MlflowClient 完整实战指南:以 CRUD 方式统一管理 Experiments、Runs、模型注册表与 Traces

MLflow MlflowClient 完整实战指南:以 CRUD 方式统一管理 Experiments、Runs、模型注册表与 Traces MLflow MlflowClient 完整实战指南以 CRUD 方式统一管理 Experiments、Runs、模型注册表与 Traces【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow导读mlflow.client是 MLflow 提供的Python 级低层 CRUD 接口它不维护当前活动 Run这类全局状态而是将每一个调用直接翻译为对 MLflow Tracking 服务与 Model Registry 服务的 REST API 请求。本文围绕 mlflow.client.rst 展开结合 client.py 与 tracking/client.py 的源码实现系统讲解MlflowClient的构造与 URI 解析规则、Experiments 与 Runs 的完整生命周期、指标/参数/标签/Artifact 的写入与检索、模型注册表的版本化治理以及 Prompt Registry 与 Tracing 等 GenAI 能力。读完本文你将掌握用纯代码方式编程式地管理 MLflow 后端所有核心对象的能力并理解其与高层 fluent API 的边界。一、mlflow.client模块定位与 MlflowClient 的引入方式1.1 一个极简但完整的模块mlflow/client.py全文件仅十余行其全部职责是导出唯一符号MlflowClient The mlflow.client module provides a Python CRUD interface to MLflow Experiments, Runs, Model Versions, and Registered Models. This is a lower level API that directly translates to MLflow REST API calls. For a higher level API for managing an active run, use the :py:mod:mlflow module. from mlflow.tracking.client import MlflowClient __all__ [ MlflowClient, ]这段源码的 docstring 是本模块定位的权威说明包含三层含义职责范围Experiments、Runs、Model Versions、Registered Models 四类对象的 CRUD实现方式直接对应 MLflow REST API 调用低层 API与高层 API 的边界需要活动 Run自动管理时请使用mlflow模块即mlflow/tracking/fluent.py中的 fluent API如mlflow.start_run()。同时MlflowClient也会在包顶层被导出见 mlflow/init.py因此下面两种写法完全等价from mlflow.client import MlflowClient from mlflow import MlflowClient # 更常用1.2 统一入口背后的分层架构从 tracking/client.py 的类定义可以看到MlflowClient是一个统一外观Facade其内部由多个独立实现协作TrackingServiceClient负责 Experiments、Runs、Metrics、Params、Tags、Artifacts 等追踪操作ModelRegistryClient负责 Registered Models、Model Versions 等注册表操作由_get_registry_client()懒加载创建WorkspaceProviderClient负责工作区WorkspaceCRUD同样懒加载TracingClient负责 Trace/Span 的写入与查询。这一分层结构提供了统一 API 的同时保留各子系统的独立实现是理解MlflowClient内部调用链的关键。二、构造 MlflowClient三大 URI 与解析规则2.1 构造函数签名def __init__( self, tracking_uri: str | None None, registry_uri: str | None None, workspace_store_uri: str | None None, ):三个参数的含义与默认解析规则如下源码见 tracking/client.py参数含义未指定时的解析顺序tracking_uri本地或远端 Tracking Server 地址回落到mlflow.tracking.set_tracking_uri设定的服务registry_uri本地或远端模型注册表服务地址先回落mlflow.tracking.set_registry_uri仍未设置则使用 tracking_uriworkspace_store_uriWorkspace 提供方后端地址默认取 tracking_uri也可单独指向专用 workspace store常见 URI 形式包括本地文件存储./mlruns、SQLitesqlite:///mlruns.db、PostgreSQLpostgresql://user:passhost:port/db、远端 HTTPhttp://host:port等。构造时会依次调用utils._resolve_tracking_uri、registry_utils._resolve_registry_uri与workspace_utils.resolve_workspace_store_uri完成解析。2.2 一个典型的初始化示例import mlflow from mlflow import MlflowClient # 先通过 fluent API 设定全局 tracking uri之后无需再传参 mlflow.set_tracking_uri(sqlite:///mlruns.db) client MlflowClient() # tracking_uri 与 registry_uri 均回落为 sqlite:///mlruns.db print(client.tracking_uri) # 通过 tracking_uri 属性读取 print(client.get_workspace_store_uri()) # workspace store 地址恒非空其中tracking_uri属性直接返回内部 TrackingServiceClient 的 URItracking/client.pyget_workspace_store_uri()恒返回非空值因为未显式指定 workspace URI 时会回落为 tracking URI。2.3 关于 lazy 初始化与异常ModelRegistryClient与WorkspaceProviderClient均采用懒加载第一次调用注册表或工作区 API 时才实例化。若注册表 URI 指向不支持的后端如 FileStore会抛出MlflowException错误信息会列出该 store 支持的 URI scheme见 tracking/client.py工作区后端不支持的场景同理见 tracking/client.py。三、Experiments实验的全生命周期管理3.1 创建实验create_experiment要求实验名唯一且大小写敏感返回字符串形式的实验 IDfrom pathlib import Path from mlflow import MlflowClient client MlflowClient() experiment_id client.create_experiment( Social NLP Experiments, artifact_locationPath.cwd().joinpath(mlruns).as_uri(), # 不传则由服务端决定默认位置 tags{version: v1, priority: P1}, ) client.set_experiment_tag(experiment_id, nlp.framework, Spark NLP) experiment client.get_experiment(experiment_id) print(fName: {experiment.name}) print(fExperiment_id: {experiment.experiment_id}) print(fArtifact Location: {experiment.artifact_location}) print(fTags: {experiment.tags}) print(fLifecycle_stage: {experiment.lifecycle_stage})源码与文档给出的典型输出见 tracking/client.pyName: Social NLP Experiments Experiment_id: 1 Artifact Location: file:///.../mlruns Tags: {version: v1, priority: P1, nlp.framework: Spark NLP} Lifecycle_stage: active注意tags字典会被转换为ExperimentTag实体随实验一起写入实验名不支持复用除非被数据库管理员永久删除。3.2 检索实验两个获取方法各有用处# 按 ID 获取不存在则抛异常 exp client.get_experiment(experiment_id) # 按名称获取大小写敏感不存在返回 None exp2 client.get_experiment_by_name(Default) # 默认实验 ID 为 03.3 搜索实验filter_string 与分页search_experiments是筛选大量实验的推荐方式tracking/client.pyfrom mlflow.entities import ViewType client MlflowClient() client.create_experiment(a, tagsNone) client.create_experiment(b, tagsNone) client.create_experiment(ab, tags{k: v}) # 按名称精确匹配 experiments client.search_experiments(filter_stringname a) # 仅查询已删除的实验 experiments client.search_experiments(view_typeViewType.DELETED_ONLY)其参数语义view_typeViewType.ACTIVE_ONLY默认/DELETED_ONLY/ALLmax_results单页最大条数部分后端可能施加自身限制filter_string支持name、creation_time、last_update_time、tags.tag_key四类标识符字符串属性与 tag 支持、!、LIKE大小写敏感匹配、ILIKE大小写不敏感匹配数值属性支持、!、、、、逻辑运算符支持AND。若 tag_key 含空格需用反引号包裹如tags.\extra keyorder_by可按experiment_id、name、creation_time、last_update_time排序可附DESC/ASC后缀未指定时默认[last_update_time DESC]最近更新优先page_token取上次返回PagedList.token属性继续翻页。返回的PagedList[Experiment]通过token属性暴露下一页游标。3.4 删除与恢复软删除client.delete_experiment(experiment_id) # 软删除lifecycle_stage 变为 deleted client.restore_experiment(experiment_id) # 恢复除非已被永久删除源码注释明确指出删除是软删除实验名不可复用除非由数据库管理员做永久清除见 tracking/client.py。四、Runs以 CRUD 方式管理一次运行4.1 创建与终止 Run显式生命周期与mlflow.start_run()不同MlflowClient下的create_run只创建对象、不执行代码、也不改变全局活动 Run。因此使用它时必须显式调用set_terminated结束from mlflow import MlflowClient client MlflowClient() tags {engineering: ML Platform} run client.create_run(0, tagstags, run_nameplatform-run-24) print(fRun tags: {run.data.tags}) print(fRun id: {run.info.run_id}) print(fRun name: {run.info.run_name}) print(flifecycle_stage: {run.info.lifecycle_stage}) print(fstatus: {run.info.status}) # 显式终止status 可取 FINISHED/KILLED/FAILED/RUNNING/SCHEDULED client.set_terminated(run.info.run_id, statusKILLED)典型输出见 tracking/client.pyRun tags: {engineering: ML Platform} Experiment id: 0 Run id: 65fb9e2198764354bab398105f2e70c1 Run name: platform-run-24 lifecycle_stage: active status: RUNNINGcreate_run的start_time缺省取当前时间戳set_terminated的status缺省为FINISHED见 tracking/client.py。4.2 获取 Run 与父 Runrun client.get_run(run.info.run_id) # 不存在则抛异常 parent client.get_parent_run(child_run_id) # 不存在父 Run 返回 Noneget_run返回的Run对象同时携带三类信息见 tracking/client.pyRunInfo元数据run_id、experiment_id、status、生命周期阶段等RunDataparams、metrics、tags 集合同一 key 多次记录的 metric取最大 step 下最新记录值RunInputs实验性该 Run 使用的数据集信息。4.3 记录指标、参数、标签log_metric的参数要点tracking/client.pykey仅支持字母数字、_、-、.、空格、/所有后端至少支持 250 长度valuefloat 值不同 store 对/-Inf的处理可能不同如 SQLAlchemy store 会替换为最大/最小浮点数timestamp缺省当前系统时间step训练步数缺省 0synchronous实验性True阻塞直到写入成功False异步写入并返回RunOperationsfutureNone时读取环境变量MLFLOW_ENABLE_ASYNC_LOGGING缺省为 False。client MlflowClient() run client.create_run(0) client.log_metric(run.info.run_id, m, 1.5) client.log_param(run.info.run_id, p, p) # 参数值会被字符串化 client.set_tag(run.info.run_id, s.release, 1.1.0-RC) client.set_terminated(run.info.run_id) run client.get_run(run.info.run_id) print(run.data.metrics, run.data.params, run.data.tags) # 异步写入示例 client.log_metric(run.info.run_id, m, 1.5, synchronousFalse)4.4 批量写入log_batch 与 log_inputslog_batch一次写入多组 metric/param/tag内部会自动把 Param 的 value 字符串化源码见 tracking/client.pyimport time from mlflow import MlflowClient from mlflow.entities import Metric, Param, RunTag timestamp int(time.time() * 1000) client MlflowClient() run client.create_run(0) client.log_batch( run.info.run_id, metrics[Metric(m, 1.5, timestamp, 1)], params[Param(p, p)], tags[RunTag(t, t)], ) client.set_terminated(run.info.run_id) run client.get_run(run.info.run_id) print(run.data.metrics, run.data.params, run.data.tags, run.info.status)log_inputs则用于登记 Run 使用的数据集DatasetInput或模型输入LoggedModelInput是后续数据集溯源的基础见 tracking/client.py。4.5 搜索 Runs跨实验筛选与排序search_runs是批量分析 Run 的核心方法tracking/client.pyimport mlflow from mlflow import MlflowClient from mlflow.entities import ViewType experiment_id mlflow.create_experiment(Social NLP Experiments) with mlflow.start_run(experiment_idexperiment_id) as run: mlflow.log_metric(m, 1.55) mlflow.set_tag(s.release, 1.1.0-RC) with mlflow.start_run(experiment_idexperiment_id): mlflow.log_metric(m, 2.50) mlflow.set_tag(s.release, 1.2.0-GA) client MlflowClient() # 按指标 m 降序排列全部 Run runs client.search_runs(experiment_id, order_by[metrics.m DESC]) # 只查已删除的 Run并用大小写不敏感模式匹配 tag filter_string tags.s.release ILIKE %rc% runs client.search_runs( experiment_id, run_view_typeViewType.DELETED_ONLY, filter_stringfilter_string )参数要点filter_string缺省搜索全部order_by支持metrics.name、params.name、tags.name等字段并可选DESC/ASC后缀未指定时默认按start_time DESC再按run_id排序返回的PagedList[Run]同样通过token翻页。4.6 删除与恢复 Runclient.delete_run(run_id) # 软删除lifecycle_stage 变为 deleted client.restore_run(run_id) # 恢复4.7 指标历史与标签操作get_metric_history(run_id, key)返回该指标的全部历史记录列表Metric(key, value, timestamp, step)是绘制训练曲线的数据来源set_experiment_tag/delete_experiment_tag实验级标签set_tag/delete_tagRun 级标签update_run(run_id, statusNone, nameNone)更新 Run 状态或名称。五、Artifacts文件、文本、字典、图表与表格的上传下载MlflowClient提供从单个文件到 DataFrame 表格的多种 artifact 写入能力5.1 文件与目录import tempfile from pathlib import Path from mlflow import MlflowClient client MlflowClient() run client.create_run(0) with tempfile.TemporaryDirectory() as tmp_dir: path Path(tmp_dir, features.txt) path.write_text(rooms, zipcode, median_price, school_rating, transport) client.log_artifact(run.info.run_id, path) # 单个文件/目录 client.log_artifacts(run.info.run_id, /path/to/dir) # 整个目录 for artifact in client.list_artifacts(run.info.run_id): print(fartifact: {artifact.path}, is_dir: {artifact.is_dir}) # 下载到本地目录返回目标路径 local_path client.download_artifacts(run.info.run_id, features.txt, dst_path/tmp/ml)注意源码中有防御性校验以 trace 请求 ID 前缀开头的run_id会被拒绝见 tracking/client.py。5.2 结构化内容client.log_text(run.info.run_id, Hello world!, hello.txt) client.log_dict(run.info.run_id, {state: TX, Available: 25}, config.json) client.log_figure(run.info.run_id, fig, plot.png) # 支持 matplotlib / plotly client.log_image(run.info.run_id, image_array, img.png) # 支持 PIL 图像 / numpy 数组 # 表格pandas DataFrame / dict 列表 client.log_table(run.info.run_id, datadf, artifact_filemydata.json) df client.load_table(run.info.run_id, mydata.json) # 读回 DataFrame5.3 流式写入log_stream支持将迭代器/生成器流式写出到 artifact 文件适合大文件场景见 tracking/client.py。六、Logged Models实验内模型对象的直接管理除注册表之外MlflowClient还提供对实验内已记录模型Logged Model的 CRUD这在工作区模型治理中非常有用源码位于 tracking/client.py 附近client.get_logged_model(model_id) # 按 ID 获取 client.delete_logged_model(model_id) # 删除 client.set_logged_model_tags(model_id, tags) # 打标签 client.delete_logged_model_tag(model_id, key) # 删标签 client.list_logged_model_artifacts(model_id) # 列出模型 artifact 文件model_id由_validate_model_id_specified校验当目标模型可能不存在或权限不足时set_logged_model_tags会给出明确的错误提示提示可改用set_model_version_tag操作注册表版本。七、Model Registry注册模型与模型版本治理模型注册表相关方法全部经由懒加载的ModelRegistryClient执行是团队协作中模型发布、版本化、Stage/Alias 流转的标准入口。7.1 Registered Model 的 CRUDimport mlflow from mlflow import MlflowClient name SocialMediaTextAnalyzer tags {nlp.framework: Spark NLP} desc This sentiment analysis model classifies the tone-happy, sad, angry. mlflow.set_tracking_uri(sqlite:///mlruns.db) client MlflowClient() client.create_registered_model(name, tags, desc) # 创建名称需唯一 rm client.get_registered_model(name) # 获取 client.rename_registered_model(name, NewName) # 重命名 client.update_registered_model(name, descriptionnew) # 更新描述 client.delete_registered_model(name) # 删除 # 搜索filter_string 支持 name、tags.key 等 models client.search_registered_models(filter_stringname SocialMediaTextAnalyzer)源码中的两个细节值得注意见 tracking/client.pycreate_registered_model会拒绝携带 prompt 标签的模型delete_registered_model从模型注册表中移除模型。7.2 创建 Model Versioncreate_model_version从给定 source 创建新版本tracking/client.pyimport mlflow.sklearn from mlflow import MlflowClient from mlflow.models import infer_signature from sklearn.datasets import make_regression from sklearn.ensemble import RandomForestRegressor mlflow.set_tracking_uri(sqlite:///mlruns.db) X, y make_regression(n_features4, n_informative2, random_state0, shuffleFalse) rfr RandomForestRegressor(n_estimators3, random_state42).fit(X, y) signature infer_signature(X, rfr.predict(X)) with mlflow.start_run() as run: mlflow.sklearn.log_model(rfr, artifact_pathsklearn-model, signaturesignature) client MlflowClient() client.create_registered_model(RandomForestRegression) # source 支持 run 相对 URIruns:/run_id/artifact_path mv client.create_model_version( nameRandomForestRegression, sourcefruns:/{run.info.run_id}/sklearn-model, run_idrun.info.run_id, descriptionv1 of the regressor, ) print(fVersion: {mv.version}, Status: {mv.status})参数要点sourcerun 相对 URIruns:/run_id/model_artifact_path、注册表 URImodels:/model_name/version或其他后端支持的 URI如s3://my_bucket/my/modelrun_id生成该模型的 tracking runrun_link生成该模型的 run 链接await_creation_for等待版本进入READY状态的秒数默认等待约 5 分钟传0或None跳过等待model_id从 Experiment 提升为注册表版本时的模型 ID如适用。底层实现_create_model_version见 tracking/client.py还包含 Databricks 场景的特殊处理当 tracking 与 registry URI 分属不同 Databricks 工作区时会自动将模型文件从源位置复制到注册表工作区并打印提示。7.3 版本检索、流转与标签mv client.get_model_version(name, version) # 按 (name, version) 获取 client.get_latest_versions(name, stages[Staging]) # 获取指定阶段的最新版本 client.transition_model_version_stage(name, version, stage) # 阶段流转如 Staging → Production client.update_model_version(name, version, description...) client.delete_model_version(name, version) client.set_model_version_tag(name, version, key, value) client.delete_model_version_tag(name, version, key) # 获取下载 URI便于后续部署拉取模型文件 uri client.get_model_version_download_uri(name, version) # 搜索版本支持 filter_string 与 order_by versions client.search_model_versions(filter_stringname RandomForestRegression)transition_model_version_stage是经典 MLflow 三阶段Staging / Production / Archived治理流程的关键方法get_model_version_stages可查询某版本允许流转的阶段集合见 tracking/client.py。7.4 别名Alias比 Stage 更灵活的指向别名让团队可以为当前应被生产使用的版本起一个语义化名字client MlflowClient() client.create_registered_model(RandomForestRegression) mv client.create_model_version( nameRandomForestRegression, sourcefruns:/{run.info.run_id}/sklearn-model, run_idrun.info.run_id, ) # 给版本设置别名 client.set_registered_model_alias(RandomForestRegression, champion, mv.version) client.get_model_version_by_alias(RandomForestRegression, champion) # 按别名取版本 client.delete_registered_model_alias(RandomForestRegression, champion) # 删除别名注意别名规则vnumber格式如v9、v42被保留、不可作为别名设置见 tracking/client.py。八、Prompt RegistryGenAI 提示词的版本化管理MlflowClient内置对 Prompt Registry 的支持用于对提示词模板做与模型同级的版本管理源码见 tracking/client.py。使用时需为客户端指定 registry URIfrom mlflow import MlflowClient # 提示词注册表需要显式指定 registry_uri client MlflowClient(registry_urisqlite:///prompt_registry.db) # 注册文本型提示词{{variable}} 双花括号为占位符 client.register_prompt( namegreeting_prompt, templateRespond to the users message as a {{style}} AI., response_format{type: string, description: A friendly response}, ) # 注册 Chat 型提示词多轮消息列表 client.register_prompt( nameassistant_prompt, template[ {role: system, content: You are a helpful {{style}} assistant.}, {role: user, content: {{question}}}, ], response_format{type: object, properties: {answer: {type: string}}}, ) # 加载并格式化使用 prompt client.load_prompt(greeting_prompt) final_text prompt.format(stylefriendly) # 同名再注册即生成新版本支持 commit_message 与 tags prompt client.register_prompt( namegreeting_prompt, templateRespond to the users message as a {{style}} AI. {{greeting}}, commit_messageAdd a greeting to the prompt., tags{author: Bob}, )关联方法还包括search_prompts搜索、set_prompt_alias/delete_prompt_alias别名、set_prompt_version_tag/delete_prompt_version_tag版本标签、link_prompt_version_to_run将提示词版本关联到 Run、link_prompt_versions_to_trace关联到 Trace、list_logged_prompts列出 Run 上已登记的提示词等构成完整的提示词治理闭环。九、Workspace 与 Tracing现代 MLflow 的两项扩展能力9.1 Workspace 工作区管理MlflowClient通过配置的 workspace provider 暴露工作区 CRUD见 tracking/client.pyworkspaces client.list_workspaces() # 列出当前用户可用的工作区 ws client.create_workspace( namemy-workspace, description..., default_artifact_roots3://my-bucket/artifacts, trace_archival_config..., # TraceArchivalConfig可空 ) client.update_workspace(name, ...) client.delete_workspace(name, modeRESTRICT) # 删除模式默认 RESTRICTdelete_workspace的mode默认取WorkspaceDeletionMode.RESTRICT用于防止误删。若配置的 workspace URI 不受支持_get_workspace_client会抛出带错误码FEATURE_DISABLED的MlflowException。9.2 Tracing以代码命令式创建 Trace 与 SpanMlflowClient的 Tracing 方法是命令式imperativeAPI区别于mlflow.trace装饰器与mlflow.start_span()上下文管理器——它需要手动维护 Span 生命周期见 tracking/client.pyfrom mlflow import MlflowClient client MlflowClient() # 1. 启动 trace创建根 span root_span client.start_trace(my_trace) trace_id root_span.trace_id # 2. 创建子 span child_span client.start_span(child_span, trace_idtrace_id, parent_idroot_span.span_id) # 做一些业务处理... client.end_span(trace_idtrace_id, span_idchild_span.span_id) # 3. 必须显式结束 trace否则不会落库 client.end_trace(trace_id) # 4. 查询 trace client.get_trace(trace_id) traces client.search_traces(experiment_ids[0], max_results10) # 5. 标签与删除 client.set_trace_tag(trace_id, key, value) client.delete_trace_tag(trace_id, key) client.delete_traces(trace_ids[trace_id])两个关键注意点均有源码佐证start_trace会在全局上下文中已存在活动 trace即正在使用 fluent API 创建 span时抛出MlflowException以避免产生意外嵌套使用MlflowClient.start_trace()开启的 trace必须调用end_trace(trace_id)结束否则不会记录。start_trace的参数还包括span_type默认SpanType.UNKNOWN、inputs、attributes、tags、experiment_id缺省按mlflow.set_experiment→MLFLOW_EXPERIMENT_NAME→MLFLOW_EXPERIMENT_ID→ 服务端默认实验的顺序解析、start_time_ns、run_id关联到某 Run与links。十、与 fluent API 的对照何时用 MlflowClient为帮助读者快速决策下表对照了两种 API 的典型差异fluent API 实现位于 mlflow/tracking/fluent.py 的start_run等函数场景推荐 API说明在脚本内训练并自动记录mlflow.start_run()mlflow.log_metric(...)fluent API 自动维护活动 Run、自动设置系统标签服务/调度任务中编程式创建 RunMlflowClient().create_run()只创建对象不改变全局上下文需显式set_terminated查询/检索历史数据MlflowClient().search_runs()、search_experiments()支持 filter_string、分页与排序模型注册表治理MlflowClient().create_model_version()等注册表方法仅存在于客户端 API提示词、Trace、WorkspaceMlflowClient()对应方法均为客户端级命令式 API从测试代码也能印证这一分工在 tests/tracking/test_tracking.py 中测试先用start_run()创建活动 Run再用MlflowClient().log_batch(...)做批量写入最后用client.get_run()校验展示了两种 API 在同一流程中的典型配合方式。十一、最佳实践与注意事项URI 先行构造MlflowClient前先用mlflow.set_tracking_uri()/mlflow.set_registry_uri()设定全局地址或在构造时显式传入避免因隐式回落产生歧义。显式管理生命周期使用create_run后必须set_terminated使用start_trace后必须end_trace否则数据不会落库。软删除语义experiment 与 run 的删除均为软删除删除后名称不可复用可通过restore_*恢复彻底清理需数据库层操作。异步写入可选对吞吐敏感的场景可开启synchronousFalse或环境变量MLFLOW_ENABLE_ASYNC_LOGGING获取RunOperationsfuture 统一等待。别名优于 Stage面向现代 MLOps 流程优先使用模型别名Alias指向当前冠军版本而非依赖有限的 Stage 枚举。注意后端限制模型注册表与 workspace 后端能力取决于 URI scheme如 FileStore 不支持注册表调用相关 API 前确认registry_uri/workspace_store_uri指向受支持的存储。结语MlflowClient将 MLflow Tracking 与 Model Registry 两大子系统的 REST 能力封装为一个统一的 Python CRUD 接口从 Experiment/Run 的创建、检索、搜索与软删除到 metric/param/tag/artifact 的写入与读取再到注册模型、版本流转、别名管理乃至 Prompt Registry、Workspace 与 Tracing 等新一代 GenAI 能力全部可以脱离交互式环境、以纯代码方式编排。理解它的分层实现TrackingServiceClient / ModelRegistryClient / WorkspaceProviderClient / TracingClient与 fluent API 的分工边界是在 MLflow 之上构建自动化 MLOps 平台的第一步。相关源码可进一步阅读 mlflow/tracking/client.py约 7000 行完整实现与 mlflow/tracking/fluent.py高层 API 对照。【免费下载链接】mlflowThe open source AI engineering platform for agents, LLMs, and ML models. MLflow enables teams of all sizes to debug, evaluate, monitor, and optimize production-quality AI applications while controlling costs and managing access to models and data.项目地址: https://gitcode.com/GitHub_Trending/ml/mlflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表