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
- Problema relativo all'ID ARM dell'identità di materializzazione duplicata
- Errori di autorizzazione di Controllo degli accessi in base al ruolo
- Versioni precedenti del pacchetto
azure-mgmt-authorization
non compatibili conAzureMLOnBehalfOfCredential
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à
- Classe di trasformazione non trovata
- FileNotFoundError nella cartella del codice
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à
- Errori di risoluzione delle specifiche di recupero delle funzionalità
- File feature_retrieval_spec.yaml non trovato quando si usa un modello come input per il processo di recupero delle funzionalità
- I dati delle osservazioni non vengono uniti ai valori delle funzionalità
- Identità utente o gestita senza autorizzazioni di Controllo degli accessi in base al ruolo appropriate per l'archivio delle funzionalità
- 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
- Il processo di training non riesce a leggere i dati generati dal componente di recupero delle funzionalità predefinito
generate_feature_retrieval_spec()
non riesce a causa dell'uso della specifica del set di funzionalità locale- La query
get_offline_features()
richiede molto tempo
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 chetemporal_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:
Se il processo di recupero delle funzionalità usa un'identità gestita, assegnare all'identità il ruolo
AzureML Data Scientist
nell'archivio delle funzionalità.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à
- Configurazione dell'archivio offline non valida
- Identità di materializzazione senza autorizzazioni di Controllo degli accessi in base al ruolo appropriate nell'archivio delle funzionalità
- Identità di materializzazione senza autorizzazioni di Controllo degli accessi in base al ruolo appropriate per leggere dalla risorsa di archiviazione
- Identità di materializzazione senza autorizzazioni di Controllo degli accessi in base al ruolo per scrivere dati nell'archivio offline
- Errore durante la trasmissione dei risultati dell'esecuzione del processo a un notebook
- Configurazione di Spark non valida
Quando un processo di materializzazione delle funzionalità non riesce, seguire questa procedura per controllare i dettagli dell'errore del processo:
- Passare alla pagina dell'archivio funzionalità: https://ml.azure.com/featureStore/{your-feature-store-name}.
- Aprire la scheda
feature set
, selezionare il set di funzionalità pertinente e passare alla pagina dei dettagli del set di funzionalità. - 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. - Nella visualizzazione dei dettagli del processo, nella scheda
Properties
, esaminare lo stato del processo e il messaggio di errore. - È anche possibile passare alla scheda
Outputs + logs
, quindi individuare il filestdout
dal filelogs\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 Owner
ad 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)