Condividi tramite


Risoluzione dei problemi relativi all'archivio delle funzionalità gestite

Questo articolo illustra come risolvere i problemi comuni che possono verificarsi con l'archivio delle funzionalità gestite in Azure Machine Learning.

Problemi rilevati durante la creazione e l'aggiornamento di un archivio delle funzionalità

Durante la creazione o l'aggiornamento di un archivio delle funzionalità è possibile che si verifichino questi problemi:

Errore di limitazione delle richieste di Azure Resource Manager

Sintomo

La creazione o l'aggiornamento dell'archivio delle funzionalità non riesce. L'errore potrebbe essere simile al seguente:

{
  "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": "..."
      }
    ]
  }
}

Soluzione

Eseguire l'operazione di creazione/aggiornamento dell'archivio delle funzionalità in un secondo momento. La distribuzione avviene in più passaggi, quindi il secondo tentativo potrebbe non riuscire perché alcune delle risorse esistono già. Eliminare tali risorse e riprendere l'esecuzione del processo.

Problema relativo all'ID ARM dell'identità di materializzazione duplicata

Alcuni aggiornamenti, successivi all'aggiornamento dell'archivio delle funzionalità che abilita la materializzazione per la prima volta, potrebbero causare questo errore.

Sintomo

Quando l'archivio delle funzionalità viene aggiornato tramite l'SDK o l'interfaccia della riga di comando, l'aggiornamento non riesce e viene visualizzato questo messaggio di errore:

Errore:

{
  "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."
  }
}

Soluzione

Il problema riguarda il formato dell'ID ARM di materialization_identity.

Nell'interfaccia utente o nell'SDK di Azure, l'ID ARM dell'identità gestita assegnata dall'utente usa resourcegroups scritto in minuscolo. Vedere questo esempio:

  • (A): /subscriptions/{sub-id}/resourcegroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}

Quando l'archivio delle funzionalità usa l'identità gestita assegnata dall'utente come materialization_identity, il relativo ID ARM viene normalizzato e archiviato con resourceGroups. Vedere questo esempio:

  • (B): /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}

Nella richiesta di aggiornamento è possibile usare un'identità assegnata dall'utente corrispondente all'identità di materializzazione per aggiornare l'archivio delle funzionalità. Anche se si usa l'ID ARM nel formato (A), quando si usa tale identità gestita a tale scopo, l'aggiornamento ha esito negativo e restituisce il messaggio di errore precedente.

Per risolvere il problema, sostituire la stringa resourcegroups con resourceGroups nell'ID ARM dell'identità gestita assegnata dall'utente. Eseguire quindi di nuovo l'aggiornamento dell'archivio delle funzionalità.

Errori di autorizzazione di Controllo degli accessi in base al ruolo

Per creare un archivio funzionalità, l'utente deve avere i Contributor ruoli e User Access Administrator . Funzionerà un ruolo personalizzato che copre lo stesso set di ruoli delle azioni. Anche un super set di questi due ruoli delle azioni funzionerà.

Sintomo

Se l'utente non ha i ruoli necessari, la distribuzione non riesce. La risposta di errore potrebbe essere simile alla seguente:

{
  "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."
  }
}

Soluzione

Concedere i Contributor ruoli e User Access Administrator all'utente nel gruppo di risorse in cui viene creato l'archivio funzionalità. Chiedere quindi all'utente di eseguire di nuovo la distribuzione.

Per altre informazioni, vedere Autorizzazioni necessarie per la risorsa del feature store materialization managed identity ruolo .

Versioni precedenti del pacchetto azure-mgmt-authorization non compatibili con AzureMLOnBehalfOfCredential

Sintomo

Nel repository azureml-examples, quando si usa lo setup_storage_uai script fornito nella cartella featurestore_sample , lo script ha esito negativo e viene visualizzato questo messaggio di errore:

AttributeError: 'AzureMLOnBehalfOfCredential' object has no attribute 'signed_session'

Soluzione:

