Compartilhar via


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

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

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

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

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

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

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

  1. Navegue até a página do repositório de recursos: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Vá para a guia feature set, 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 guia Materialization jobs e selecione o trabalho com falha para a exibição de detalhes do trabalho.
  4. Na exibição de detalhes do trabalho, no cartão Properties, revise o status do trabalho e a mensagem de erro.
  5. Você também pode ir para a guia Outputs + logs e encontrar o arquivo stdout do arquivo logs\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)

Próximas etapas