我正在尝试通过 python sdk v2 调用 azure ml 批处理终点
job = ml_client.batch_endpoints.invoke(
endpoint_name="test-batch-v2",
input=my_test_data_input,
deployment_name="test-deploy1"
)
我遇到以下错误,有人可以解释如何解决这个问题吗?
我尝试通过调用 api 创建批量端点部署作业,但失败了
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\azure\ai\ml\_telemetry\activity.py:263, in monitor_with_activity..monitor..wrapper(*args, **kwargs)
260 @functools.wraps(f)
261 def wrapper(*args, **kwargs):
262 with log_activity(logger, activity_name or f.__name__, activity_type, custom_dimensions):
--> 263 return f(*args, **kwargs)
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\azure\ai\ml\operations\_batch_endpoint_operations.py:316, in BatchEndpointOperations.invoke(self, endpoint_name, deployment_name, inputs, **kwargs)
309 headers[EndpointInvokeFields.MODEL_DEPLOYMENT] = deployment_name
311 response = self._requests_pipeline.post(
312 endpoint.properties.scoring_uri,
313 json=BatchJobResource(properties=batch_job).serialize(),
314 headers=headers,
315 )
--> 316 validate_response(response)
317 batch_job = json.loads(response.text())
318 return BatchJobResource.deserialize(batch_job)
File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\azure\ai\ml\_utils\_endpoint_utils.py:120, in validate_response(response)
117 r_json = response.json()
118 except ValueError:
119 # exception is not in the json format
--> 120 raise Exception(response.content.decode("utf-8"))
121 failure_msg = r_json.get("error", {}).get("message", response)
122 error_map = {
123 401: ClientAuthenticationError,
124 404: ResourceNotFoundError,
125 409: ResourceExistsError,
126 }
Exception: BY_POLICY
我过去也犯过类似的错误。我无法创建任何类型的端点,因为它被 azure 管理员设置的策略阻止。只需询问具有管理员访问权限的人即可允许创建端点。
错误消息“BY_POLICY”表示批处理端点未配置为允许从您当前的身份进行调用。
批处理端点支持 Azure Active Directory 身份验证或 aad_token。这表示必须向批处理端点 URI 提供有效的 Azure Active Directory 身份验证令牌才能调用批处理端点。
确保使用有效凭据创建 ml_client 对象。 由于您使用的凭据应该具有访问端点的正确权限。
例如,如果您想使用已在 Azure Active Directory 中创建的服务主体执行批量端点。
from azure.ai.ml import MLClient
from azure.identity import EnvironmentCredential
os.environ["AZURE_TENANT_ID"] = "<TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<CLIENT_SECRET>"
subscription_id = "<subscription>"
resource_group = "<resource-group>"
workspace = "<workspace>"
ml_client = MLClient(EnvironmentCredential(), subscription_id, resource_group, workspace)
您可以参考此文档:批处理端点上的授权,其中提供了有关如何使用不同类型的凭据(用户凭据和托管身份)运行作业的更多详细信息
此外,请按照this文档中提供的示例验证您的批量端点创建。