Controllare la versione del pacchetto azure-mgmt-authorization installato e verificare di usare una versione recente, almeno la 3.0.0 o successiva. Una versione precedente, ad esempio 0.61.0, non funziona con AzureMLOnBehalfOfCredential.

Errori di creazione delle specifiche del set di funzionalità

Schema non valido nella specifica del set di funzionalità

Prima di registrare un set di funzionalità nell'archivio delle funzionalità, definire la relativa specifica in locale ed eseguire <feature_set_spec>.to_spark_dataframe() per convalidarla.

Sintomo

Quando un utente esegue <feature_set_spec>.to_spark_dataframe(), possono verificarsi vari errori di convalida dello schema se lo schema del dataframe del set di funzionalità non è allineato alla definizione della specifica del set di funzionalità.

Ad esempio:

  • Messaggio di errore: azure.ai.ml.exceptions.ValidationException: Schema check errors, timestamp column: timestamp is not in output dataframe
  • Messaggio di errore: Exception: Schema check errors, no index column: accountID in output dataframe
  • Messaggio di errore: ValidationException: Schema check errors, feature column: transaction_7d_count has data type: ColumnType.long, expected: ColumnType.string

Soluzione

Controllare l'errore di convalida dello schema e aggiornare di conseguenza la definizione della specifica del set di funzionalità sia per i nomi che per i tipi di colonna. Ad esempio:

  • aggiornare la source.timestamp_column.name proprietà per definire correttamente i nomi delle colonne timestamp
  • aggiornare la index_columns proprietà per definire correttamente le colonne dell'indice
  • aggiornare la features proprietà per definire correttamente i nomi e i tipi di colonna delle funzionalità
  • se i dati dell'origine delle funzionalità sono di tipo csv, verificare che i file CSV vengano generati con intestazioni di colonna

Quindi eseguire di nuovo <feature_set_spec>.to_spark_dataframe() per verificare se la convalida viene superata.

Invece di digitare manualmente i valori, se l'SDK definisce la specifica del set di funzionalità, l'opzione infer_schema è consigliata anche come metodo preferito per riempire automaticamente .features Le proprietà timestamp_column e index columns non possono essere compilate automaticamente.

Per altre informazioni, vedere la risorsa schema spec set di funzionalità.

Classe di trasformazione non trovata

Sintomo

Quando un utente esegue <feature_set_spec>.to_spark_dataframe(), viene restituito questo errore: AttributeError: module '<...>' has no attribute '<...>'

Ad esempio:

  • AttributeError: module '7780d27aa8364270b6b61fed2a43b749.transaction_transform' has no attribute 'TransactionFeatureTransformer1'

Soluzione

La classe di trasformazione delle funzionalità dovrebbe essere definita in un file Python nella radice della cartella del codice. La cartella del codice può contenere altri file o sottocartelle.

Impostare il valore della proprietà feature_transformation_code.transformation_class su <py file name of the transformation class>.<transformation class name>.

Ad esempio, se la cartella del codice è simile alla seguente:

code/
└── my_transformation_class.py

e il file di my_transformation_class.py definisce la MyFeatureTransformer classe, set

feature_transformation_code.transformation_class essere my_transformation_class.MyFeatureTransformer

FileNotFoundError nella cartella del codice

Sintomo

Questo errore può verificarsi se la specifica yaML del set di funzionalità viene creata manualmente e l'SDK non genera il set di funzionalità. Il comando

runs <feature_set_spec>.to_spark_dataframe()

restituisce l'errore

FileNotFoundError: [Errno 2] No such file or directory: ....

Soluzione

Controllare la cartella del codice. Deve essere una sottocartella della cartella della specifica del set di funzionalità. Nella specifica del set di funzionalità impostare feature_transformation_code.path come percorso relativo della cartella della specifica del set di funzionalità. Ad esempio:

feature set spec folder/
├── code/
│ ├── my_transformer.py
│ └── my_orther_folder
└── FeatureSetSpec.yaml

In questo esempio la proprietà feature_transformation_code.path in YAML deve essere ./code.

Nota

Quando si usa la funzione create_feature_set_spec in azureml-featurestore per creare un oggetto Python FeatureSetSpec, può accettare qualsiasi cartella locale come feature_transformation_code.path valore. Quando l'oggetto FeatureSetSpec viene sottoposto a dump per formare un yaml di specifiche del set di funzionalità in una cartella di destinazione, il percorso del codice viene copiato nella cartella di destinazione e la feature_transformation_code.path proprietà viene aggiornata nello yaml della specifica.

Errori delle operazioni CRUD sul set di funzionalità

Errore GET sul set di funzionalità a causa di FeatureStoreEntity non valido

Sintomo

Quando si usa il client CRUD dell'archivio funzionalità per ottenere un set di funzionalità, fs_client.feature_sets.get(name, version)ad esempio "" è possibile che venga visualizzato questo errore:


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

Questo errore può verificarsi anche nel processo di materializzazione di FeatureStore, in cui il processo non riesce e viene restituita la stessa traccia di errore.

Soluzione

Avviare una sessione del notebook con la nuova versione di SDK

  • Se usa azure-ai-ml, eseguire l'aggiornamento a azure-ai-ml==1.8.0.
  • Se usa l'SDK del piano dati dell'archivio delle funzionalità, eseguire l'aggiornamento a azureml-featurestore== 0.1.0b2.

Nella sessione del notebook aggiornare l'entità archivio delle funzionalità per impostarne la proprietà stage, come illustrato in questo esempio:

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 si definisce FeatureStoreEntity, impostare le proprietà in modo che corrispondano alle proprietà usate al momento della creazione. L'unica differenza consiste nell'aggiungere la proprietà stage.

Dopo che la chiamata a begin_create_or_update() è stata completata correttamente, la chiamata successiva a feature_sets.get() e il successivo processo di materializzazione avranno esito positivo.

Errori relativi ai processi e alle query di recupero delle funzionalità

Quando un processo di recupero delle funzionalità non riesce, controllare i dettagli dell'errore. Passare alla pagina Dettagli esecuzione, selezionare la scheda Output e log ed esaminare il file logs/azureml/driver/stdout.

Se l'utente esegue la query get_offline_feature() nel notebook, l'errore viene visualizzato direttamente negli output delle celle.

Errori di risoluzione delle specifiche di recupero delle funzionalità

Sintomo

La query o il processo di recupero delle funzionalità mostra gli errori seguenti:

  • Funzionalità non valida
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
  • URI dell'archivio delle funzionalità non valido:
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"
  • Set di funzionalità non valido:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."

Soluzione

Controllare il contenuto del file feature_retrieval_spec.yaml usato dal processo. Verificare che tutti i nomi degli archivi di funzionalità

  • URI
  • nome/versione del set di funzionalità
  • funzionalità

sono validi e che esistono nell'archivio funzionalità.

Per selezionare le funzionalità da un archivio funzionalità e generare il file YAML della specifica di funzionalità, è consigliabile usare la funzione di utilità.

In questo frammento di codice si usa la funzione di utilità generate_feature_retrieval_spec.

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)

File feature_retrieval_spec.yaml non trovato quando si usa un modello come input per il processo di recupero delle funzionalità

Sintomo

Quando si usa un modello registrato come input per il processo di recupero delle funzionalità, il processo non riesce e viene restituito l'errore seguente:

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

Soluzione:

Quando si specifica un modello come input per il passaggio di recupero delle funzionalità, il modello si aspetta di trovare il file con estensione YAML delle specifiche di recupero nella cartella dell'artefatto del modello. Il processo non riesce se il file non è presente.

Per risolvere il problema, creare un pacchetto del feature_retrieval_spec.yaml file nella cartella radice della cartella dell'artefatto del modello prima di registrare il modello.

I dati delle osservazioni non vengono uniti ai valori delle funzionalità

Sintomo

Dopo che gli utenti hanno eseguito la query o il processo di recupero delle funzionalità, i dati di output non ricevono i valori delle funzionalità. Ad esempio, un utente esegue il processo di recupero delle funzionalità per recuperare le transaction_amount_3d_avg funzionalità e transaction_amount_7d_avg , con questi risultati:

