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

无法通过Python脚本创建并运行Azure ML Text NER任务求助

问题描述

我尝试通过Python脚本在Azure ML服务上触发Text NER任务,已将训练和验证文件夹从本地路径上传至数据存储,代码如下:

import os

from azure.identity import DefaultAzureCredential
from azure.ai.ml import automl, Input, MLClient
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.entities import ResourceConfiguration

os.environ["AZURE_CLIENT_ID"] = <my_client_id>
os.environ["AZURE_TENANT_ID"] = <my_tenant_id>
os.environ["AZURE_CLIENT_SECRET"] = <my_client_secret_id>

subscription_id = <my_subscription_id>
resource_group = <my_resource_group_id>
workspace = <my_workspace_id>

ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)

training_mltable_path = "./training-mltable-folder/"
validation_mltable_path = "./validation-mltable-folder/"

my_training_data_input = Input(type=AssetTypes.MLTABLE, path=training_mltable_path)
my_validation_data_input = Input(type=AssetTypes.MLTABLE, path=validation_mltable_path)

text_ner_job = automl.text_ner(
    name="dpv2-nlp-text-ner-job-01",
    experiment_name="dpv2-nlp-text-ner-experiment",
    training_data=my_training_data_input,
    validation_data=my_validation_data_input
)

text_ner_job.set_limits(timeout_minutes=60)
text_ner_job.resources = ResourceConfiguration(instance_type="Standard_NC6s_v3")

returned_job = ml_client.jobs.create_or_update(
    text_ner_job
)

print(f"Created job: {returned_job}")

ml_client.jobs.stream(returned_job.name)

运行代码时返回以下错误:

Traceback (most recent call last):
  ...
    raise JobException(
azure.ai.ml.exceptions.JobException: Exception : 
 {
    "error": {
        "code": "UserError",
        "message": "Failed to validate user configuration and data.\n 1. The data file does not exists. Ensure data correctness and availability.",
        "message_parameters": {},
        "target": "ValidationService",
        "details": [
            {
                "code": "UserError",
                "severity": 2,
                "message": "The data file does not exists. Ensure data correctness and availability.",
                "message_format": "The data file does not exists. Ensure data correctness and availability.",
                "message_parameters": {
                    "0": "System.Collections.Generic.Dictionary`2[System.String,System.String]"
                },
                "target": "training_data",
                "details": [
                    {
                        "message": "null",
                        "message_parameters": {},
                        "details": []
                    }
                ],
                "inner_error": {
                    "code": "BadArgument",
                    "inner_error": {
                        "code": "ArgumentInvalid",
                        "inner_error": {
                            "code": "DatasetInvalidPath"
                        }
                    }
                }
            }
        ]
    },
    "time": "0001-01-01T00:00:00.000Z"
}

我确信上传的数据格式符合该任务要求,推测可能是可用性问题,请问该如何解决此问题?

解决方案

核心问题是代码中使用了本地相对路径,但Azure ML远程运行时无法直接访问本地文件系统,即使数据已上传到云端数据存储,也需要使用云端数据路径或已注册的MLTable资产引用来指定数据位置。具体修复步骤如下:

1. 将上传的文件夹注册为MLTable资产

仅上传文件夹到数据存储不够,需要将其注册为Azure ML的MLTable资产,让服务能识别数据结构。执行以下代码完成注册:

from azure.ai.ml.entities import Data

# 注册训练数据
training_data_asset = ml_client.data.create_or_update(
    Data(
        name="training-mltable",
        path="azureml://datastores/<你的数据存储名称>/paths/<上传的训练文件夹路径>",
        type=AssetTypes.MLTABLE,
    )
)

# 注册验证数据
validation_data_asset = ml_client.data.create_or_update(
    Data(
        name="validation-mltable",
        path="azureml://datastores/<你的数据存储名称>/paths/<上传的验证文件夹路径>",
        type=AssetTypes.MLTABLE,
    )
)

2. 修改代码中的数据输入路径

注册完成后,用资产的名称+版本号或云端URI替换本地路径:

# 方式1:使用已注册的资产名称(推荐,便于版本管理)
my_training_data_input = Input(type=AssetTypes.MLTABLE, path="azureml:training-mltable:1")  # 1为资产版本号,可根据实际调整
my_validation_data_input = Input(type=AssetTypes.MLTABLE, path="azureml:validation-mltable:1")

# 方式2:直接使用数据存储的URI
# my_training_data_input = Input(type=AssetTypes.MLTABLE, path="azureml://datastores/<你的数据存储名称>/paths/<训练文件夹路径>")
# my_validation_data_input = Input(type=AssetTypes.MLTABLE, path="azureml://datastores/<你的数据存储名称>/paths/<验证文件夹路径>")

3. 验证权限与路径正确性

  • 在Azure ML工作室的「数据」页面找到已注册的MLTable资产,复制其URI或名称版本信息,确保代码引用一致。
  • 检查服务主体权限:确认AZURE_CLIENT_ID对应的身份拥有目标数据存储的读取权限,否则会导致数据无法访问。
  • 确认MLTable文件夹中包含MLTable配置文件,该文件定义了数据的读取规则,缺失会导致Azure ML无法识别数据格式。

内容的提问来源于stack exchange,提问作者Marco Gambelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:45:15