Solução de problemas de repositório de recursos gerenciados
Neste artigo, saiba como solucionar problemas comuns que você pode encontrar com o repositório de recursos gerenciados no Azure Machine Learning.
Problemas encontrados ao criar e atualizar um repositório de recursos
Você poderá encontrar esses problemas ao criar ou atualizar um repositório de recursos:
- Erro de limitação do ARM
- Problema de ID do ARM da identidade de materialização duplicada
- Erros de permissão RBAC
- Versões mais antigas do
azure-mgmt-authorization
pacote não funcionam comAzureMLOnBehalfOfCredential
Erro de limitação do ARM
Sintoma
Falha na criação ou atualização do repositórios de recursos. O erro pode ter esta aparência:
{
"error": {
"code": "TooManyRequests",
"message": "The request is being throttled as the limit has been reached for operation type - 'Write'. ..",
"details": [
{
"code": "TooManyRequests",
"target": "Microsoft.MachineLearningServices/workspaces",
"message": "..."
}
]
}
}
Solução
Execute a operação de criação/atualização do repositório de recursos posteriormente. A implantação ocorre em várias etapas, então a segunda tentativa pode falhar porque alguns dos recursos já existem. Exclua esses recursos e retome o trabalho.
Problema de ID do ARM de identidade de materialização duplicada
Depois que o repositório de recursos for atualizado para habilitar a materialização pela primeira vez, algumas atualizações posteriores no repositório de recursos poderão resultar nesse erro.
Sintoma
Quando o repositório de recursos é atualizado usando o SDK/CLI, a atualização falha com a seguinte mensagem de erro:
Erro:
{
"error":{
"code": "InvalidRequestContent",
"message": "The request content contains duplicate JSON property names creating ambiguity in paths 'identity.userAssignedIdentities['/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}']'. Please update the request content to eliminate duplicates and try again."
}
}
Solução
O problema envolve a ID do ARM do formato de ID do ARM materialization_identity
.
Na interface do usuário ou no SDK do Azure, a ID do ARM da identidade gerenciada atribuída pelo usuário usa letras minúsculas resourcegroups
. Confira este exemplo:
- (A): /subscriptions/{sub-id}/resourcegroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
Quando o repositório de recursos usa a identidade gerenciada atribuída pelo usuário como materialization_identity, sua ID do ARM é normalizada e armazenada, com resourceGroups
. Confira este exemplo:
- (B): /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
Na solicitação de atualização, você pode usar uma identidade atribuída pelo usuário que corresponda à identidade de materialização para atualizar o repositório de recursos. Ao usar a ID do ARM no formato (A), quando você usa a identidade gerenciada para essa finalidade, a atualização falhará e retornará a mensagem de erro anterior.
Para corrigir o problema, substitua a string resourcegroups
por resourceGroups
na ID do ARM da identidade gerenciada atribuída pelo usuário. Execute a atualização do repositório de recursos novamente.
Erros de permissão RBAC
Para criar um repositório de recursos, o usuário precisa das funções Contributor
e User Access Administrator
. Uma função personalizada que abrange o mesmo conjunto de funções das ações funciona. Um super conjunto dessas duas funções das ações também funciona.
Sintoma
Se o usuário não tiver as funções necessárias, a implantação falhará. A resposta do erro pode se parecer com o seguinte:
{
"error": {
"code": "AuthorizationFailed",
"message": "The client '{client_id}' with object id '{object_id}' does not have authorization to perform action '{action_name}' over scope '{scope}' or the scope is invalid. If access was recently granted, please refresh your credentials."
}
}
Solução
Conceda as funções Contributor
e User Access Administrator
ao usuário no grupo de recursos onde o repositório de recursos é criado. Instrua o usuário para executar a implantação novamente.
Para mais informações, acesse o recurso Permissões necessárias para a função feature store materialization managed identity
.
Versões mais antigas do pacote de autorização do azure-mgmt não funcionam com AzureMLOnBehalfOfCredential
Sintoma
No repositório azureml-examples, quando você usa o script setup_storage_uai
fornecido na pasta featurestore_sample, o script falha com essa mensagem de erro:
AttributeError: 'AzureMLOnBehalfOfCredential' object has no attribute 'signed_session'
Solução:
Verifique a versão do pacote azure-mgmt-authorization
instalado e verifique se você está usando uma versão recente, pelo menos 3.0.0 ou posterior. A versão mais antiga, como a 0.61.0, não funciona com AzureMLOnBehalfOfCredential
.
Erros de criação de especificação do conjunto de recursos
- Esquema inválido na especificação do conjunto de recursos
- Não é possível localizar a classe de transformação
- FileNotFoundError na pasta de código
Esquema inválido na especificação do conjunto de recursos
Antes de registrar um conjunto de recursos no repositório de recursos, defina a especificação do conjunto de recursos localmente e execute <feature_set_spec>.to_spark_dataframe()
para validá-lo.
Sintoma
Quando o usuário executa <feature_set_spec>.to_spark_dataframe()
, várias falhas de validação de esquema podem ocorrer se o esquema do dataframe do conjunto de recursos não estiver alinhado com a definição na especificação do conjunto de recursos.
Por exemplo:
- Mensagem de erro:
azure.ai.ml.exceptions.ValidationException: Schema check errors, timestamp column: timestamp is not in output dataframe
- Mensagem de erro:
Exception: Schema check errors, no index column: accountID in output dataframe
- Mensagem de erro:
ValidationException: Schema check errors, feature column: transaction_7d_count has data type: ColumnType.long, expected: ColumnType.string
Solução
Verifique o erro de falha de validação de esquema e atualize a definição de especificação do conjunto de recursos adequadamente para os nome e os tipos da coluna. Por exemplo:
- atualize a propriedade
source.timestamp_column.name
para definir corretamente os nomes da coluna do carimbo de data/hora - atualize a propriedade
index_columns
para definir corretamente as colunas do índice - atualize a propriedade
features
para definir corretamente os nomes e tipos das colunas de recursos - Se os dados de origem do recurso forem do tipo csv, verifique se os arquivos CSV serão gerados com cabeçalhos de coluna
Execute <feature_set_spec>.to_spark_dataframe()
novamente para verificar se a validação foi aprovada.
Em vez de inserir manualmente os valores, se o SDK definir a especificação do conjunto de recursos, a opção infer_schema
também será recomendada como a maneira preferida de preencher automaticamente o features
. O timestamp_column
e index columns
não podem ser preenchidos automaticamente.
Para obter mais informações, acesse o recurso Esquema de especificação do conjunto de recursos.
Não é possível localizar a classe de transformação
Sintoma
Quando um usuário executa <feature_set_spec>.to_spark_dataframe()
, ele retorna este erro: AttributeError: module '<...>' has no attribute '<...>'
Por exemplo:
AttributeError: module '7780d27aa8364270b6b61fed2a43b749.transaction_transform' has no attribute 'TransactionFeatureTransformer1'
Solução
A classe de transformação do recurso deve ser definida em um arquivo Python na raiz da pasta do código. A pasta de código pode ter outros arquivos ou subpastas.
Defina o valor da propriedade feature_transformation_code.transformation_class
como <py file name of the transformation class>.<transformation class name>
.
Por exemplo, se a pasta de código for semelhante à seguinte
code
/
└── my_transformation_class.py
e o arquivo my_transformation_class.py define a classe MyFeatureTransformer
, define
feature_transformation_code.transformation_class
como my_transformation_class.MyFeatureTransformer
FileNotFoundError na pasta de código
Sintoma
Esse erro pode acontecer se a especificação do conjunto de recursos YAML for criada manualmente e o SDK não gerar o conjunto de recursos. O comando
runs <feature_set_spec>.to_spark_dataframe()
retorna o erro
FileNotFoundError: [Errno 2] No such file or directory: ....
Solução
Verifique a pasta de código. Deve ser uma subpasta na pasta especificação do conjunto de recursos. Na especificação do conjunto de recursos, defina feature_transformation_code.path
como um caminho relativo para a pasta de especificação do conjunto de recursos. Por exemplo:
feature set spec folder
/
├── code/
│ ├── my_transformer.py
│ └── my_orther_folder
└── FeatureSetSpec.yaml
Neste exemplo, a propriedade feature_transformation_code.path
no YAML deve ser ./code
Observação
Ao usar a função create_feature_set_spec no azureml-featurestore
para criar o objeto Python FeatureSetSpec, poderá usar qualquer pasta local como o valor feature_transformation_code.path
. Quando o objeto FeatureSetSpec é despejado para formar um yaml de especificação de conjunto de recursos em uma pasta de destino, o caminho do código é copiado para a pasta de destino e a propriedade feature_transformation_code.path
é atualizada no yaml de especificação.
Erros CRUD do conjunto de recursos
GET do conjunto de recursos falha devido a FeatureStoreEntity inválido
Sintoma
Ao usar o cliente CRUD do repositório de recursos para um conjunto de recursos GET, por exemplo fs_client.feature_sets.get(name, version)
”`, você poderá ver esse erro:
Traceback (most recent call last):
File "/home/trusted-service-user/cluster-env/env/lib/python3.8/site-packages/azure/ai/ml/operations/_feature_store_entity_operations.py", line 116, in get
return FeatureStoreEntity._from_rest_object(feature_store_entity_version_resource)
File "/home/trusted-service-user/cluster-env/env/lib/python3.8/site-packages/azure/ai/ml/entities/_feature_store_entity/feature_store_entity.py", line 93, in _from_rest_object
featurestoreEntity = FeatureStoreEntity(
File "/home/trusted-service-user/cluster-env/env/lib/python3.8/site-packages/azure/ai/ml/_utils/_experimental.py", line 42, in wrapped
return func(*args, **kwargs)
File "/home/trusted-service-user/cluster-env/env/lib/python3.8/site-packages/azure/ai/ml/entities/_feature_store_entity/feature_store_entity.py", line 67, in __init__
raise ValidationException(
azure.ai.ml.exceptions.ValidationException: Stage must be Development, Production, or Archived, found None
Esse erro também pode ocorrer no trabalho de materialização do FeatureStore, com o trabalho falhando com o mesmo rastreamento de erro de volta.
Solução
Iniciar uma sessão de notebook com a nova versão do SDKS
- Se estiver usando azure-ai-ml, atualize para
azure-ai-ml==1.8.0
. - Se ele estiver usando o SDK do plano de dados do repositório de recursos, atualize-o para
azureml-featurestore== 0.1.0b2
.
Na sessão do notebook, atualize a entidade do repositório de recursos para definir sua propriedade stage
, conforme mostrado neste exemplo:
from azure.ai.ml.entities import DataColumn, DataColumnType
account_entity_config = FeatureStoreEntity(
name="account",
version="1",
index_columns=[DataColumn(name="accountID", type=DataColumnType.STRING)],
stage="Development",
description="This entity represents user account index key accountID.",
tags={"data_typ": "nonPII"},
)
poller = fs_client.feature_store_entities.begin_create_or_update(account_entity_config)
print(poller.result())
Quando você configurar o FeatureStoreEntity, defina as propriedades para corresponder às propriedades usadas quando foi criada. A única diferença é adicionar a propriedade stage
.
Depois que a chamada begin_create_or_update()
retornar com êxito, a próxima chamada feature_sets.get()
e o próximo trabalho de materialização deverão ser bem-sucedidos.
Erros de trabalho e consulta de recuperação de recursos
- Erros de resolução da especificação de recuperação de recursos
- Arquivo feature_retrieval_spec.yaml não encontrado ao usar um modelo como entrada para o trabalho de recuperação de recursos
- Os dados de observação não são unidos a nenhum valor de recurso
- O usuário ou a identidade gerenciada não tem a permissão RBAC adequada no repositório de recursos
- O usuário ou a Identidade Gerenciada não têm a permissão RBAC adequada para ler do armazenamento de origem ou do repositório offline
- Falha no trabalho de treinamento ao ler dados gerados pelo componente de recuperação de recursos de build
generate_feature_retrieval_spec()
falha devido ao uso da especificação do conjunto de recursos local- A consulta
get_offline_features()
leva muito tempo
Quando um trabalho de recuperação de recursos falha, verifique os detalhes do erro. Vá para a página de detalhes da execução, selecione a guia Saídas + logs e examine o arquivo logs/azureml/driver/stdout.
Se o usuário executar a consulta get_offline_feature()
no notebook, as saídas da célula mostrarão diretamente o erro.
Erros de resolução da especificação de recuperação de recursos
Sintoma
A consulta/trabalho de recuperação de recursos mostra estes erros:
- Recurso inválido
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
- URI inválido do repositório de recursos:
message: "the Resource 'Microsoft.MachineLearningServices/workspaces/<name>' under resource group '<>>resource group name>'->' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix",
code: "ResourceNotFound"
- Conjunto de recursos inválido:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."
Solução
Verifique o conteúdo no feature_retrieval_spec.yaml
que o trabalho usa. Verifique se todos os nomes do repositório de recursos
- URI
- versão/nome do conjunto de recursos
- recurso
são válidos e que existem no repositório de recursos.
Para selecionar recursos de um repositório de recursos e gerar o arquivo YAML de especificação de recuperação de recursos, recomendamos usar a função do utilitário.
Esse snippet de código usa a generate_feature_retrieval_spec
função de utilitário .
from azureml.featurestore import FeatureStoreClient
from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
featurestore = FeatureStoreClient(
credential = AzureMLOnBehalfOfCredential(),
subscription_id = featurestore_subscription_id,
resource_group_name = featurestore_resource_group_name,
name = featurestore_name
)
transactions_featureset = featurestore.feature_sets.get(name="transactions", version = "1")
features = [
transactions_featureset.get_feature('transaction_amount_7d_sum'),
transactions_featureset.get_feature('transaction_amount_3d_sum')
]
feature_retrieval_spec_folder = "./project/fraud_model/feature_retrieval_spec"
featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)
Arquivo feature_retrieval_spec.yaml não encontrado ao usar um modelo como entrada para o trabalho de recuperação de recursos
Sintoma
Quando você usa um modelo registrado como uma entrada de trabalho de recuperação de recursos, o trabalho falha com este erro:
ValueError: Failed with visit error: Failed with execution error: error in streaming from input data sources
VisitError(ExecutionError(StreamError(NotFound)))
=> Failed with execution error: error in streaming from input data sources
ExecutionError(StreamError(NotFound)); Not able to find path: azureml://subscriptions/{sub_id}/resourcegroups/{rg}/workspaces/{ws}/datastores/workspaceblobstore/paths/LocalUpload/{guid}/feature_retrieval_spec.yaml
Solução:
Quando você fornece um modelo como entrada para a etapa de recuperação de recursos, o modelo espera encontrar o arquivo YAML de especificação de recuperação na pasta de artefatos do modelo. O trabalho falhará se esse arquivo estiver ausente.
Para corrigir o problema, empacote o arquivo feature_retrieval_spec.yaml
na pasta raiz da pasta de artefato do modelo antes de registrar o modelo.
Os Dados de Observação não são unidos a nenhum valor de recurso
Sintoma
Depois que os usuários executam a consulta/trabalho de recuperação de recursos, os dados de saída não obtêm nenhum valor de recurso. Por exemplo, um usuário executa o trabalho de recuperação de recursos para recuperar recursos os transaction_amount_3d_avg
e transaction_amount_7d_avg
com esses resultados:
transactionID | accountID | timestamp | is_fraud | transaction_amount_3d_avg | transaction_amount_7d_avg |
---|---|---|---|---|---|
83870774-7A98-43B... | A1055520444618950 | 2023-02-28 04:34:27 | 0 | nulo | nulo |
25144265-F68B-4FD... | A1055520444618950 | 2023-02-28 10:44:30 | 0 | nulo | nulo |
8899ED8C-B295-43F... | A1055520444812380 | 2023-03-06 00:36:30 | 0 | nulo | nulo |
Solução
A recuperação de recursos faz uma consulta de junção pontual. Se o resultado da junção mostrar vazio, tente as seguintes soluções possíveis:
- Estenda o
temporal_join_lookback
intervalo na definição de especificação do conjunto de recursos ou remova-o temporariamente. Isso permite que a junção pontual olhe para trás (ou infinitamente) para o passado, antes do carimbo de data/hora do evento de observação, para localizar os valores do recurso. - Se
source.source_delay
também estiver definido na definição de especificação do conjunto de recursos, verifique setemporal_join_lookback > source.source_delay
.
Se nenhuma dessas soluções funcionar, obtenha o conjunto de recursos do armazenamento de recursos e executa <feature_set>.to_spark_dataframe()
para inspecionar manualmente as colunas de índice de recursos e carimbos de data/hora. Essa falha pode acontecer porque:
- os valores de índice nos dados de observação não existem no dataframe do conjunto de recursos
- não existe nenhum valor de recurso, com um valor de carimbo de data/hora antes do carimbo de data/hora de observação.
Nesses casos, se o recurso tiver habilitado a materialização offline, talvez seja necessário fazer backup de mais dados de recursos.
O usuário ou a identidade gerenciada não tem a permissão RBAC adequada no repositório de recursos
Sintoma:
O trabalho/consulta de recuperação de recursos falha com esta mensagem de erro no arquivo logs/azureml/driver/stdout:
Traceback (most recent call last):
File "/home/trusted-service-user/cluster-env/env/lib/python3.8/site-packages/azure/ai/ml/_restclient/v2022_12_01_preview/operations/_workspaces_operations.py", line 633, in get
raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
azure.core.exceptions.HttpResponseError: (AuthorizationFailed) The client 'XXXX' with object id 'XXXX' does not have authorization to perform action 'Microsoft.MachineLearningServices/workspaces/read' over scope '/subscriptions/XXXX/resourceGroups/XXXX/providers/Microsoft.MachineLearningServices/workspaces/XXXX' or the scope is invalid. If access was recently granted, please refresh your credentials.
Code: AuthorizationFailed
Solução:
Se o trabalho de recuperação de trabalho usa uma identidade gerenciada, atribua a
AzureML Data Scientist
função no repositório de recursos à identidade.Se o problema acontecer quando
- o usuário executa o código no notebook Spark do Azure Machine Learning
- que o notebook usa a própria identidade do usuário para acessar o serviço do Azure Machine Learning
atribuir a função AzureML Data Scientist
no repositório de recursos à identidade do Microsoft Entra do usuário.
Azure Machine Learning Data Scientist
é uma função recomendada. O usuário pode criar sua própria função personalizada com as seguintes ações
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Para obter mais informações sobre a configuração do RBAC, acesse o recurso Gerenciar o acesso ao repositório de recursos gerenciados.
O usuário ou a Identidade Gerenciada não têm a permissão RBAC adequada para ler do armazenamento de origem ou do repositório offline
Sintoma
O trabalho/consulta de recuperação de recursos falha com a seguinte mensagem de erro no arquivo logs/azureml/driver/stdout:
An error occurred while calling o1025.parquet.
: java.nio.file.AccessDeniedException: Operation failed: "This request is not authorized to perform this operation using this permission.", 403, GET, https://{storage}.dfs.core.windows.net/test?upn=false&resource=filesystem&maxResults=5000&directory=datasources&timeout=90&recursive=false, AuthorizationPermissionMismatch, "This request is not authorized to perform this operation using this permission. RequestId:63013315-e01f-005e-577b-7c63b8000000 Time:2023-05-01T22:20:51.1064935Z"
at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.checkException(AzureBlobFileSystem.java:1203)
at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.listStatus(AzureBlobFileSystem.java:408)
at org.apache.hadoop.fs.Globber.listStatus(Globber.java:128)
at org.apache.hadoop.fs.Globber.doGlob(Globber.java:291)
at org.apache.hadoop.fs.Globber.glob(Globber.java:202)
at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:2124)
Solução:
- Se o trabalho de recuperação de recursos usa uma identidade gerenciada, atribua a função
Storage Blob Data Reader
nos armazenamentos de origem e de repositório offline à identidade. - Esse erro ocorre quando o notebook usa a identidade do usuário para acessar o serviço do Azure Machine Learning para executar a consulta. Para resolver o erro, atribua a função
Storage Blob Data Reader
à identidade do usuário no armazenamento de origem e na conta de armazenamento offline.
Storage Blob Data Reader
é o requisito mínimo de acesso recomendado. Os usuários também podem atribuir funções com mais privilégios, por exemplo, Storage Blob Data Contributor
ou Storage Blob Data Owner
.
Falha no trabalho de treinamento ao ler dados gerados pelo componente de recuperação de recursos de build
Sintoma
Um trabalho de treinamento falha com a mensagem de erro informando que os dados de treinamento não existem, o formato está incorreto ou há um erro de analisador:
FileNotFoundError: [Errno 2] No such file or directory
- o formato não está correto.
ParserError:
Solução
O componente de recuperação de recursos interno tem uma saída, output_data
. Os dados de saída são um ativo de dados uri_folder. Ele sempre tem esta estrutura de pastas:
<training data folder>
/
├── data/
│ ├── xxxxx.parquet
│ └── xxxxx.parquet
└── feature_retrieval_spec.yaml
Os dados de saída estão sempre no formato parquet. Atualize o script de treinamento para ler da subpasta "dados" e leia os dados como parquet.
generate_feature_retrieval_spec()
falha devido ao uso da especificação do conjunto de recursos local
Sintoma:
Este código Python gerar uma especificação de recuperação de recursos em uma determinada lista de recursos:
featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)
Se a lista de recursos contiver recursos definidos por uma especificação de conjunto de recursos local, generate_feature_retrieval_spec()
falhará com esta mensagem de erro:
AttributeError: 'FeatureSetSpec' object has no attribute 'id'
Solução:
Uma especificação de recuperação de recursos só pode ser gerada usando conjuntos de recursos registrados no Repositório de Recursos. Para corrigir o problema:
- Registrar a especificação do conjunto de recursos local como conjunto de recursos no repositório de recursos
- Obter o conjunto de recursos registrado
- Criar listas de recursos novamente usando apenas recursos de conjuntos de recursos registrados
- Gerar a especificação de recuperação de recursos usando a nova lista de recursos
A consulta get_offline_features()
leva muito tempo
Sintoma:
A execução de get_offline_features
para gerar dados de treinamento usando alguns recursos do repositório de recursos leva muito tempo para ser concluída.
Soluções:
Confira estas configurações:
- Verifique se cada conjunto de recursos usado na consulta tenha
temporal_join_lookback
definido na especificação do conjunto de recursos. Defina seu valor como um valor menor. - Se o tamanho e a janela de carimbo de data/hora no dataframe de observação forem grandes, configure a sessão do notebook (ou o trabalho) para aumentar o tamanho (memória e núcleo) do driver e do executor. Além disso, aumente o número de executores.
Erros de trabalho de materialização de recursos
- Configuração de repositório offline inválida
- A Identidade de Materialização não tem permissões RBAC adequadas no repositório de recursos
- A Identidade de Materialização não tem permissões RBAC adequadas para leitura do armazenamento
- A identidade de materialização não tem a permissão RBAC para gravar dados no repositório offline
- Resultados de execução de trabalho de streaming para um notebook resulta em falha
- Configuração inválida do Apache Spark
Quando o trabalho de materialização do recurso falha, siga estas etapas para marcar os detalhes da falha do trabalho:
- Navegue até a página do repositório de recursos: https://ml.azure.com/featureStore/{your-feature-store-name}.
- Vá para a guia
feature set
, selecione o conjunto de recursos relevante e navegue até a página Detalhes do conjunto de recursos. - Na página de detalhes do conjunto de recursos, selecione a guia
Materialization jobs
e selecione o trabalho com falha para a exibição de detalhes do trabalho. - Na exibição de detalhes do trabalho, no cartão
Properties
, revise o status do trabalho e a mensagem de erro. - Você também pode ir para a guia
Outputs + logs
e encontrar o arquivostdout
do arquivologs\azureml\driver\stdout
.
Depois de aplicar uma correção, você pode disparar manualmente um trabalho de materialização de provisionamento para verificar se a correção funciona.
Configuração de repositório offline inválida
Sintoma
Um trabalho de materialização falhar com esta mensagem de erro no arquivo logs/azureml/driver/stdout
:
Caused by: Status code: -1 error code: null error message: InvalidAbfsRestOperationExceptionjava.net.UnknownHostException: adlgen23.dfs.core.windows.net
java.util.concurrent.ExecutionException: Operation failed: "The specified resource name contains invalid characters.", 400, HEAD, https://{storage}.dfs.core.windows.net/{container-name}/{fs-id}/transactions/1/_delta_log?upn=false&action=getStatus&timeout=90
Solução
Use o SDK para verificar o destino do repositório offline definido no repositório de recursos:
from azure.ai.ml import MLClient
from azure.ai.ml.identity import AzureMLOnBehalfOfCredential
fs_client = MLClient(AzureMLOnBehalfOfCredential(), featurestore_subscription_id, featurestore_resource_group_name, featurestore_name)
featurestore = fs_client.feature_stores.get(name=featurestore_name)
featurestore.offline_store.target
Você também pode verificar o destino do repositório offline na página de visão geral da interface do usuário do repositório de recursos. Verifique se o armazenamento e o contêiner existem e se o destino tem esse formato:
/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{storage}/blobServices/default/containers/{container-name}
A Identidade de Materialização não tem a permissão RBAC adequada no repositório de recursos
Sintoma:
O trabalho de materialização falha com esta mensagem de erro no arquivo logs/azureml/driver/stdout:
Traceback (most recent call last):
File "/home/trusted-service-user/cluster-env/env/lib/python3.8/site-packages/azure/ai/ml/_restclient/v2022_12_01_preview/operations/_workspaces_operations.py", line 633, in get
raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat)
azure.core.exceptions.HttpResponseError: (AuthorizationFailed) The client 'XXXX' with object id 'XXXX' does not have authorization to perform action 'Microsoft.MachineLearningServices/workspaces/read' over scope '/subscriptions/XXXX/resourceGroups/XXXX/providers/Microsoft.MachineLearningServices/workspaces/XXXX' or the scope is invalid. If access was recently granted, please refresh your credentials.
Code: AuthorizationFailed
Solução:
Atribua a função Azure Machine Learning Data Scientist
no repositório de recursos à identidade de materialização (uma identidade gerenciada atribuída pelo usuário) do repositório de recursos.
Azure Machine Learning Data Scientist
é uma função recomendada. Você pode criar sua própria função personalizada com estas ações:
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Para mais informações, acesse o recurso Permissões necessárias para a função feature store materialization managed identity
.
A Identidade de Materialização não tem permissões RBAC adequadas para leitura do armazenamento
Sintoma
O trabalho de materialização falha com esta mensagem de erro no arquivo logs/azureml/driver/stdout:
An error occurred while calling o1025.parquet.
: java.nio.file.AccessDeniedException: Operation failed: "This request is not authorized to perform this operation using this permission.", 403, GET, https://{storage}.dfs.core.windows.net/test?upn=false&resource=filesystem&maxResults=5000&directory=datasources&timeout=90&recursive=false, AuthorizationPermissionMismatch, "This request is not authorized to perform this operation using this permission. RequestId:63013315-e01f-005e-577b-7c63b8000000 Time:2023-05-01T22:20:51.1064935Z"
at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.checkException(AzureBlobFileSystem.java:1203)
at org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem.listStatus(AzureBlobFileSystem.java:408)
at org.apache.hadoop.fs.Globber.listStatus(Globber.java:128)
at org.apache.hadoop.fs.Globber.doGlob(Globber.java:291)
at org.apache.hadoop.fs.Globber.glob(Globber.java:202)
at org.apache.hadoop.fs.FileSystem.globStatus(FileSystem.java:2124)
Solução:
Atribua a função Storage Blob Data Reader
no repositório de recursos à identidade de materialização (uma identidade gerenciada atribuída pelo usuário) do repositório de recursos.
Storage Blob Data Reader
é o requisito mínimo de acesso recomendado. Você também pode atribuir funções com mais privilégios, por exemplo, Storage Blob Data Contributor
ou Storage Blob Data Owner
.
Para mais informações sobre a configuração do RBAC, acesse o recurso Permissões necessárias para a função feature store materialization managed identity
.
A identidade de materialização não tem a permissão RBAC adequada para gravar dados no repositório offline
Sintoma
O trabalho de materialização falha com esta mensagem de erro no arquivo logs/azureml/driver/stdout:
An error occurred while calling o1162.load.
: java.util.concurrent.ExecutionException: java.nio.file.AccessDeniedException: Operation failed: "This request is not authorized to perform this operation using this permission.", 403, HEAD, https://featuresotrestorage1.dfs.core.windows.net/offlinestore/fs_xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_fsname/transactions/1/_delta_log?upn=false&action=getStatus&timeout=90
at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:306)
at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:293)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:135)
at com.google.common.cache.LocalCache$Segment.getAndRecordStats(LocalCache.java:2410)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2380)
at com.google.common.cache.LocalCache$S
Solução
Atribua a função Storage Blob Data Reader
no repositório de recursos à identidade de materialização (uma identidade gerenciada atribuída pelo usuário) do repositório de recursos.
Storage Blob Data Contributor
é o requisito mínimo de acesso recomendado. Você também pode atribuir funções com mais privilégios, por exemplo, Storage Blob Data Owner
.
Para mais informações sobre a configuração do RBAC, acesse o recurso Permissões necessárias para a função feature store materialization managed identity
.
Saída do trabalho de streaming para um notebook resulta em falha
Sintoma:
Ao usar o cliente CRUD do repositório de recursos para transmitir resultados do trabalho de materialização para um notebook usando fs_client.jobs.stream("<job_id>")
, a chamada do SDK falha com um erro
HttpResponseError: (UserError) A job was found, but it is not supported in this API version and cannot be accessed.
Code: UserError
Message: A job was found, but it is not supported in this API version and cannot be accessed.
Solução:
Quando o trabalho de materialização é criado (por exemplo, por uma chamada de provisionamento), pode levar alguns segundos para que o trabalho seja inicializado corretamente. Execute o comando jobs.stream()
novamente em alguns segundos. Isso deve resolver o problema.
Configuração inválida do Spark
Sintoma:
Um trabalho de materialização falha com esta mensagem de erro:
Synapse job submission failed due to invalid spark configuration request
{
"Message":"[..] Either the cores or memory of the driver, executors exceeded the SparkPool Node Size.\nRequested Driver Cores:[4]\nRequested Driver Memory:[36g]\nRequested Executor Cores:[4]\nRequested Executor Memory:[36g]\nSpark Pool Node Size:[small]\nSpark Pool Node Memory:[28]\nSpark Pool Node Cores:[4]"
}
Solução:
Atualize o materialization_settings.spark_configuration{}
do conjunto de recursos. Verifique se esses parâmetros usam quantidades de tamanho de memória e um número total de valores principais, que são menores do que o tipo de instância, conforme definido por materialization_settings.resource
, fornece:
spark.driver.cores
spark.driver.memory
spark.executor.cores
spark.executor.memory
Por exemplo, no tipo de instância standard_e8s_v3, essa configuração do Spark é uma das opções válidas:
transactions_fset_config.materialization_settings = MaterializationSettings(
offline_enabled=True,
resource = MaterializationComputeResource(instance_type="standard_e8s_v3"),
spark_configuration = {
"spark.driver.cores": 4,
"spark.driver.memory": "36g",
"spark.executor.cores": 4,
"spark.executor.memory": "36g",
"spark.executor.instances": 2
},
schedule = None,
)
fs_poller = fs_client.feature_sets.begin_create_or_update(transactions_fset_config)