transactionID accountID timestamp is_fraud transaction_amount_3d_avg transaction_amount_7d_avg
83870774-7A98-43B... A1055520444618950 28-02-2023 04:34:27 0 Null Null
25144265-F68B-4FD... A1055520444618950 28-02-2023 10:44:30 0 Null Null
8899ED8C-B295-43F... A1055520444812380 06-03-2023 00:36:30 0 Null Null

Soluzione

Il recupero delle funzionalità esegue una query di join temporizzato. Se il risultato del join è vuoto, provare queste possibili soluzioni:

  • Estendere l'intervallo temporal_join_lookback nella definizione della specifica del set di funzionalità o rimuoverlo temporaneamente. In questo modo, il join temporizzato può cercare in modo approfondito o all'infinito tra i timestamp passati, prima dell'evento di osservazione, per trovare i valori delle funzionalità.
  • Se anche source.source_delay è impostato nella definizione della specifica del set delle funzionalità, assicurarsi che temporal_join_lookback > source.source_delay.

Se nessuna di queste soluzioni funziona, ottenere il set di funzionalità dall'archivio delle funzionalità ed eseguire <feature_set>.to_spark_dataframe() per esaminare manualmente le colonne e i timestamp dell'indice delle funzionalità. L'errore potrebbe verificarsi per i seguenti motivi:

  • I valori di indice nei dati di osservazione non esistono nel dataframe del set di funzionalità.
  • Non esiste alcun valore di funzionalità, con un valore di timestamp prima del timestamp di osservazione.

In questi casi, se la funzionalità ha abilitato la materializzazione offline, potrebbe essere necessario eseguire il back-fill di altri dati sulle funzionalità.

Identità utente o gestita senza autorizzazioni di Controllo degli accessi in base al ruolo appropriate per l'archivio delle funzionalità

Sintomo:

Il processo o la query di recupero delle funzionalità non riesce e viene visualizzato con il messaggio di errore seguente nel file 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

Soluzione:

  1. Se il processo di recupero delle funzionalità usa un'identità gestita, assegnare all'identità il ruolo AzureML Data Scientist nell'archivio delle funzionalità.

  2. Se il problema si verifica quando:

  • L'utente esegue il codice in un notebook Spark di Azure Machine Learning.
  • Tale notebook usa l'identità personale dell'utente per accedere al servizio Azure Machine Learning.

Assegnare il ruolo AzureML Data Scientist nell'archivio delle funzionalità all'identità Microsoft Entra dell'utente.

Azure Machine Learning Data Scientist è un ruolo consigliato. L'utente può creare il proprio ruolo personalizzato con le azioni seguenti:

  • Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
  • Microsoft.MachineLearningServices/workspaces/featuresets/read
  • Microsoft.MachineLearningServices/workspaces/read

Per altre informazioni sulla configurazione del controllo degli accessi in base al ruolo, vedere Gestire l'accesso alla risorsa archivio delle funzionalità gestite.

Identità utente o gestita senza autorizzazioni di Controllo degli accessi in base al ruolo appropriate per leggere dalla risorsa di archiviazione di origine o dall'archivio offline

Sintomo

Il processo o la query di recupero delle funzionalità non riesce e viene visualizzato il messaggio di errore seguente nel file 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)

Soluzione:

  • Se il processo di recupero delle funzionalità usa un'identità gestita, assegnare il Storage Blob Data Reader ruolo sia nell'archiviazione di origine che nell'archiviazione offline all'identità.
  • Questo errore si verifica quando il notebook usa l'identità dell'utente per accedere al servizio Azure Machine Learning ed eseguire la query. Per risolvere l'errore, assegnare il ruolo Storage Blob Data Reader all'identità dell'utente nell'account di archiviazione di origine e nell'account di archiviazione dell'archivio offline.

Storage Blob Data Reader è il requisito di accesso minimo consigliato. Gli utenti possono anche assegnare ruoli, ad esempio Storage Blob Data Contributor o Storage Blob Data Owner, con più privilegi.

