我正在 AzureML 中训练计算机视觉模型,并尝试设置输出目录以匹配我的日志/工件的位置,即我的执行工作目录“exe/wd”。我在本地编码/原型并通过 mlclient 上传作业。训练脚本、环境、计算等有效。 使用以下方式写入文件:
with open(filepath, 'wb') as f:
f.write(obj)
存储将文件写入错误的位置。
为了方便起见,我想在这里存储/查看/访问我的检查点:
职位定义:
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。 我不确定这是否是预期的行为,只是不可能,还是我错过了一些东西? 非常感谢任何帮助。
根据此文档,仅在
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)
输出: