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

Azure ML管道输出文件output.csv缺失及FileNotFoundError问题求助

解决Azure ML管道中输出文件找不到的问题

你遇到的核心问题是管道运行环境与Notebook本地环境的路径逻辑不一致,下面是针对性的排查方向和解决方案:

1. 硬编码绝对路径不兼容管道运行环境

在Compute Instance的Notebook里手动运行时,/mnt/azmnt/code/Users/aniello.spiezia/outputs/是有效路径,但管道如果运行在Compute Cluster上,每个节点的文件系统是临时隔离的,不会有这个固定用户目录结构;即使使用Compute Instance作为管道计算目标,运行上下文的工作目录也和你手动跑Notebook时不同。

解决方案:用Azure ML运行上下文获取规范输出路径

修改test.ipynb的保存逻辑,通过运行上下文获取官方推荐的输出目录,确保在任何计算目标上都有效:

import os
from azureml.core import Run

# 获取当前管道运行的上下文
run = Run.get_context()
# 获取管道预设的输出目录(自动适配计算环境)
output_dir = run.output_locations["outputs"]
# 确保目录存在,避免创建失败报错
os.makedirs(output_dir, exist_ok=True)
# 拼接最终输出文件路径
output_file_path = os.path.join(output_dir, "output.csv")

# 执行你的数据加载、合并逻辑...
# 保存结果到规范路径
df.to_csv(output_file_path, index=False)

# 上传到默认Datastore(可选,管道输出会自动关联到Datastore)
datastore = run.experiment.workspace.get_default_datastore()
run.upload_file(name="outputs/output.csv", path_or_stream=output_file_path)

2. 管道步骤未显式配置输出依赖

如果你用PythonScriptStep调用脚本(管道更推荐用.py脚本而非.ipynb,若必须用Notebook请用NotebookRunStep),需要显式定义输出对象,让Azure ML管道跟踪并管理这个输出文件。

解决方案:配置PipelineData关联输出

修改pipeline.ipynb的管道定义,添加输出配置:

from azureml.core import Workspace, Experiment
from azureml.pipeline.core import Pipeline, PipelineData
from azureml.pipeline.steps import NotebookRunStep
from azureml.widgets import RunDetails

ws = Workspace.from_config()
compute_target = ws.compute_targets["你的计算目标名称"]
datastore = ws.get_default_datastore()

# 定义管道输出,绑定到默认Datastore
output_data = PipelineData(
    name="output_csv",
    datastore=datastore,
    output_path_on_compute="outputs/output.csv"
)

# 定义Notebook运行步骤,传递输出路径作为参数
notebook_step = NotebookRunStep(
    name="run-test-notebook",
    notebook_path="./test.ipynb",
    arguments=["--output_path", output_data],
    outputs=[output_data],
    compute_target=compute_target,
    allow_reuse=False
)

# 创建并提交管道
pipeline = Pipeline(workspace=ws, steps=[notebook_step])
experiment = Experiment(ws, "test-pipeline-experiment")
run = experiment.submit(pipeline)
RunDetails(run).show()

然后在test.ipynb中用argparse解析这个参数,获取输出路径,彻底避免硬编码。

3. 未提前创建输出目录(临时应急方案)

如果暂时坚持使用绝对路径(不推荐),一定要在保存文件前创建目标目录:

import os
output_dir = "/mnt/azmnt/code/Users/aniello.spiezia/outputs"
# 递归创建目录,已存在则不报错
os.makedirs(output_dir, exist_ok=True)
# 保存文件
df.to_csv(os.path.join(output_dir, "output.csv"), index=False)

4. 计算目标路径权限问题

如果管道用Compute Cluster作为计算目标,它没有权限访问Compute Instance的/mnt/azmnt/code本地存储(这是Compute Instance独有的路径)。这种情况下必须放弃绝对路径,改用Azure ML Datastore或计算集群的临时存储路径。

快速验证方法

管道运行完成后,进入运行详情页的Logs标签,查看是否有目录创建失败、权限拒绝类的报错,这能帮你快速定位问题根源。


内容的提问来源于stack exchange,提问作者Aniello Spiezia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:39:07