Partilhar via


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

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 AzureMLOnBehalfOfCredentialo .

Erros de criação de especificações do conjunto de recursos

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

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 que temporal_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:

  1. 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.

  2. 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

Quando o trabalho de materialização do recurso falhar, siga estas etapas para verificar os detalhes da falha do trabalho:

  1. Navegue para a página da loja de funcionalidades: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Vá para a feature set guia, selecione o conjunto de recursos relevante e navegue até a página Detalhes do conjunto de recursos.
  3. 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.
  4. Na vista de detalhes do trabalho, por baixo do cartão, reveja o estado do Properties trabalho e a mensagem de erro.
  5. Você também pode ir para a Outputs + logs guia e, em seguida, encontrar o stdout arquivo do logs\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)

Próximos passos