You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:29:58