Il processo di training non riesce a leggere i dati generati dal componente di recupero delle funzionalità predefinito

Sintomo

Un processo di training non riesce e viene visualizzato il messaggio di errore che indica che i dati di training non esistono, il formato non è corretto o è presente un errore del parser:

FileNotFoundError: [Errno 2] No such file or directory
  • Il formato non è corretto.
ParserError:

Soluzione

Il componente di recupero delle funzionalità predefinito ha un output, output_data. I dati di output sono un asset di dati uri_folder. La struttura della cartelle è sempre la seguente:

<training data folder>/
├── data/
│ ├── xxxxx.parquet
│ └── xxxxx.parquet
└── feature_retrieval_spec.yaml

I dati di output sono sempre in formato Parquet. Aggiornare lo script di training affinché legga nella sottocartella "dati" e legga i dati come file PARQUET.

generate_feature_retrieval_spec() non riesce a causa dell'uso della specifica del set di funzionalità locale

Sintomo:

Questo codice Python consente di generare una specifica di recupero delle funzionalità in un determinato elenco di funzionalità:

featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)

Se l'elenco delle funzionalità contiene funzionalità definite da una specifica del set di funzionalità locale, generate_feature_retrieval_spec() non riesce e viene visualizzato questo messaggio di errore:

AttributeError: 'FeatureSetSpec' object has no attribute 'id'

Soluzione:

Una specifica di recupero delle funzionalità può essere generata solo usando set di funzionalità registrati nell'archivio delle funzionalità. Per risolvere il problema:

  • Registrare la specifica del set di funzionalità locale come set di funzionalità nell'archivio delle funzionalità
  • Ottenere il set di funzionalità registrato
  • Creare di nuovo elenchi di funzionalità usando solo le funzionalità dei set di funzionalità registrati
  • Generare la specifica di recupero delle funzionalità usando il nuovo elenco delle funzionalità

La query get_offline_features() richiede molto tempo

Sintomo:

L'esecuzione di get_offline_features per generare dati di training, usando alcune funzionalità dall'archivio delle funzionalità, richiede troppo tempo.

Soluzioni:

Controllare queste configurazioni:

  • Verificare che ogni set di funzionalità usato nella query sia temporal_join_lookback impostato nella specifica del set di funzionalità. Impostare questa configurazione su un valore inferiore.
  • Se le dimensioni e l'intervallo di timestamp nel dataframe di osservazione sono di grandi dimensioni, configurare la sessione del notebook (o il processo) in modo da aumentare le dimensioni (memoria e core) del driver e dell'executor. Aumentare inoltre il numero di executor.

Errori del processo di materializzazione delle funzionalità

Quando un processo di materializzazione delle funzionalità non riesce, seguire questa procedura per controllare i dettagli dell'errore del processo:

  1. Passare alla pagina dell'archivio funzionalità: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Aprire la scheda feature set, selezionare il set di funzionalità pertinente e passare alla pagina dei dettagli del set di funzionalità.
  3. Nella pagina dei dettagli del set di funzionalità selezionare la scheda Materialization jobs e quindi selezionare il processo non riuscito per aprirlo nella visualizzazione dei dettagli del processo.
  4. Nella visualizzazione dei dettagli del processo, nella scheda Properties, esaminare lo stato del processo e il messaggio di errore.
  5. È anche possibile passare alla scheda Outputs + logs, quindi individuare il file stdout dal file logs\azureml\driver\stdout .

Dopo aver applicato una correzione, è possibile attivare manualmente un processo di materializzazione del riempimento per verificare che la correzione funzioni.

Configurazione dell'archivio offline non valida

Sintomo

Il processo di materializzazione non riesce e viene visualizzato il messaggio di errore seguente nel file 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

Soluzione

Usare l'SDK per controllare la destinazione di archiviazione offline definita nell'archivio delle funzionalità:


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

