You need to enable JavaScript to run this app. Azure ML管道PythonScriptStep访问HTTP URI源FileDataset异常咨询
优惠活动
大模型
产品
解决方案
定价
更多

Azure ML管道PythonScriptStep访问HTTP URI源FileDataset异常咨询

HTTP源FileDataset挂载异常的根因与解决方法

问题根因

这个问题是Azure ML SDK 1.2x分支下纯HTTP/HTTPS来源FileDataset的已知bug:

  • SDK处理纯Web URI输入时,会把URI的协议头https:做URL编码,生成名叫https%3A的顶层虚拟目录
  • 两个目标文件会被完整塞到这个嵌套目录下,不会按照预期把原文件平铺到挂载点根路径
  • Notebook端用1.24版本SDK创建数据集、计算节点跑1.25版本SDK的跨版本组合,会触发这个bug的错误分支,不管换as_mount/as_download/as_upload哪种传入模式都绕不开
  • 你在Notebook里查询到的数据集注册结构完全正常,这个bug是在计算节点的挂载执行阶段触发的,注册阶段的元数据存储不会出现异常

注:该bug仅影响纯HTTP/HTTPS URI创建的FileDataset,Blob、ADLS等原生存储源的数据集逻辑完全不受影响

可行解决方式

  • 版本对齐修复:把Notebook端和计算节点环境的AML SDK版本统一升级到1.31.0及以上,该版本已经修复了HTTP源数据集的路径编码逻辑,挂载时会直接把拉取的文件以原文件名平铺到目标路径
  • 临时适配不升级:如果暂时没法调整SDK版本,在脚本里手动跳过那个编码目录,递归取实际文件就行,示例代码:
    import os
    from azureml.core import Run
    
    run = Run.get_context()
    # 获取挂载后的数据集根路径
    data_root = run.input_datasets['Files_mount']
    # 定位生成的编码后嵌套目录
    encoded_dir = [d for d in os.listdir(data_root) if d.startswith('https%3A')][0]
    nested_path = os.path.join(data_root, encoded_dir)
    # 递归遍历拿到所有实际文件的完整路径
    actual_file_list = []
    for root, _, files in os.walk(nested_path):
        for f in files:
            actual_file_list.append(os.path.join(root, f))
    
  • 替代实现方案:如果不需要用到FileDataset的版本管控能力,可以绕开Dataset加载逻辑,直接在PythonScriptStep的脚本里用HTTP请求库把目标文件下载到临时工作目录,完全避开SDK的挂载bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 11:15:08