启动Azure ML实验时遇订阅信息提取失败及Logger属性错误
解决Azure ML训练脚本中“Failed to extract subscription information, Exception=AttributeError; 'Logger' object has no attribute 'activity_info'”错误及数据集路径获取问题
问题根源
你代码的核心问题是混合使用了Azure ML SDK v1(azureml.core)和v2(azure.ai.ml)的API,两个版本的日志组件存在冲突,触发Logger对象属性缺失的错误;同时数据集传递方式不符合对应SDK规范,导致无法正确获取下载后的临时路径。
解决方案
方案1:统一使用Azure ML SDK v1(兼容现有代码结构)
步骤1:清理冲突导入
移除所有v2相关导入,仅保留v1依赖:
import azureml.core from azureml.core.workspace import Workspace from azureml.core import Environment from azureml.core import ScriptRunConfig, Experiment from azureml.core import Dataset
步骤2:修正数据集传递逻辑
确保数据集通过规范方式传递给训练脚本:
ws = Workspace.from_config() # Blob路径需可访问(如带SAS令牌的URL、关联到Workspace的Datastore路径) dataSet = Dataset.File.from_files(['https://<你的Blob文件路径>']) # 配置命名输入并指定下载模式 data_set_input = dataSet.as_named_input('data_path').as_download() myexp = Experiment(workspace=ws, name="Yolo-experiment") curated_env = Environment.get(workspace=ws, name="AzureML-ACPT-pytorch-1.11-py38-cuda11.3-gpu") # 直接传入命名输入引用至参数列表 config = ScriptRunConfig(source_directory=".", script="resnet18-trainer.py", compute_target="local", environment=curated_env, arguments=[data_set_input] ) run = myexp.submit(config=config) run.wait_for_completion(show_output=True)
步骤3:在训练脚本resnet18-trainer.py中获取临时路径
import sys from azureml.core.run import Run # 获取运行上下文 run = Run.get_context() # 通过命名输入获取下载后的路径 data_path = run.input_datasets['data_path'] # 也可直接读取命令行参数(SDK会自动替换为真实临时路径) # data_path = sys.argv[1] print(f"数据下载到临时路径:{data_path}")
方案2:迁移到Azure ML SDK v2(官方主推版本)
若愿意切换到最新v2 SDK,彻底避免版本冲突,代码如下:
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential from azure.ai.ml import command, Input from azure.ai.ml.constants import AssetTypes # 初始化MLClient ml_client = MLClient.from_config(credential=DefaultAzureCredential()) # 定义输入数据(v2会自动处理下载逻辑) data_input = Input(type=AssetTypes.URI_FOLDER, path="https://<你的Blob文件路径>") # 定义命令作业 job = command( code=".", command="python resnet18-trainer.py --data_path ${{inputs.data_path}}", inputs={ "data_path": data_input, }, environment="AzureML-ACPT-pytorch-1.11-py38-cuda11.3-gpu@latest", compute="local", experiment_name="Yolo-experiment" ) # 提交并监控作业 returned_job = ml_client.jobs.create_or_update(job) ml_client.jobs.stream(returned_job.name)
训练脚本resnet18-trainer.py中获取路径:
import argparse parser = argparse.ArgumentParser() parser.add_argument('--data_path', type=str, help='数据临时路径') args = parser.parse_args() print(f"数据下载到临时路径:{args.data_path}")
额外检查项
- Blob路径权限:私有Blob需使用带SAS令牌的URL,或将容器关联到Azure ML Workspace的Datastore后通过Datastore引用路径。
- 本地环境配置:确保本地存在
config.json文件,且文件中Workspace配置正确,运行脚本的环境有Workspace访问权限。 - 依赖版本:使用v1时确保
azureml-core版本与环境兼容;使用v2时仅需安装azure-ai-ml包,不要同时安装v1相关包。
内容的提问来源于stack exchange,提问作者Edward C
相关产品推荐
相关产品推荐

