如何将作为输入的MLflow模型关联至运行且无需重新记录完整模型
解决MLflow评估运行关联输入模型的问题
核心思路
无需重新记录完整模型,通过关联现有模型的元数据到评估运行,让UI的「已记录模型」标签识别到输入模型的关联关系。
具体实现方案
方案1:记录模型元数据文件(推荐)
直接获取训练运行中模型的核心元数据文件,将其记录到评估运行的artifact目录,UI会自动识别为已关联模型:
from mlflow.tracking import MlflowClient client = MlflowClient() # 训练运行的ID和模型存储路径 train_run_id = "你的训练运行ID" model_artifact_path = "模型在训练运行中的artifact路径(如'model')" # 下载模型的核心元文件到临时目录 client.download_artifacts(train_run_id, f"{model_artifact_path}/MLmodel", "./temp_model") client.download_artifacts(train_run_id, f"{model_artifact_path}/conda.yaml", "./temp_model") # 在评估运行中记录这些元文件 mlflow.log_artifact("./temp_model/MLmodel", artifact_path="input_model") mlflow.log_artifact("./temp_model/conda.yaml", artifact_path="input_model")
完成后,评估运行的「已记录模型」标签会显示input_model,点击可关联到原训练模型的完整内容。
方案2:关联已注册的模型版本
如果模型已注册到MLflow模型仓库,可直接在评估运行中记录版本关联信息:
from mlflow.tracking import MlflowClient client = MlflowClient() registered_model_name = "你的模型名称" train_run_id = "你的训练运行ID" model_uri = f"runs:/{train_run_id}/model" # 注册模型(若未注册) client.create_model_version(name=registered_model_name, source=model_uri, run_id=train_run_id) # 在评估运行中记录关联参数 mlflow.log_param("input_model_name", registered_model_name) mlflow.log_param("input_model_version", "1") # 替换为实际版本号 # 同时记录模型元文件确保UI识别 client.download_artifacts(train_run_id, "model/MLmodel", "./temp") mlflow.log_artifact("./temp/MLmodel", artifact_path="input_model")
方案3:通过运行标签标记关联
给评估运行添加自定义标签,明确标记输入模型的来源,配合元文件记录实现UI关联:
client = MlflowClient() eval_run_id = "你的评估运行ID" train_run_id = "你的训练运行ID" # 添加标签标记输入模型信息 client.set_tag(eval_run_id, "input_model_run_id", train_run_id) client.set_tag(eval_run_id, "input_model_path", "model") # 记录模型元文件 client.download_artifacts(train_run_id, "model/MLmodel", "./temp") client.log_artifact(eval_run_id, "./temp/MLmodel", "input_model")
关于mlflow.set_active_model()失效的原因
mlflow.set_active_model()是高层上下文API,仅作用于当前MLflow上下文环境;而MlflowClient是底层直接调用接口,不共享高层上下文状态,因此无法通过该方法实现Client层面的模型关联。
内容的提问来源于stack exchange,提问作者Anita Lalayan_
相关产品推荐
相关产品推荐

