能否通过MLflow API事后修改已注册模型版本的标签?
MLflow 注册模型版本标签修改问题答复
完全可以通过MLflow官方Python API实现你需要的已注册模型版本标签修改操作,不需要额外开发适配逻辑,对应你的月度重训练流水线场景,实现流程如下:
- 新模型版本注册阶段:调用创建模型版本接口时直接传入初始标签即可,接口会自动将标签绑定到对应新版本上
- 旧版本标签更新阶段:直接调用标签设置接口覆盖旧版本原有
valid_to_date标签值即可,接口原生支持已存在标签的覆写,不需要先删后加
核心实现代码参考
初始化MLflow客户端:
from mlflow.tracking import MlflowClient from datetime import datetime # 初始化客户端,会自动读取你当前配置的MLflow跟踪服务地址 client = MlflowClient() MODEL_NAME = "your_monthly_retrained_model" # 替换成你自己的模型名
新模型训练完成后注册新版本,绑定初始生效标签:
current_train_date = datetime.now().strftime("%Y-%m-%d") # 替换成你本次训练产出的模型存储uri model_source_uri = "runs:/<your_training_run_id>/model" # 注册新版本,设置初始生效区间 new_mv = client.create_model_version( name=MODEL_NAME, source=model_source_uri, tags={ "valid_from_date": current_train_date, "valid_to_date": "2099-01-01" } )
更新上一版本的失效日期为新版本上线日期:
# 查询当前模型所有版本,筛选出上一个正式版本 all_model_versions = client.search_model_versions(f"name='{MODEL_NAME}'") prev_version = sorted( [v for v in all_model_versions if int(v.version) != int(new_mv.version)], key=lambda x: int(x.version), reverse=True )[0] # 直接覆写上一版本的valid_to_date标签值 client.set_model_version_tag( name=MODEL_NAME, version=prev_version.version, key="valid_to_date", value=current_train_date )
落地注意事项
- 日期标签统一使用
YYYY-MM-DD格式的字符串存储,不要使用1-1-2099这类月、日不带前导零的格式,否则字符串排序逻辑会出错,后续按时间过滤模型版本时会出现匹配错误 - 后续做历史数据回填时,不需要拉取全量模型版本遍历匹配,直接在
search_model_versions接口里传入标签过滤条件即可,例如要匹配2024年5月20日生效的模型,过滤条件写为valid_from_date <= '2024-05-20' AND valid_to_date > '2024-05-20'就能直接拿到对应版本 - 如果需要给版本打其他自定义标签,同样使用
set_model_version_tag接口即可,单版本的标签数量没有硬性限制
内容的提问来源于stack exchange,提问作者jswtraveler
相关产品推荐
相关产品推荐

