无法通过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
相关产品推荐
相关产品推荐