È anche possibile controllare la destinazione di archiviazione offline nella pagina di panoramica dell'interfaccia utente dell'archivio delle funzionalità. Verificare che esistano sia la risorsa di archiviazione che il contenitore e che il formato della destinazione sia il seguente:

/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{storage}/blobServices/default/containers/{container-name}

Identità di materializzazione senza autorizzazioni di Controllo degli accessi in base al ruolo appropriate nell'archivio delle funzionalità

Sintomo:

Il processo di materializzazione non riesce e viene visualizzato il messaggio di errore seguente nel file 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

Soluzione:

Assegnare il ruolo Azure Machine Learning Data Scientist nell'archivio funzionalità all'identità di materializzazione (un'identità gestita assegnata dall'utente) dell'archivio funzionalità.

Azure Machine Learning Data Scientist è un ruolo consigliato. È possibile creare il proprio ruolo personalizzato con queste azioni:

  • Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
  • Microsoft.MachineLearningServices/workspaces/featuresets/read
  • Microsoft.MachineLearningServices/workspaces/read

Per altre informazioni, vedere Autorizzazioni necessarie per la risorsa del feature store materialization managed identity ruolo .

Identità di materializzazione senza autorizzazioni di Controllo degli accessi in base al ruolo appropriate per leggere dalla risorsa di archiviazione

Sintomo

Il processo di materializzazione non riesce e viene visualizzato il messaggio di errore seguente nel file 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)

Soluzione:

Assegnare il ruolo Storage Blob Data Reader nella risorsa di archiviazione di origine all'identità di materializzazione (un'identità gestita assegnata dall'utente) dell'archivio delle funzionalità.

Storage Blob Data Reader è il requisito di accesso minimo consigliato. È anche possibile assegnare ruoli con più privilegi, Storage Blob Data Contributor ad esempio o Storage Blob Data Owner.

Per altre informazioni sulla configurazione del controllo degli accessi in base al ruolo, vedere Autorizzazioni necessarie per la risorsa del feature store materialization managed identity ruolo .

Identità di materializzazione senza autorizzazioni di Controllo degli accessi in base al ruolo per scrivere dati nell'archivio offline

Sintomo

Il processo di materializzazione non riesce e viene visualizzato il messaggio di errore seguente nel file 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

Soluzione

Assegnare il Storage Blob Data Reader ruolo nell'archiviazione di origine all'identità di materializzazione (un'identità gestita assegnata dall'utente) dell'archivio funzionalità.

Storage Blob Data Contributor è il requisito di accesso minimo consigliato. È anche possibile assegnare ruoli con più privilegi, Storage Blob Data Ownerad esempio .

Per altre informazioni sulla configurazione del controllo degli accessi in base al ruolo, vedere Autorizzazioni necessarie per la risorsa del feature store materialization managed identity ruolo .

Errore durante la trasmissione dei risultati dell'esecuzione del processo a un notebook

Sintomo:

Quando si usa il client CRUD dell'archivio funzionalità per trasmettere i risultati del processo di materializzazione a un notebook, usando fs_client.jobs.stream("<job_id>"), la chiamata DELL'SDK ha esito negativo con un errore

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.

Soluzione:

Quando viene creato il processo di materializzazione (ad esempio, da una chiamata di back-fill), l'inizializzazione corretta del processo potrebbe richiedere alcuni secondi. Eseguire di nuovo il comando jobs.stream() dopo qualche secondo. Questo dovrebbe risolvere il problema.

Configurazione di Spark non valida

Sintomo:

Un processo di materializzazione non riesce e viene visualizzato il messaggio di errore seguente:

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]"

}

Soluzione:

Aggiornare il parametro materialization_settings.spark_configuration{} del set di funzionalità. Assicurarsi che questi parametri usino sia gli importi delle dimensioni della memoria che un numero totale di valori principali, entrambi minori di quelli definiti da , in base a quanto definito da materialization_settings.resource:

spark.driver.cores spark.driver.memory spark.executor.cores spark.executor.memory

Ad esempio, per il tipo di istanza standard_e8s_v3, questa configurazione spark è una delle opzioni valide:


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)

Passaggi successivi