[Python] Getting AttributeError: 'str' object has no attribute 'get' error while deploying a...

Discussão em 'Python' iniciado por Stack, Fevereiro 28, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to deploy a registered model using:

    latest_model_version = max(
    [int(m.version) for m in ml_client.models.list(name='income_prediction_model')]
    )
    latest_model_version
    1

    model = ml_client.models.get(name='income_prediction_model', version=str(latest_model_version))

    blue_deployment = ManagedOnlineDeployment(name='blue',
    endpoint_name=endpoint,
    model=model,
    instance_type='Standard_F4s_v2',
    instance_count=1)

    blue_deployment_results = ml_client.online_deployments.begin_create_or_update(blue_deployment).result()

    print(f'Deployment {blue_deployment_results.name} provisioning state: {blue_deployment_results.provisioning_state}')


    to which I am getting:

    `properties: {}
    tags:
    data: Income prediction based on demographics, education and income levels
    model_type: XGboost Classifier
    traffic: {}
    exists
    Ran into a deserialization error. Ignoring since this is failsafe deserialization
    Traceback (most recent call last):
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/serialization.py", line 1436, in _deserialize
    found_value = key_extractor(attr, attr_desc, data)
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/serialization.py", line 1180, in rest_key_extractor
    return working_data.get(key)
    AttributeError: 'str' object has no attribute 'get'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/serialization.py", line 1509, in failsafe_deserialize
    return self(target_obj, data, content_type=content_type)
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/serialization.py", line 1376, in __call__
    return self._deserialize(target_obj, data)
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/serialization.py", line 1454, in _deserialize
    raise_with_traceback(DeserializationError, msg, err)
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/exceptions.py", line 51, in raise_with_traceback
    raise error.with_traceback(exc_traceback)
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/serialization.py", line 1436, in _deserialize
    found_value = key_extractor(attr, attr_desc, data)
    File "/anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/msrest/serialization.py", line 1180, in rest_key_extractor
    return working_data.get(key)
    azure.core.exceptions.DeserializationError: ("Unable to deserialize to object: type, AttributeError: 'str' object has no attribute 'get'", AttributeError("'str' object has no attribute 'get'"))`
    ---------------------------------------------------------------------------
    HttpResponseError Traceback (most recent call last)
    Cell In[11], line 9
    1 model = ml_client.models.get(name='income_prediction_model', version=str(latest_model_version))
    3 blue_deployment = ManagedOnlineDeployment(name='blue',
    4 endpoint_name=endpoint,
    5 model=model,
    6 instance_type='Standard_F4s_v2',
    7 instance_count=1)
    ----> 9 blue_deployment_results = ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
    11 print(f'Deployment {blue_deployment_results.name} provisioning state: {blue_deployment_results.provisioning_state}')

    File /anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/azure/core/tracing/decorator.py:94, in distributed_trace.<locals>.decorator.<locals>.wrapper_use_tracer(*args, **kwargs)
    92 span_impl_type = settings.tracing_implementation()
    93 if span_impl_type is None:
    ---> 94 return func(*args, **kwargs)
    96 # Merge span is parameter is set, but only if no explicit parent are passed
    97 if merge_span and not passed_in_parent:

    File /anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/azure/ai/ml/_telemetry/activity.py:289, in monitor_with_activity.<locals>.monitor.<locals>.wrapper(*args, **kwargs)
    285 with tracer.span():
    286 with log_activity(
    287 logger.package_logger, activity_name or f.__name__, activity_type, custom_dimensions
    288 ):
    --> 289 return f(*args, **kwargs)
    290 elif hasattr(logger, "package_logger"):
    291 with log_activity(logger.package_logger, activity_name or f.__name__, activity_type, custom_dimensions):

    File /anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/azure/ai/ml/operations/_online_deployment_operations.py:218, in OnlineDeploymentOperations.begin_create_or_update(self, deployment, local, vscode_debug, skip_script_validation, local_enable_gpu, **kwargs)
    216 log_and_raise_error(ex)
    217 else:
    --> 218 raise ex

    File /anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/azure/ai/ml/operations/_online_deployment_operations.py:173, in OnlineDeploymentOperations.begin_create_or_update(self, deployment, local, vscode_debug, skip_script_validation, local_enable_gpu, **kwargs)
    171 # This get() is to ensure, the endpoint exists and fail before even start the deployment
    172 module_logger.info("Check: endpoint %s exists", deployment.endpoint_name)
    --> 173 self._online_endpoint_operations.get(
    174 resource_group_name=self._resource_group_name,
    175 workspace_name=self._workspace_name,
    176 endpoint_name=deployment.endpoint_name,
    177 )
    178 orchestrators = OperationOrchestrator(
    179 operation_container=self._all_operations,
    180 operation_scope=self._operation_scope,
    181 operation_config=self._operation_config,
    182 )
    183 if deployment.data_collector:

    File /anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/azure/core/tracing/decorator.py:94, in distributed_trace.<locals>.decorator.<locals>.wrapper_use_tracer(*args, **kwargs)
    92 span_impl_type = settings.tracing_implementation()
    93 if span_impl_type is None:
    ---> 94 return func(*args, **kwargs)
    96 # Merge span is parameter is set, but only if no explicit parent are passed
    97 if merge_span and not passed_in_parent:

    File /anaconda/envs/azureml_py310_sdkv2/lib/python3.10/site-packages/azure/ai/ml/_restclient/v2023_04_01_preview/operations/_online_endpoints_operations.py:698, in OnlineEndpointsOperations.get(self, resource_group_name, workspace_name, endpoint_name, **kwargs)
    696 map_error(status_code=response.status_code, response=response, error_map=error_map)
    697 error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response)
    --> 698 raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
    700 deserialized = self._deserialize('OnlineEndpoint', pipeline_response)
    702 if cls:

    HttpResponseError: Operation returned an invalid status 'Bad Request'
    Content: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    <HTML><HEAD><TITLE>Bad Request</TITLE>
    <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
    <BODY><h2>Bad Request - Invalid URL</h2>
    <hr><p>HTTP Error 400. The request URL is invalid.</p>
    </BODY></HTML>


    My endpoint deployment ran fine and I can see the endpoint in my workspace.

    Just to re-iterate, I am loading a registered model in the workspace, I didn't create the model in my current session. Can someone please let me know how to fix this issue.

    Continue reading...

Compartilhe esta Página