在 azure ML 管道运行中序列化对象

Serialise objects in azure ML pipeline runs

我有 Python 包用于预处理训练数据和 scoring/inference 目的。我将其用作管道中的 python 步骤。入口脚本(在包中)接受参数,即任务参数 choices=(train,score) 并进行预处理。这是步骤代码:

# Pipeline parameter: task, config_path
param_task = PipelineParameter(name='task', default_value='train')
param_config_path = PipelineParameter(name="config_path", default_value='Preprocess/preprocess_config.json')


# Define pipeline steps
StepPreprocessing = PythonScriptStep(
    name="Preprocessing",
    script_name=e.preprocess_script_path,
    arguments=[
        "--config_path", param_config_path, 
        "--task", param_task,
    ], 
    inputs=None,
    compute_target=aml_compute,
    runconfig=run_config,
    source_directory=e.sources_directory,
    allow_reuse=False
)

参数 task=='train' 它加载数据并根据配置文件中提到的步骤进行预处理。在此过程中,它创建 StandardScaler、SimpleImpute 对象(sklearn 对象)并将 sklearn 对象存储在包内的 data/output 文件夹中,并将处理后的数据存储在 azure 存储中。

问题是,当管道再次 运行 与 task =='score' 时,它无法找到错误的 sklearn 对象。

User program failed with FileNotFoundError: [Errno 2] No such file or directory: 'data/output/StandardScaler.joblib'

什么是保存 sklearn 对象的最佳方法,以便当管道再次进入 运行 但带有参数 task=='score'.

时管道可以访问这些对象

我不想在模型注册表中注册这些对象,也不想将它们保存在数据存储中。

方法是:

  1. 在模型注册表中注册工件并在评分中获取它们。

  2. 将管道步骤的输出配置为 PipelineData 或 OutputFileDatasetConfig,将工件写入配置的输出。在评分时,获取训练管道的 运行,获取其输出,检索工件。这涉及实验名称以获取管道的 运行。