AzureML Pipeline组件间如何共享代码?
解决AzureML v2 Pipeline组件共享辅助函数的问题
目录结构规范
先梳理清晰项目结构,确保共享模块能被正确识别:
my_pipeline_project/ ├── shared_utils/ # 单独存放共享辅助函数的目录 │ ├── __init__.py # 必须添加,让目录成为可导入的Python模块 │ └── helper_functions.py # 你的辅助函数实现 ├── component_a/ │ ├── component.yaml │ └── component_script.py ├── component_b/ │ ├── component.yaml │ └── component_script.py
__init__.py可以是空文件,也可以直接导出常用函数,比如在文件内写from .helper_functions import my_shared_func,后续组件可直接简化导入逻辑。
组件YAML的正确配置
每个组件的YAML中,code字段仅指定共享目录和当前组件脚本目录,使用相对路径数组(注意路径是相对于YAML文件所在位置),避免解析错误:
以component_a的yaml为例:
$schema: https://azuremlschemas.azureedge.net/latest/commandComponent.schema.json name: component_a display_name: Component A version: 1 type: command inputs: input_data: type: uri_file outputs: output_data: type: uri_file code: - ../shared_utils/ # 指向共享目录的相对路径 - ./ # 当前组件的脚本目录 environment: azureml:your_environment_name:1 command: >- python component_script.py --input_data ${{inputs.input_data}} --output_data ${{outputs.output_data}}
之前用列表报错,大概率是路径写法错误(比如用了绝对路径、路径相对于项目根而非YAML所在目录,或者目录不存在),按上述相对路径写法即可避免。
组件脚本的导入方式
在组件脚本中直接导入共享模块:
from shared_utils.helper_functions import my_shared_func # 正常使用共享函数 processed_data = my_shared_func(input_data)
问题根源说明
- YAML配置code列表报错:核心是路径格式错误,AzureML v2要求
code的路径必须是相对于当前YAML文件的相对路径,绝对路径或错误的相对路径会触发解析失败。 - 父目录作为code导致运行缓慢:父目录包含大量无关文件,AzureML会打包整个目录上传到计算目标,文件体积过大直接拖慢启动速度,仅指定必要目录可大幅减少上传体量。
额外优化方案
- 如果共享模块依赖第三方包,确保组件使用的AzureML环境已预装这些依赖。
- 若共享模块逻辑复杂,可将其打包成wheel包上传到工作区的包仓库,组件通过
pip install直接安装该包,这种方式更适合长期维护的共享模块。
内容的提问来源于stack exchange,提问作者user1114
相关产品推荐
相关产品推荐

