如何将AzureML作业输出路径设置为工作目录?
解决方案
核心原理
AzureML 的执行工作目录 exe/wd 是计算实例的临时本地目录,作业结束后会被自动清理,无法持久化存储文件。要让输出出现在 Studio 的「Outputs+Logs」标签,必须将文件写入 AzureML 挂载的持久化输出目录(关联到工作区存储),而非本地临时路径。
步骤1:修正作业的 Output 配置
移除 Output 中的 path 参数,让 AzureML 自动管理输出存储位置;同时修正拼写错误并规范环境变量格式:
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', mode=InputOutputModes.RW_MOUNT # 移除path参数,由AzureML自动分配存储 )}, 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, environment_variables={ "DATASET_MOUNT_BLOCK_BASED_CACHE_ENABLED": "True" # 环境变量值需为字符串类型 }, experiment_name=az_cfg.EXPERIMENT_NAME )
步骤2:训练脚本中写入正确路径
通过 AzureML 自动注入的环境变量获取挂载的输出目录,将文件写入该目录:
import os # 获取AzureML挂载的持久化输出目录 output_dir = os.environ.get("AZUREML_OUTPUT_outputs") if not output_dir: raise ValueError("未找到输出目录环境变量,请检查作业的output配置") # 构造目标文件路径 filepath = os.path.join(output_dir, "checkpoint.pth") # 替换为你的文件名 with open(filepath, 'wb') as f: f.write(obj)
关键说明
- 配置
RW_MOUNT模式后,AzureML 会将工作区 blob 存储的目录挂载到计算实例,写入该目录的文件会自动同步到云存储,作业结束后可在「Outputs+Logs」标签查看。 - 若必须指定
path,需使用工作区存储的绝对 URI(如azureml://datastores/workspaceblobstorage/paths/outputs/your-job),但自动分配路径更便捷且不易出错。
内容的提问来源于stack exchange,提问作者Niki
相关产品推荐
相关产品推荐

