在Databricks中使用MLflow出现空实验运行,无法获取模型
问题分析
你的代码仅完成了模型训练,但未通过MLflow将模型、训练参数、数据集等信息**记录到实验运行(Run)**中,因此在Databricks的MLflow界面看不到对应的模型和数据集条目。
解决步骤
1. 记录训练超参数
在MLflow Run中记录关键超参数,便于后续实验复现和对比:
mlflow.log_param("max_iter", iter_max) mlflow.log_param("C", CC)
2. 保存训练好的模型
使用mlflow.sklearn.log_model()将Pipeline模型存入MLflow,这是生成模型条目并支持后续注册的核心操作:
mlflow.sklearn.log_model( sk_model=text_clf, artifact_path="text-classification-model", registered_model_name="Text-Classifier" # 可选:直接注册到模型仓库,无需手动注册可保留 )
若想后续手动注册,移除registered_model_name参数即可,先将模型保存到Run的artifact中。
3. 可选:追踪数据集信息
如果需要记录数据集相关信息,可添加指标记录或上传数据集文件(大文件建议记录路径/版本而非直接上传):
# 记录数据集基础指标 mlflow.log_metric("train_samples", len(X_train)) mlflow.log_metric("train_feature_num", X_train.shape[1] if hasattr(X_train, 'shape') else "Unknown") # 上传数据集文件(示例,根据实际存储路径调整) # mlflow.log_artifact("train_data.parquet", artifact_path="datasets")
4. 完整修改代码
iter_max = 100 CC = 1 save_model = True # 启用模型保存 with mlflow.start_run(run_name=run_name, experiment_id=experiment.experiment_id, nested=True) as run: # 记录超参数 mlflow.log_param("max_iter", iter_max) mlflow.log_param("C", CC) # 训练模型 text_clf = Pipeline([ ('vect', CountVectorizer()), ('tfidf', TfidfTransformer()), ('clf', LogisticRegression(max_iter=iter_max, C=CC)) ]) text_clf.fit(X_train, y_train) # 保存并注册模型 mlflow.sklearn.log_model( sk_model=text_clf, artifact_path="text-classification-model", registered_model_name="Text-Classifier" ) # 记录数据集指标 mlflow.log_metric("train_samples_count", len(X_train)) run_id = mlflow.active_run().info.run_id
5. Databricks中模型的注册与使用
- 若代码中使用了
registered_model_name,运行后模型会直接出现在Databricks的模型仓库(Model Registry),可手动将其切换到Staging或Production环境。 - 若未使用该参数,进入MLflow实验的Run详情页,找到
Models板块下的模型,点击Register Model完成注册。 - 加载已注册模型进行预测:
# 加载生产环境的模型 model = mlflow.sklearn.load_model("models:/Text-Classifier/Production") # 执行预测 predictions = model.predict(X_test)
内容的提问来源于stack exchange,提问作者Daniel Castro Hernandez
相关产品推荐
相关产品推荐

