在Azure ML中运行训练容器遇问题:ACR连接失败及计算对象选择困惑
问题解决:Azure ML访问ACR镜像失败及计算目标选择
一、解决ACR连接失败问题
1. 配置Azure ML工作区对ACR的权限
即使ACR启用了管理员选项,Azure ML工作区的托管标识仍需具备拉取ACR镜像的权限:
- 登录Azure门户,进入目标ACR的「IAM」页面
- 添加角色分配,角色选择「AcrPull」,成员选择Azure ML工作区的系统分配托管标识(名称与工作区一致)
- 保存配置,等待权限生效(通常需几分钟)
2. 修正代码中的镜像凭据配置
代码缺少ACR身份验证配置,需在Environment中补充登录信息:
from azureml.core import Workspace from azureml.core import Environment from azureml.core.compute import ComputeTarget from azureml.core.runconfig import DockerConfiguration from azureml.core import ScriptRunConfig from azureml.core import Experiment ws = Workspace.from_config(path="./config.json") # 配置自定义镜像及ACR凭据 env = Environment.from_docker_image(name="<env_name>", image="<registry_name>.azurecr.io/train_image:latest") # 添加ACR登录信息 env.docker.base_image_registry.address = "<registry_name>.azurecr.io" env.docker.base_image_registry.username = "<ACR管理员用户名>" env.docker.base_image_registry.password = "<ACR管理员密码>" env.python.user_managed_dependencies = True dc = DockerConfiguration(use_docker=True) cluster_name = "<cluster_name>" cluster = ComputeTarget(workspace=ws, name=cluster_name) # 若镜像已包含所有训练代码,无需指定source_directory scr = ScriptRunConfig( source_directory=None, # 镜像内已有train.py时可省略本地目录上传 script='go.py', # 若镜像内无go.py,仍需保留source_directory并确保文件存在 compute_target=cluster, environment=env, docker_runtime_config=dc ) experiment_name = "<experiment_name>" experiment = Experiment(workspace=ws, name=experiment_name) run = experiment.submit(scr) run.wait_for_completion(show_output=True)
3. 其他检查项
- 确认镜像标签一致:推送镜像时的标签(如
latest或v1)需与代码中镜像地址完全匹配 - 网络连通性检查:若ACR配置了VNet隔离,需确保计算集群/实例处于同一VNet,或ACR防火墙规则允许Azure ML工作区的出站IP访问
二、计算集群 vs 计算实例选择
- 计算集群:优先用于训练任务
- 支持自动缩放,空闲时自动停止节点,节省成本
- 适配批量、长期运行的训练作业,支持多节点分布式训练
- 计算实例:适合开发调试阶段
- 为交互式虚拟机,用于Jupyter Notebook调试、代码开发
- 持续运行(除非手动停止),成本较高,不适合正式训练任务
三、脚本代码修正
go.py存在拼写错误,需修正:
import subprocess subprocess.run("python train.py", check=True) # 添加check=True可捕获命令执行错误
内容的提问来源于stack exchange,提问作者99_zz
相关产品推荐
相关产品推荐

