将 AzureML 作业输出路径设置为工作目录

问题描述 投票:0回答:1

我正在 AzureML 中训练计算机视觉模型,并尝试设置输出目录以匹配我的日志/工件的位置,即我的执行工作目录“exe/wd”。我在本地编码/原型并通过 mlclient 上传作业。训练脚本、环境、计算等有效。 使用以下方式写入文件:

with open(filepath, 'wb') as f:
        f.write(obj)

存储将文件写入错误的位置。

为了方便起见,我想在这里存储/查看/访问我的检查点:

Outputs+Logs

职位定义:

from azure.ai.ml import Output



job = command(
    inputs={
        'data':Input(
                type="uri_folder",
                path=f"{data_asset.id}",
                mode=InputOutputModes.RO_MOUNT
        )},
    outputs={
        'outputs':Output(
            type='uri_folder',
            path = './outputs',
            mode  =InputOutputModes.RW_MOUNT
        )}
    ,
    code="<path>",
    command=az_cfg.COMMAND_TRAIN,
    environment=f"{az_cfg.ENV_NAME}{az_cfg.ENV_VERSION}",
    display_name=az_cfg.DISPLAY_NAME,
    compute = ci_name,
    evironment_variables={ 
      "DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": True
      },
    experiment_name=az_cfg.EXPERIMENT_NAME
      
)


我期望发生的是在工作室的“输出+日志”选项卡中看到我的输出文件夹。

经过一些研究,我发现执行期间生成的输出将存储在默认的工作区blobstorage中。如何将输出更改为工作区工作目录中?

使用 mlflow 保存模型时,日志和保存将落在正确的位置。但是,我不能在这里使用 mlflow。 我不确定这是否是预期的行为,只是不可能,还是我错过了一些东西? 非常感谢任何帮助。

azure azure-machine-learning-service
1个回答
0
投票

根据此文档,仅在

Inputs
中支持像./home/username/data/my_data这样的本地路径,而不是Outputs

因此,正如您所说,您需要在默认

workspaceblobstorage
或自定义 Blob 存储中记录模型和详细信息,并将它们下载到当前工作区目录。

以下是命令作业代码。

job = command(
    code="./src",  # local path where the code is stored
    command="python main.py --diabetes-csv ${{inputs.diabetes}}  --model_out ${{outputs.output}}",
    inputs={
        "diabetes": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/diabetes.csv",
        )
    },
    outputs={
        'output': Output(
            type=AssetTypes.CUSTOM_MODEL,
            path = 'azureml://subscriptions/<subscriptions_id>/resourcegroups/<resourcegroup>/workspaces/jgsml/datastores/workspaceblobstore/paths/ML_output/',
            mode  = InputOutputModes.RW_MOUNT
        )}
    ,
    environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
    display_name="sklearn-diabetes-example",
)

将模型保存在

main.py
中的代码片段:

import joblib
from pathlib import Path
model = train_model(params, X_train, X_test, y_train, y_test)
joblib.dump(model, (Path(args.model_out) / "model_1.pkl"))

作业成功完成后,使用以下代码将其下载到当前目录。

returned_job = ml_client.create_or_update(job)
ml_client.jobs.download(returned_job.name, download_path="./job_output", all=True)

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.