You need to enable JavaScript to run this app. Azure机器学习远程训练挂载数据集后读取npy文件报错咨询
优惠活动
大模型
产品
解决方案
定价
更多

Azure机器学习远程训练挂载数据集后读取npy文件报错咨询

错误根因

你的代码触发FileNotFoundError是三个具体问题叠加导致的,和远程计算节点的基础配置无关:

  • 挂载生命周期不匹配:dataset.mount()返回的挂载上下文仅在with语句块的作用域内保持挂载状态,退出代码块后挂载点会被自动卸载,你写在块外的np.load执行时,挂载的存储路径已经不存在了
  • 路径定位错误:就算把np.load挪到with块内部,你直接传入的'my-data.npy'是容器默认工作目录的相对路径,并没有指向挂载点的实际位置,天然无法匹配到文件
  • 冗余配置风险:在远程计算节点运行的训练脚本里硬编码订阅ID、资源组、工作区参数初始化Workspace,属于非必要写法,不仅冗余,还容易触发权限、配置加载失败的问题

可落地的修正方案

脚本内手动挂载的正确写法

如果需要在脚本内手动控制挂载流程,必须满足两个硬性要求:

  • 所有需要访问数据集文件的逻辑全部放在with挂载块内部,禁止在块外访问挂载目录
  • 读取文件时必须拼接挂载点的完整路径,不能直接使用裸文件名
    可直接适配你现有逻辑的代码片段:
import os
import numpy as np
from azureml.core import Dataset
from azureml.core.run import Run

# 远程节点上自动获取关联工作区,无需硬编码连接参数
run = Run.get_context()
workspace = run.experiment.workspace
dataset = Dataset.get_by_name(workspace, name='my-dataset')

with dataset.mount() as mount_context:
    # 先打印挂载目录内容,确认文件实际存储位置
    print("挂载点目录内容:", os.listdir(mount_context.mount_point))
    # 拼接完整文件路径后加载数据
    data_full_path = os.path.join(mount_context.mount_point, "my-data.npy")
    data = np.load(data_full_path)

生产环境推荐的平台原生绑定方式

提交训练作业时,直接通过平台配置将数据集绑定为计算节点的固定挂载路径,无需在训练脚本中编写任何挂载、工作区初始化逻辑,这种方式的稳定性远高于脚本内手动挂载:

  • 构造作业运行配置时,将目标数据集映射为计算节点上的固定路径(例如./training_data)
  • 训练脚本中直接通过映射后的固定路径读取文件,例如np.load("./training_data/my-data.npy")
  • 平台会自动完成数据集的权限校验、挂载生命周期管理,不需要手动处理挂载逻辑

常见踩坑提醒

  • 禁止在with挂载块的作用域之外访问挂载目录下的文件,块退出后挂载会被自动卸载
  • 读取文件时必须确认路径指向挂载目录,不要混淆容器默认工作目录和挂载目录的位置
  • 远程运行的训练脚本不要硬编码工作区连接参数,通过Run.get_context()即可自动获取关联的工作区、实验、运行上下文信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 22:45:04