Azure ML Pipeline:如何在计算节点上构建指定输入目录结构
解决Azure ML Pipeline中构建指定数据目录结构的问题
要让你的Python脚本在Azure ML计算节点上找到预期的data/目录结构,核心思路是将每个挂载的URI_FOLDER数据资产,映射到计算节点上data/下对应的子目录中,以下是两种可行方案:
方案一:通过Bash命令在执行脚本前构建目录结构
这种方案无需修改原有Python脚本,直接在Pipeline的command步骤中先创建目标目录结构,再将挂载的项目文件复制/链接到对应位置:
prep = command( name="preprocessing", code="./src/preprocessing.py", inputs=dict( project_A=Input(type=AssetTypes.URI_FOLDER, mode=InputOutputModes.RO_MOUNT), project_B=Input(type=AssetTypes.URI_FOLDER, mode=InputOutputModes.RO_MOUNT), # 添加其他project输入 ), command=""" # 创建data目录及各项目子目录 mkdir -p data/project_A data/project_B && \ # 将挂载的项目文件复制到对应子目录(大文件建议用ln -s软链接替代cp -r) cp -r ${{inputs.project_A}}/* data/project_A/ && \ cp -r ${{inputs.project_B}}/* data/project_B/ && \ # 执行脚本并传入base_dir参数 python preprocessing.py ./data """, )
关键说明:
${{inputs.project_A}}是Azure ML SDK v2的模板语法,会自动替换为该输入资产在计算节点上的实际挂载路径- 若处理大文件,用
ln -s ${{inputs.project_A}}/* data/project_A/替代复制命令,避免占用额外存储且效率更高
方案二:修改Python脚本适配挂载路径(适合允许改动脚本的场景)
如果可以调整原有脚本的逻辑,可直接将每个项目的挂载路径作为参数传入,让脚本直接遍历这些路径处理数据,无需依赖data/目录结构:
- 修改Pipeline组件定义:
prep = command( name="preprocessing", code="./src/preprocessing.py", inputs=dict( project_A=Input(type=AssetTypes.URI_FOLDER, mode=InputOutputModes.RO_MOUNT), project_B=Input(type=AssetTypes.URI_FOLDER, mode=InputOutputModes.RO_MOUNT), # 添加其他project输入 ), command="python preprocessing.py ${{inputs.project_A}} ${{inputs.project_B}}", )
- 调整
preprocessing.py的逻辑:
不再接收单个base_dir参数,而是接收多个项目路径,直接遍历每个路径下的data.csv和config.toml文件进行处理。
内容的提问来源于stack exchange,提问作者MauiMuc
相关产品推荐
相关产品推荐

