Solução de problemas do repositório de recursos gerenciados
Neste artigo, saiba como solucionar problemas comuns que você pode encontrar com o repositório de recursos gerenciados no Aprendizado de Máquina do Azure.
Problemas encontrados ao criar e atualizar um repositório de recursos
Você pode encontrar esses problemas ao criar ou atualizar um repositório de recursos:
- Erro de limitação ARM
- Problema de ID ARM de 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 ARM
Sintoma
A criação ou atualização do repositório de recursos falha. 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, portanto, a segunda tentativa pode falhar porque alguns dos recursos já existem. Exclua esses recursos e retome o trabalho.
Problema com o ID do ARM da identidade de materialização duplicado
Depois que o repositório de recursos é atualizado para permitir a materialização pela primeira vez, algumas atualizações posteriores no repositório de recursos podem resultar nesse erro.
Sintoma
Quando o repositório de recursos é atualizado usando o SDK/CLI, a atualização falha com esta 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 ARM do materialization_identity
formato ARM ID.
Na interface do usuário ou SDK do Azure, a ID ARM da identidade gerenciada atribuída pelo usuário usa minúsculas resourcegroups
. Veja 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 sua materialization_identity, sua ID ARM é normalizada e armazenada, com resourceGroups
. Veja 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. Enquanto você usa a ID ARM no formato (A), quando você usa essa identidade gerenciada para essa finalidade, a atualização falha e retorna a mensagem de erro anterior.
Para corrigir o problema, substitua a cadeia de caracteres resourcegroups
pela resourceGroups
ID ARM de identidade gerenciada atribuída pelo usuário. Em seguida, 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 Contributor
funções e User Access Administrator
. Uma função personalizada que abrange o mesmo conjunto de funções das ações funcionará. Um super conjunto desses dois papéis das ações também funcionará.
Sintoma
Se o usuário não tiver as funções necessárias, a implantação falhará. A resposta de erro pode ter esta aparência:
{
"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 Contributor
funções e User Access Administrator
ao usuário no grupo de recursos onde o repositório de recursos é criado. Em seguida, instrua o usuário a executar a implantação novamente.
Para obter mais informações, visite as Permissões necessárias para o recurso de feature store materialization managed identity
função .
Versões mais antigas do pacote azure-mgmt-authorization não funcionam com AzureMLOnBehalfOfCredential
Sintoma
No repositório azureml-examples, quando você usa o setup_storage_uai
script fornecido na pasta featurestore_sample , o script falha com esta mensagem de erro:
AttributeError: 'AzureMLOnBehalfOfCredential' object has no attribute 'signed_session'
Solução:
Verifique a versão do pacote instalado azure-mgmt-authorization
e verifique se você está usando uma versão recente, pelo menos 3.0.0 ou posterior. Uma versão mais antiga - por exemplo, 0.61.0 - não funciona com AzureMLOnBehalfOfCredential
o .
Erros de criação de especificações do conjunto de recursos
- Esquema inválido na especificação do conjunto de recursos
- Não é possível encontrar 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 um usuário executa <feature_set_spec>.to_spark_dataframe()
o , várias falhas de validação de esquema podem ocorrer se o esquema de dataframe do conjunto de recursos não estiver alinhado com a definição de 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 de acordo, para os nomes e tipos de coluna. Por exemplo:
- Atualize a
source.timestamp_column.name
propriedade para definir corretamente os nomes das colunas de carimbo de data/hora - Atualize a
index_columns
propriedade para definir corretamente as colunas de índice - Atualize a
features
propriedade para definir corretamente os nomes e tipos de colunas de recursos - se os dados de origem do recurso forem do tipo csv, verifique se os arquivos CSV são gerados com cabeçalhos de coluna
Em seguida, execute <feature_set_spec>.to_spark_dataframe()
novamente para verificar se a validação foi aprovada.
Em vez de digitar manualmente os valores, se o SDK definir a especificação do conjunto de recursos, a infer_schema
opção também será recomendada como a maneira preferida de preencher automaticamente o features
. O timestamp_column
e index columns
não pode ser preenchido automaticamente.
Para obter mais informações, visite o recurso de esquema Feature set Spec.
Não é possível encontrar a classe de transformação
Sintoma
Quando um usuário executa <feature_set_spec>.to_spark_dataframe()
o , ele retorna este erro: AttributeError: module '<...>' has no attribute '<...>'
Por exemplo:
AttributeError: module '7780d27aa8364270b6b61fed2a43b749.transaction_transform' has no attribute 'TransactionFeatureTransformer1'
Solução
Espera-se que a classe de transformação de recurso tenha sua definição em um arquivo Python sob a raiz da pasta de código. A pasta de código pode ter outros arquivos ou subpastas.
Defina o feature_transformation_code.transformation_class
valor da propriedade como <py file name of the transformation class>.<transformation class name>
.
Por exemplo, se a pasta de código tiver esta aparência
code
/
└── my_transformation_class.py
e o arquivo my_transformation_class.py define a MyFeatureTransformer
classe, conjunto
feature_transformation_code.transformation_class
a ser my_transformation_class.MyFeatureTransformer
FileNotFoundError na pasta do código
Sintoma
Esse erro pode acontecer se o conjunto de recursos spec YAML for criado manualmente e o SDK não gerar o conjunto de recursos. O comando
runs <feature_set_spec>.to_spark_dataframe()
Erro de retorno
FileNotFoundError: [Errno 2] No such file or directory: ....
Solução
Verifique a pasta do código. Deve ser uma subpasta na pasta spec 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ções do conjunto de recursos. Por exemplo:
feature set spec folder
/
├── código/
│ ├── my_transformer.py
│ └── my_orther_folder
└── FeatureSetSpec.yaml
Neste exemplo, a feature_transformation_code.path
propriedade no YAML deve ser ./code
Nota
Quando você usa a função create_feature_set_spec para azureml-featurestore
criar um objeto python FeatureSetSpec, ele pode tomar qualquer pasta local como o feature_transformation_code.path
valor. Quando o objeto FeatureSetSpec é despejado para formar um conjunto de recursos spec yaml em uma pasta de destino, o caminho do código é copiado para a pasta de destino e a feature_transformation_code.path
propriedade é atualizada no spec yaml.
Erros CRUD do conjunto de recursos
O conjunto de recursos GET falha devido a FeatureStoreEntity inválido
Sintoma
Quando você usa o cliente CRUD do repositório de recursos para OBTER um conjunto de recursos - por exemplo, fs_client.feature_sets.get(name, version)
"' - você pode receber este 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 acontecer no trabalho de materialização do FeatureStore, onde o trabalho falha com o mesmo rastreamento de erro.
Solução
Iniciar uma sessão de bloco de anotações com a nova versão do SDKS
- Se ele usa azure-ai-ml, atualize para
azure-ai-ml==1.8.0
. - Se ele usar o SDK do dataplane do repositório de recursos, atualize-o para
azureml-featurestore== 0.1.0b2
.
Na sessão do bloco de anotações, atualize a entidade do repositório de recursos para definir sua stage
propriedade, 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())
Ao definir o FeatureStoreEntity, defina as propriedades para corresponder às propriedades usadas quando ele foi criado. A única diferença é adicionar o stage
imóvel.
Assim que a begin_create_or_update()
chamada retornar com sucesso, a próxima feature_sets.get()
chamada e o próximo trabalho de materialização deverão ser bem-sucedidos.
Trabalho de recuperação de recursos e erros de consulta
- Erros de resolução de 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 associados a nenhum valor de recurso
- Usuário ou Identidade Gerenciada não tem permissão RBAC adequada no repositório de recursos
- O usuário ou a identidade gerenciada não tem permissão RBAC adequada para ler do armazenamento de origem ou do armazenamento offline
- O trabalho de treinamento não consegue ler os dados gerados pelo componente de recuperação de recursos integrado
generate_feature_retrieval_spec()
falha devido ao uso da especificação do conjunto de recursos locais- A
get_offline_features()
consulta demora muito tempo
Quando um trabalho de recuperação de recursos falhar, 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 get_offline_feature()
consulta no bloco de anotações, as saídas da célula mostrarão diretamente o erro.
Erros de resolução de especificação de recuperação de recursos
Sintoma
A consulta/tarefa de recuperação de recursos mostra estes erros:
- Funcionalidade inválida
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
- URI de armazenamento de recursos inválido:
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 que o feature_retrieval_spec.yaml
trabalho usa. Verifique se todos os nomes de armazenamento de recursos
- URI
- nome/versão do conjunto de recursos
- funcionalidade
são válidos e existem na loja de recursos.
Para selecionar recursos de um repositório de recursos e gerar o arquivo YAML de especificação de recuperação de recursos, recomenda-se o uso da função utilitária.
Este trecho de código usa a generate_feature_retrieval_spec
função utilitária.
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 recurso, 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 artefato do modelo. O trabalho falhará se esse arquivo estiver faltando.
Para corrigir o problema, empacote o feature_retrieval_spec.yaml
arquivo na pasta raiz da pasta de artefato do modelo antes de registrar o modelo.
Os dados de observação não são associados a nenhum valor de recurso
Sintoma
Depois que os usuários executam a consulta/tarefa de recuperação de recursos, os dados de saída não recebem valores de recurso. Por exemplo, um usuário executa o trabalho de recuperação de recursos para recuperar os recursos e transaction_amount_7d_avg
, com estes transaction_amount_3d_avg
resultados:
transactionID | accountID | carimbo de data/hora | 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 obtenção de funcionalidades faz uma consulta de associação para um ponto anterior no tempo. Se o resultado da junção mostrar vazio, tente estas possíveis soluções:
- 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 point-in-time olhe mais para trás (ou infinitamente) para o passado, antes do carimbo de data e hora do evento de observação, para encontrar os valores do recurso. - Se
source.source_delay
também estiver definido na definição de especificação do conjunto de recursos, certifique-se de quetemporal_join_lookback > source.source_delay
.
Se nenhuma dessas soluções funcionar, obtenha o conjunto de recursos do repositório de recursos e execute <feature_set>.to_spark_dataframe()
para inspecionar manualmente as colunas de índice de recursos e os carimbos de data/hora. A falha pode acontecer porque:
- Os valores de índice nos dados de observação não existem no DataFrame do conjunto de recursos
- Nenhum valor de recurso, com um valor de carimbo de data/hora antes do carimbo de data/hora de observação, existe.
Nesses casos, se o recurso habilitou a materialização offline, talvez seja necessário preencher mais dados do recurso.
O usuário ou a identidade gerenciada não tem permissão RBAC adequada no repositório de recursos
Sintoma:
O trabalho/consulta de recuperação de recurso 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 recursos usar uma identidade gerenciada, atribua a
AzureML Data Scientist
função no repositório de recursos à identidade.Se o problema ocorrer quando
- o usuário executa código em um bloco de anotações do Azure Machine Learning Spark
- esse bloco de notas utiliza a própria identidade do utilizador para aceder ao serviço Azure Machine Learning
atribuir a AzureML Data Scientist
função 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, visite Gerenciar acesso ao recurso de armazenamento de recursos gerenciados.
O usuário ou a identidade gerenciada não tem permissão RBAC adequada para ler do armazenamento de origem ou do armazenamento offline
Sintoma
O trabalho/consulta de recuperação de recurso 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 usar uma identidade gerenciada, atribua a
Storage Blob Data Reader
função no armazenamento de origem e no armazenamento de armazenamento offline à identidade. - Esse erro acontece quando o bloco de anotações usa a identidade do usuário para acessar o serviço Azure Machine Learning para executar a consulta. Para resolver o erro, atribua a
Storage Blob Data Reader
função à identidade do usuário na conta de armazenamento de origem e armazenamento offline.
Storage Blob Data Reader
é o requisito de acesso mínimo recomendado. Os usuários também podem atribuir funções - por exemplo, Storage Blob Data Contributor
ou Storage Blob Data Owner
- com mais privilégios.
O trabalho de treinamento não consegue ler os dados gerados pelo componente de recuperação de recursos integrado
Sintoma
Um trabalho de treinamento falha com a mensagem de erro de 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 obtenção de funcionalidades incorporado tem uma saída, output_data
. Os dados de saída são um recurso de dados uri_folder. Tem sempre esta estrutura de pastas:
<training data folder>
/
├── data/
│ ├── xxxxx.parquet
│ └── xxxxx.parquet
└── feature_retrieval_spec.yaml
Os dados de saída estão sempre em formato parquet. Atualize o script de preparação para ler a partir da subpasta “data” e ler os dados como parquet.
generate_feature_retrieval_spec()
falha devido ao uso da especificação do conjunto de recursos locais
Sintoma:
Este código python gera 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, a mensagem de generate_feature_retrieval_spec()
erro falha:
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 Feature Store. Para corrigir o problema:
- Registrar a especificação do conjunto de recursos local como um conjunto de recursos no repositório de recursos
- Obter o conjunto de funcionalidades registado
- Crie listas de recursos novamente usando apenas recursos de conjuntos de recursos registrados
- Gere a especificação de recuperação de recursos usando a lista de novos recursos
A get_offline_features()
consulta demora muito tempo
Sintoma:
A execução 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:
Verifique estas configurações:
- Verifique se cada conjunto de recursos usado na consulta foi
temporal_join_lookback
definido na especificação do conjunto de recursos. Defina seu valor para 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 bloco de anotações (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 armazenamento offline inválida
- A Identidade de Materialização não tem a permissão RBAC adequada no repositório de recursos
- A Identidade de Materialização não tem permissão RBAC adequada para ler a partir do Armazenamento
- A identidade de materialização não tem permissão RBAC para gravar dados no repositório offline
- O streaming de resultados de execução de tarefas para um bloco de anotações resulta em falha
- Configuração inválida do Spark
Quando o trabalho de materialização do recurso falhar, siga estas etapas para verificar os detalhes da falha do trabalho:
- Navegue para a página da loja de funcionalidades: https://ml.azure.com/featureStore/{your-feature-store-name}.
- Vá para a
feature set
guia, 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
Materialization jobs
guia e, em seguida, selecione o trabalho com falha para abri-lo na visualização de detalhes do trabalho. - Na vista de detalhes do trabalho, por baixo do cartão, reveja o estado do
Properties
trabalho e a mensagem de erro. - Você também pode ir para a
Outputs + logs
guia e, em seguida, encontrar ostdout
arquivo dologs\azureml\driver\stdout
arquivo.
Depois de aplicar uma correção, você pode acionar manualmente um trabalho de materialização de preenchimento para verificar se a correção funciona.
Configuração de armazenamento offline inválida
Sintoma
O trabalho de materialização falha com esta mensagem de erro no logs/azureml/driver/stdout
arquivo:
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 de armazenamento 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 de armazenamento 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 este formato:
/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{storage}/blobServices/default/containers/{container-name}
A Identidade de Materialização não tem 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
na loja de funcionalidades à identidade de materialização (uma identidade gerida atribuída pelo utilizador) da loja de funcionalidades.
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 obter mais informações, visite as Permissões necessárias para o recurso de feature store materialization managed identity
função .
A identidade de materialização não tem permissão RBAC adequada para ler a partir 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 Storage Blob Data Reader
função, no armazenamento de origem, à identidade de materialização (uma identidade gerenciada atribuída pelo usuário) do repositório de recursos.
Storage Blob Data Reader
é o requisito de acesso mínimo recomendado. Você também pode atribuir funções com mais privilégios - por exemplo, Storage Blob Data Contributor
ou Storage Blob Data Owner
.
Para obter mais informações sobre a configuração do RBAC, visite as Permissões necessárias para o recurso de feature store materialization managed identity
função .
A identidade de materialização não tem 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 Storage Blob Data Reader
função no armazenamento de origem à identidade de materialização (uma identidade gerenciada atribuída pelo usuário) do repositório de recursos.
Storage Blob Data Contributor
é o requisito de acesso mínimo recomendado. Você também pode atribuir funções com mais privilégios - por exemplo, Storage Blob Data Owner
.
Para obter mais informações sobre a configuração do RBAC, visite as Permissões necessárias para o recurso de feature store materialization managed identity
função .
Streaming de saída de trabalho para um bloco de anotações resulta em falha
Sintoma:
Ao usar o cliente CRUD do repositório de recursos para transmitir os resultados do trabalho de materialização para um bloco de anotações, usando fs_client.jobs.stream("<job_id>")
, a chamada 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 preenchimento), pode levar alguns segundos para que o trabalho seja inicializado corretamente. Execute o jobs.stream()
comando novamente alguns segundos depois. Este processo 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. Certifique-se de que esses parâmetros usem quantidades de tamanho de memória e um número total de valores principais, que são ambos 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, por exemplo, digite standard_e8s_v3, esta 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)