在 Azure ML Pipeline 中执行 DatabricksStep 时,我正在计算一个模型,将其保存为 .pkl 文件并使用 Run.upload_file() 将其上传到当前 Azure ML Run 的 Blob 存储中,所有这些都没有任何问题。
但是,一旦我尝试使用 Run.register_model() 将模型注册到 Azure ML 工作区,脚本会抛出以下错误:
UserErrorException: UserErrorException: Message: 操作返回了无效的状态代码“Forbidden”。可能的原因是:
- 您未被授权访问此资源或目录列表被拒绝。
- 您可能未登录 Azure 服务,或使用其他订阅。您可以运行 Azure CLI 命令“az account list -o table”来检查默认帐户。
- 您已经打开了多个对象/登录会话,请关闭所有会话后重试。
InnerException None ErrorResponse { "error": { "code": "UserError", "message": "\n操作返回了无效的状态代码“Forbidden”。可能的原因是:\n1. 您未被授权访问此资源或目录列表被拒绝。\n2. 您可能未登录 Azure 服务,或使用其他订阅。您可以运行 Azure CLI 命令“az account list -o table”来检查默认帐户。\n3. 您已经打开了多个对象/登录会话,请关闭所有会话后重试。\n " } }
调用堆栈如下
/databricks/python/lib/python3.7/site-packages/azureml/_restclient/models_client.py 中的 register_model() 方法报错。
70 return self.
71 _execute_with_workspace_arguments(self._client.ml_models.register, model,
---> 72 custom_headers=ModelsClient.get_modelmanagement_custom_headers())
73
74 @error_with_model_id_handling
/databricks/python/lib/python3.7/site-packages/azureml/_restclient/workspace_client.py 中的 _execute_with_workspace_arguments() 方法报错。 65 66 def _execute_with_workspace_arguments(self, func, *args, **kwargs): ---> 67 return self._execute_with_arguments(func, copy.deepcopy(self._workspace_arguments), *args, **kwargs) 68 69 def get_or_create_experiment(self, experiment_name, is_async=False):
/databricks/python/lib/python3.7/site-packages/azureml/_restclient/clientbase.py 中的 _execute_with_arguments() 方法报错。 536 return self._call_paginated_api(func, *args_list, **kwargs) 537 else: --> 538 return self._call_api(func, *args_list, **kwargs) 539 except ErrorResponseException as e: 540 raise ServiceException(e)
在/databricks/python/lib/python3.7/site-packages/azureml/_restclient/clientbase.py文件中,_call_api函数在执行时调用了_execute_with_base_arguments函数并返回结果。_execute_with_base_arguments函数接受func、*args和**kwargs等参数,将它们传递给_internal_execute_func方法进行处理并返回结果。如果_internal_execute_func方法出错,则_handle_retry方法会尝试重新执行该方法,直到达到重试次数限制或者成功为止。如果错误是由于登录会话等问题引起的,则需要关闭所有会话并重试。最后,six库中的raise_from方法将异常包装并抛出。 model = sklearn.linear_model.LinearRegression ( )
model_path = "<path to 'model.pkl' in my blob storage>"
joblib.dump(model, model_path)
aml_run = azureml.core.get_context ( )
aml_run.upload_file (name = "model.pkl", path_or_stream = model_path)
# Until this point, everything works fine
aml_run.register_model (model_name = "model.pkl")
# This throws the posted "Forbidden"-Error