Azure ML自定义命令组件:如何使用自定义镜像
关于Azure ML中
command_component使用自定义镜像的问题 问题背景
我见过的所有用command_component装饰器创建Azure ML自定义组件的示例,均使用微软容器注册表(MCR)的镜像,比如官方示例代码:
# Converts MNIST-formatted files at the passed-in input path to training data output path and test data output path import os from pathlib import Path from mldesigner import command_component, Input, Output @command_component( name="prep_data", version="1", display_name="Prep Data", description="Convert data to CSV file, and split to training and test data", environment=dict( conda_file=Path(__file__).parent / "conda.yaml", image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04", ), ) def prepare_data_component( input_data: Input(type="uri_folder"), training_data: Output(type="uri_folder"), test_data: Output(type="uri_folder"), ): convert( os.path.join(input_data, "train-images-idx3-ubyte"), os.path.join(input_data, "train-labels-idx1-ubyte"), os.path.join(training_data, "mnist_train.csv"), 60000, )
我需要使用一个已安装MS-SQL ODBC驱动的自定义镜像,但遇到两个问题:
- 指定CPU计算节点本地构建的镜像时,提示找不到注册表
- 使用推送到Azure容器注册表(ACR)的镜像时,不知如何给装饰器传递凭证导致拉取失败
想咨询:是否可以使用自定义镜像?具体操作方法是什么?
解决方案
可以使用自定义镜像,分两种场景处理:
一、使用ACR中的自定义镜像(推荐)
关联Azure ML工作区与ACR
确保你的Azure ML工作区和目标ACR建立关联——可以在创建工作区时直接绑定现有ACR,也可以后续通过Azure门户或CLI将ACR附加到工作区。关联后,Azure ML会自动用工作区身份访问ACR,无需手动传递凭证。填写正确的镜像地址
在environment的image参数中填写完整的ACR镜像路径,格式为{acr名称}.azurecr.io/{镜像名}:{标签},示例:environment=dict( conda_file=Path(__file__).parent / "conda.yaml", image="myacr.azurecr.io/mssql-odbc-image:v1", )配置ACR权限
给工作区的系统分配身份或用户分配身份添加ACR的AcrPull权限:在ACR的「访问控制(IAM)」中添加角色分配,将AcrPull角色授予工作区身份。
二、使用计算节点本地构建的镜像
计算节点本地构建的镜像仅存储在该节点本地,Azure ML管道无法跨节点访问,因此不能直接使用。正确做法是将本地镜像推送到ACR(或其他工作区有权限访问的容器注册表),再按照上述ACR的方式使用。
额外注意事项
- 如果自定义镜像已包含所有所需依赖,可以省略
conda_file参数,直接使用镜像即可。 - 确保镜像的基础系统与Azure ML计算节点兼容(如Ubuntu 20.04/22.04等常用版本),避免依赖冲突或系统不兼容问题。
内容的提问来源于stack exchange,提问作者aaron02
相关产品推荐
相关产品推荐

