0

我正在尝试将整个 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 有任何想法或示例吗?

先感谢您。

4

0 回答 0