我正在尝试将整个 Kedro 管道作为 Azure ML 实验运行。我在这里有两个选择。第一个是使用 Azure ML 的内置日志记录功能,第二个是使用将 Azure ML 与 Mlflow 集成的 azumeml-mlflow 包。
我只尝试了第二种方法,因为我不知道如何在 Kedro 挂钩中实现 Azure ML 的 Run() 方法。
因此,对于第二种方法,我认为一切都应该与仅使用 Mlflow 时相同。然而,即使它在 Kedro 结构之外运行良好,我也无法让它工作 ==> 我可以从其他脚本启动实验。
我从 Kedro 得到的是管道运行良好,但在 Azure ML 上没有任何反应。
这是代码(钩子在 ModelTrackingHooks 类中):
@hook_impl
def before_pipeline_run(self, run_params: Dict[str, Any]) -> None:
"""Hook implementation to start an MLflow run
with the same run_id as the Kedro pipeline run.
"""
# Get Azure workspace
ws = Workspace.get(name="...",
subscription_id="...",
resource_group="...")
# Set tracking uri
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
# Create an Azure ML experiment in the workspace
experiment = Experiment(workspace=ws, name='kedro-mlflow-experiment')
mlflow.set_experiment(experiment.name)
#Start logging
mlflow.start_run(run_name=run_params["run_id"])
mlflow.log_params(run_params)
@hook_impl
def after_node_run(
self, node: Node, outputs: Dict[str, Any], inputs: Dict[str, Any]
) -> None:
"""Hook implementation to add model tracking after some node runs.
In this example, we will:
* Log the parameters after the data splitting node runs.
* Log the model after the model training node runs.
* Log the model's metrics after the model evaluating node runs.
"""
if node._func_name == "cross_val":
mlflow.log_params(
{"best_estimator": outputs["best_estimator"],
"best_params": outputs["best_params"]}
)
model = outputs["validated_model"]
mlflow.sklearn.log_model(model, "model")
elif node._func_name == "fit_and_save_transformer":
transformer = outputs["custom_transformer"]
mlflow.sklearn.log_model(transformer, "customer_transformer")
elif node._func_name == "classification_reporting":
mlflow.log_metrics(outputs["metrics"])
@hook_impl
def after_pipeline_run(self) -> None:
"""Hook implementation to end the MLflow run
after the Kedro pipeline finishes.
"""
mlflow.end_run()
我做错了吗?
您对如何通过仅利用 Azure ML 的内置功能(即不通过 Mlflow)来使用 Kedro 和 Azure ML 有任何想法或示例吗?
先感谢您。