You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从成功的Azure ML管道作业下载JSON文件的技术求助

问题诊断与解决方法

你的问题核心在于作业输出的定义逻辑混乱,以及下载时的参数匹配错误,具体问题点和修正方案如下:


问题根源

  1. 输出方式冲突:你同时用了两种输出逻辑,但存储位置完全不同:

    • 写入AZUREML_OUTPUT_DIRECTORY(即outputs目录)的文件,本应作为作业的正式Data Output同步到blob存储
    • 调用run.upload_file()上传的文件,是绑定到Run实例的附属文件,不属于Data Outputs,只会出现在作业的「Files」标签下
  2. 下载参数错误:

    • 用ml_client.jobs.download()时,output_name需要填的是管道组件中定义的输出参数名,不是文件名portfolio_weights.json
    • 用旧SDK的run.download_file()时,要明确你下载的是upload_file()上传的附属文件,还是outputs目录里的正式输出
  3. Blob存储无内容:你写入了outputs目录,但可能因为未正确配置作业输出绑定,导致该目录未被同步到blob存储;或者写入路径有误,文件没生成到正确位置


修正步骤

1. 调整作业输出代码(二选一)

方式一:用正式作业输出(推荐,对应Data Outputs)

如果是构建管道组件,用OutputFileDatasetConfig声明输出,直接写入指定路径即可,无需手动上传:

from azure.ai.ml import Output
from azure.ai.ml.components import command_component

@command_component()
def compute_portfolio_weights(
    # 你的输入参数...
    weights_output: Output(type="uri_file")  # 声明输出文件
):
    import json
    import numpy as np

    # 模拟计算portfolio_weights
    portfolio_weights = np.array([0.2, 0.3, 0.5])

    # 直接写入Output指定的路径,无需处理环境变量
    with open(weights_output, 'w') as f:
        json.dump(portfolio_weights.tolist(), f)

如果用旧SDK的Run类,只需写入outputs目录,删掉run.upload_file()避免混淆:

output_dir = "outputs"  # Azure ML会自动同步这个目录到存储
output_file_path = os.path.join(output_dir, 'portfolio_weights.json')

portfolio_weights_list = portfolio_weights.tolist()
with open(output_file_path, 'w') as f:
    json.dump(portfolio_weights_list, f)

run.log("portfolio_weights_path", output_file_path)
# 移除run.upload_file这一行

方式二:坚持用run.upload_file()上传

保留run.upload_file()的话,下载时要针对Run的附属文件操作:

run = Run.get(ws, job_name)
run.download_file(
    name="portfolio_weights.json", 
    output_file_path=os.path.join(output_dir, "portfolio_weights.json")
)

2. 正确下载正式Data Output

用新ML Client下载时,指定组件中定义的输出参数名(不是文件名):

# 假设你的作业输出参数名为"weights_output"
ml_client.jobs.download(
    name=job.name,
    download_path='./downloads',
    output_name="weights_output"  # 这里填输出参数名,不是文件名
)

3. 验证输出正确性

  • 作业运行后,查看「Data Outputs」标签,复制blob存储路径
  • 登录Azure存储账户,导航到该路径,确认文件存在且有内容

内容的提问来源于stack exchange,提问作者Cam Howe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:53:11