Résolution des problèmes magasin de fonctionnalités géré
Dans cet article, découvrez comment résoudre les problèmes courants que vous pouvez rencontrer avec le magasin de fonctionnalités géré dans Azure Machine Learning.
Problèmes rencontrés lors de la création et de la mise à jour d’un magasin de fonctionnalités
Vous pouvez rencontrer ces problèmes lorsque vous créez ou mettez à jour un magasin de fonctionnalités :
- Erreur de limitation ARM
- Problème d’ID ARM d’identité de matérialisation en double
- Erreurs d’autorisation RBAC
- Les versions antérieures du package
azure-mgmt-authorization
ne fonctionnent pas avecAzureMLOnBehalfOfCredential
Erreur de limitation ARM
Symptôme
Échec de la création ou de la mise à jour du magasin de fonctionnalités. L’erreur peut ressembler à ceci :
{
"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": "..."
}
]
}
}
Solution
Exécutez l’opération de création/mise à jour du magasin de fonctionnalités ultérieurement. Le déploiement se déroulant en plusieurs étapes, la deuxième tentative peut échouer dans la mesure où certaines ressources existent déjà. Supprimez ces ressources et reprenez le travail.
Problème d’ID ARM d’identité de matérialisation en double
Une fois le magasin de fonctionnalités mis à jour pour activer la matérialisation pour la première fois, certaines mises à jour ultérieures sur le magasin de fonctionnalités peuvent entraîner cette erreur.
Symptôme
Lorsque le magasin de fonctionnalités est mis à jour à l’aide du Kit de développement logiciel (SDK)/de l’interface CLI, la mise à jour échoue avec ce message d’erreur :
Erreur :
{
"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."
}
}
Solution
Le problème implique l’identifiant ARM du format d’identifiant ARM materialization_identity
.
À partir de l’interface utilisateur ou du Kit de développement logiciel (SDK) Azure, l’identifiant ARM de l’identité managée affectée par l’utilisateur utilise la minuscule resourcegroups
. Consultez l’exemple suivant :
- (A) : /subscriptions/{sub-id}/resourcegroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
Lorsque le magasin de fonctionnalités utilise l’identité managée affectée par l’utilisateur comme materialization_identity, son identifiant ARM est normalisé et stocké avec resourceGroups
. Consultez l’exemple suivant :
- (B) : /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
Dans la requête de mise à jour, vous pouvez utiliser une identité affectée par l’utilisateur qui correspond à l’identité de matérialisation pour mettre à jour le magasin de fonctionnalités. Lorsque vous utilisez l’ID ARM au format (A), lors de l’utilisation de cette identité managée à cet effet, la mise à jour échoue et retourne le message d’erreur précédent.
Pour résoudre le problème, remplacez la chaîne resourcegroups
par resourceGroups
l’identifiant ARM de l’identité managée affectée par l’utilisateur. Ensuite, réexécutez la mise à jour du magasin de fonctionnalités.
Erreurs d’autorisation RBAC
Pour créer un magasin de fonctionnalités, l’utilisateur a besoin des rôles Contributor
et User Access Administrator
. Un rôle personnalisé qui couvre le même ensemble de rôles des actions est valable. Un super ensemble regroupant ces deux rôles des actions est également valable.
Symptôme
Si l’utilisateur ne dispose pas des rôles requis, le déploiement échoue. La réponse d’erreur peut ressembler à ceci :
{
"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."
}
}
Solution
Octroyez les rôles Contributor
et User Access Administrator
à l’utilisateur sur le groupe de ressources où le magasin de fonctionnalités est créé. Ensuite, demandez à l’utilisateur d’exécuter à nouveau le déploiement.
Pour plus d’informations, consultez la ressource Autorisations requises pour le rôle feature store materialization managed identity
.
Les versions antérieures du package azure-mgmt-authorization ne fonctionnent pas avec AzureMLOnBehalfOfCredential
Symptôme
Dans le référentiel azureml-examples, lorsque vous utilisez le script setup_storage_uai
fourni dans le dossier featurestore_sample, le script échoue avec ce message d’erreur :
AttributeError: 'AzureMLOnBehalfOfCredential' object has no attribute 'signed_session'
Solution :
Vérifiez la version du package installé azure-mgmt-authorization
et vérifiez que vous utilisez une version récente, au moins 3.0.0 ou ultérieure. Une version plus ancienne, par exemple 0.61.0, ne fonctionne pas avec AzureMLOnBehalfOfCredential
.
Erreurs de création de spécifications de l’ensemble de fonctionnalités
- Schéma non valide dans la spécification de l’ensemble de fonctionnalités
- Impossible de trouver la classe de transformation
- FileNotFoundError on code folder
Schéma non valide dans la spécification de l’ensemble de fonctionnalités
Avant d’inscrire un ensemble de fonctionnalités dans le magasin de fonctionnalités, définissez la spécification de l’ensemble de fonctionnalités localement et exécutez <feature_set_spec>.to_spark_dataframe()
pour la valider.
Symptôme
Lorsqu’un utilisateur exécute <feature_set_spec>.to_spark_dataframe()
, plusieurs échecs de validation de schéma peuvent se produire si le schéma du DataFrame du jeu de fonctionnalités n’est pas aligné sur la définition de spécification de l’ensemble de fonctionnalités.
Par exemple :
- Message d’erreur :
azure.ai.ml.exceptions.ValidationException: Schema check errors, timestamp column: timestamp is not in output dataframe
- Message d’erreur :
Exception: Schema check errors, no index column: accountID in output dataframe
- Message d’erreur :
ValidationException: Schema check errors, feature column: transaction_7d_count has data type: ColumnType.long, expected: ColumnType.string
Solution
Vérifiez l’erreur d’échec de validation du schéma et mettez à jour la définition de spécification de l’ensemble de fonctionnalités en conséquence, pour les noms et types de colonnes. Par exemple :
- mettre à jour la propriété
source.timestamp_column.name
pour définir correctement les noms des colonnes de timestamp - mettre à jour la propriété
index_columns
pour définir correctement les colonnes d’index - mettre à jour la propriété
features
pour définir correctement les noms et types de colonnes de fonctionnalités - si les données de la source de fonctionnalités sont de type csv, vérifier que les fichiers CSV sont générés avec des en-têtes de colonne
Ensuite, réexécutez <feature_set_spec>.to_spark_dataframe()
pour vérifier si la validation a réussi.
Au lieu de taper manuellement les valeurs, si le Kit de développement logiciel (SDK) définit la spécification de l’ensemble de fonctionnalités, l’option infer_schema
est également recommandée comme moyen préféré de remplir automatiquement features
. timestamp_column
et index columns
ne peuvent pas être remplis automatiquement.
Pour plus d’informations, visitez la ressource Schéma de spécification de l’ensemble de fonctionnalités.
Impossible de trouver la classe de transformation
Symptôme
Lorsqu’un utilisateur exécute <feature_set_spec>.to_spark_dataframe()
, il retourne cette erreur : AttributeError: module '<...>' has no attribute '<...>'
Par exemple :
AttributeError: module '7780d27aa8364270b6b61fed2a43b749.transaction_transform' has no attribute 'TransactionFeatureTransformer1'
Solution
La classe de transformation de fonctionnalité devrait avoir sa définition dans un fichier Python sous la racine du dossier de code. Le dossier de code peut avoir d’autres fichiers ou sous-dossiers.
Affectez à la propriété feature_transformation_code.transformation_class
la valeur <py file name of the transformation class>.<transformation class name>
.
Par exemple, si le dossier de code ressemble à ceci
code
/
└── my_transformation_class.py
et le fichier my_transformation_class.py définit la classe MyFeatureTransformer
, définissez
feature_transformation_code.transformation_class
sur my_transformation_class.MyFeatureTransformer
FileNotFoundError sur le dossier de code
Symptôme
Cette erreur peut se produire si le fichier YAML de spécification de l’ensemble de fonctionnalités est créé manuellement et que le SDK ne génère pas l’ensemble de fonctionnalités. La commande
runs <feature_set_spec>.to_spark_dataframe()
retourne une erreur
FileNotFoundError: [Errno 2] No such file or directory: ....
Solution
Vérifiez le dossier de code. Il doit s’agir d’un sous-dossier sous le dossier de spécifications de l’ensemble de fonctionnalités. Dans la spécification de l’ensemble de fonctionnalités, définissez feature_transformation_code.path
comme chemin d’accès relatif au dossier de spécifications de l’ensemble de fonctionnalités. Par exemple :
feature set spec folder
/
├── code/
│ ├── my_transformer.py
│ └── my_orther_folder
└── FeatureSetSpec.yaml
Dans cet exemple, la propriété feature_transformation_code.path
dans YAML doit être ./code
Remarque
Lorsque vous utilisez la fonction create_feature_set_spec dans azureml-featurestore
pour créer un objet Python FeatureSetSpec, elle peut prendre n’importe quel dossier local comme valeur feature_transformation_code.path
. Lorsque l’objet FeatureSetSpec est vidé pour former un fichier YAML de spécification d’ensemble de fonctionnalités dans un dossier cible, le chemin du code est copié dans le dossier cible et la propriété feature_transformation_code.path
est mise à jour dans le fichier YAML de spécification.
Erreurs CRUD d’un ensemble de fonctionnalités
L’ensemble de fonctionnalités GET échoue en raison d’une entité FeatureStoreEntity non valide
Symptôme
Lorsque vous utilisez le client CRUD du magasin de fonctionnalités pour obtenir (GET) un ensemble de fonctionnalités (par exemple, fs_client.feature_sets.get(name, version)
"`), vous pouvez recevoir cette erreur :
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
Cette erreur peut également se produire dans le travail de matérialisation FeatureStore, où le travail échoue avec la même trace d’erreur.
Solution
Démarrer une session de notebook avec la nouvelle version de SDKS
- S’il utilise azure-ai-ml, mettez à jour vers
azure-ai-ml==1.8.0
. - S’il utilise le Kit de développement logiciel (SDK) du plan de données du magasin de fonctionnalités, mettez-le à jour vers
azureml-featurestore== 0.1.0b2
.
Dans la session du notebook, mettez à jour l’entité de magasin de fonctionnalités pour définir sa propriété stage
, comme illustré dans cet exemple :
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())
Lorsque vous définissez FeatureStoreEntity, définissez les propriétés pour qu’elles correspondent aux propriétés utilisées lors de sa création. La seule différence consiste à ajouter la propriété stage
.
Une fois l’appel begin_create_or_update()
correctement retourné, l’appel feature_sets.get()
suivant et le travail de matérialisation suivant doivent réussir.
Erreurs de requête et de travail de récupération de fonctionnalités
- Erreurs de résolution des spécifications de récupération des fonctionnalités
- Fichier feature_retrieval_spec.yaml introuvable lors de l’utilisation d’un modèle comme entrée dans le travail de récupération de fonctionnalité
- Les données d’observation ne sont pas jointes avec des valeurs de fonctionnalité
- L’utilisateur ou l’identité managée ne dispose pas de l’autorisation RBAC appropriée sur le magasin de fonctionnalités
- L’utilisateur ou l’identité managée ne dispose pas de l’autorisation RBAC appropriée pour lire à partir du stockage source ou du magasin hors connexion
- Le travail de formation ne parvient pas à lire les données générées par le composant de récupération de fonctionnalité intégré
generate_feature_retrieval_spec()
échoue en raison de l’utilisation de la spécification de l’ensemble de fonctionnalités local- La requête
get_offline_features()
prend beaucoup de temps
Lorsqu’un travail de récupération de fonctionnalité échoue, vérifiez les détails de l’erreur. Accédez à la page détails de l’exécution, sélectionnez l’ongletSorties + journaux, puis examinez le fichier logs/azureml/driver/stdout .
Si l’utilisateur exécute la requête get_offline_feature()
dans le notebook, la cellule affiche directement l’erreur.
Erreurs de résolution des spécifications de récupération des fonctionnalités
Symptôme
La requête/travail de récupération des fonctionnalités affiche les erreurs suivantes :
- Fonctionnalité non valide
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
- URI du magasin de fonctionnalités non valide :
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"
- Ensemble de fonctionnalités non valide :
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."
Solution
Vérifiez le contenu dans le feature_retrieval_spec.yaml
que le travail utilise. Vérifiez que tous les noms de magasin de fonctionnalités
- URI
- nom/version de l’ensemble de fonctionnalités
- feature
sont valides et qu’ils existent dans le magasin de fonctionnalités.
Pour sélectionner des fonctionnalités dans un magasin de fonctionnalités et générer le fichier YAML de spécifications de la récupération de fonctionnalités, l’utilisation de la fonction utilitaire est recommandée.
Cet extrait de code utilise la fonction utilitaire 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)
Fichier feature_retrieval_spec.yaml introuvable lors de l’utilisation d’un modèle comme entrée dans le travail de récupération de fonctionnalité
Symptôme
Lorsque vous utilisez un modèle inscrit comme entrée de travail de récupération de fonctionnalités, le travail échoue avec cette erreur :
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
Solution :
Lorsque vous fournissez un modèle comme entrée à l’étape de récupération des fonctionnalités, le modèle s’attend à trouver le fichier YAML de spécification de récupération sous le dossier de l’artefact du modèle. Le travail échoue si ce fichier est manquant.
Pour corriger le problème, empaquetez le fichier feature_retrieval_spec.yaml
dans le dossier racine du dossier d’artefacts du modèle avant d’inscrire le modèle.
Les données d’observation ne sont jointes à aucune valeur de fonctionnalité
Symptôme
Une fois que les utilisateurs exécutent la requête/travail de récupération des fonctionnalités, les données de sortie n’obtiennent aucune valeur de fonctionnalité. Par exemple, un utilisateur exécute la tâche de récupération de fonctionnalités pour récupérer les fonctionnalités transaction_amount_3d_avg
et transaction_amount_7d_avg
, avec les résultats suivants :
transactionID | accountID | timestamp | is_fraud | transaction_amount_3d_avg | transaction_amount_7d_avg |
---|---|---|---|---|---|
83870774-7A98-43B... | A1055520444618950 | 2023-02-28 04:34:27 | 0 | null | null |
25144265-F68B-4FD... | A1055520444618950 | 2023-02-28 10:44:30 | 0 | null | null |
8899ED8C-B295-43F... | A1055520444812380 | 2023-03-06 00:36:30 | 0 | null | null |
Solution
La récupération des fonctionnalités effectue une requête de jointure à un point dans le temps. Si le résultat de jointure est vide, essayez ces solutions potentielles :
- Étendez la plage
temporal_join_lookback
dans la définition de spécification de l’ensemble de fonctionnalités, ou supprimez-la temporairement. Cela permet à la jointure à un point dans le temps de revenir en arrière (ou infiniment) dans le passé, avant l’horodatage de l’événement d’observation, de rechercher les valeurs des caractéristiques. - Si
source.source_delay
est également défini dans la définition de spécification de l’ensemble de fonctionnalités, assurez-vous quetemporal_join_lookback > source.source_delay
.
Si aucune de ces solutions ne fonctionne, obtenez l’ensemble de fonctionnalités à partir du magasin de fonctionnalités et exécutez <feature_set>.to_spark_dataframe()
pour inspecter manuellement les colonnes et timestamps de l’index de fonctionnalité. L’échec peut se produire car :
- Les valeurs d’index dans les données d’observation n’existent pas dans le dataframe de l’ensemble de fonctionnalités
- aucune valeur de fonctionnalité, avec une valeur de timestamp avant le timestamp d’observation, n’existe.
Dans ces cas, si la fonctionnalité a activé la matérialisation hors connexion, vous devrez peut-être renvoyer davantage de données de fonctionnalités.
L’identité utilisateur ou managée n’a pas l’autorisation RBAC appropriée sur le magasin de fonctionnalités
Symptôme :
Le travail/requête de récupération des fonctionnalités échoue avec ce message d’erreur dans le fichier 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
Solution :
Si le travail de récupération de fonctionnalités utilise une identité managée, attribuez le rôle
AzureML Data Scientist
sur le magasin de fonctionnalités à l’identité.Si le problème se produit quand
- l’utilisateur exécute du code dans un notebook Azure Machine Learning Spark
- ce notebook utilise la propre identité de l’utilisateur pour accéder à Azure Machine Learning service
attribuez le rôle AzureML Data Scientist
sur le magasin de fonctionnalités à l’identité Microsoft Entra de l’utilisateur.
Azure Machine Learning Data Scientist
est un rôle recommandé. L’utilisateur peut créer son propre rôle personnalisé avec les actions suivantes
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Pour plus d’informations sur la configuration RBAC, visitez la ressource Gérer l’accès au magasin de fonctionnalités géré.
L’utilisateur ou l’identité managée ne dispose pas de l’autorisation RBAC appropriée pour lire à partir du stockage source ou du magasin hors connexion
Symptôme
Le travail/requête de récupération des fonctionnalités échoue avec le message d’erreur suivant dans le fichier 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)
Solution :
- Si le travail de récupération des fonctionnalités utilise une identité managée, attribuez le rôle
Storage Blob Data Reader
sur le stockage source et le stockage de magasin hors connexion à l’identité. - Cette erreur se produit lorsque le notebook utilise l’identité de l’utilisateur pour accéder à Azure Machine Learning service pour exécuter la requête. Pour résoudre l’erreur, attribuez le rôle
Storage Blob Data Reader
à l’identité de l’utilisateur sur le stockage source et le compte de stockage de magasin hors connexion.
Storage Blob Data Reader
est la condition d’accès minimale recommandée. Les utilisateurs peuvent également attribuer des rôles , par exemple, Storage Blob Data Contributor
ou Storage Blob Data Owner
, avec plus de privilèges.
Le travail de formation ne parvient pas à lire les données générées par le composant de récupération de fonctionnalité intégré
Symptôme
Un travail d’apprentissage échoue avec le message d’erreur indiquant que les données d’apprentissage n’existent pas, que le format est incorrect ou qu’une erreur d’analyseur s’affiche :
FileNotFoundError: [Errno 2] No such file or directory
- le format n’est pas correct.
ParserError:
Solution
Le composant de récupération de fonctionnalité intégré a une sortie, output_data
. Les données de sortie sont une ressource de données uri_folder. Il a toujours cette structure de dossiers :
<training data folder>
/
├── data/
│ ├── xxxxx.parquet
│ └── xxxxx.parquet
└── feature_retrieval_spec.yaml
Les données de sortie sont toujours au format parquet. Mettez à jour le script de formation pour lire à partir du sous-dossier « data » et lire les données en tant que parquet.
generate_feature_retrieval_spec()
échoue en raison de l’utilisation de la spécification de l’ensemble de fonctionnalités local
Symptôme :
Ce code Python génère une spécification de récupération de fonctionnalités sur une liste donnée de fonctionnalités :
featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)
Si la liste des fonctionnalités contient des fonctionnalités définies par une spécification d’ensemble de fonctionnalités locale, le generate_feature_retrieval_spec()
échoue avec ce message d’erreur :
AttributeError: 'FeatureSetSpec' object has no attribute 'id'
Solution :
Une spécification de récupération de fonctionnalités ne peut être générée qu’à l’aide d’ensembles de fonctionnalités inscrits dans le magasin de fonctionnalités. Pour corriger le problème :
- Inscrire la spécification de l’ensemble de fonctionnalités local en tant qu’ensemble de fonctionnalités dans le magasin de fonctionnalités
- Obtenir l’ensemble de fonctionnalités inscrit
- Créer à nouveau des listes de fonctionnalités en utilisant uniquement les fonctionnalités des ensembles de fonctionnalités inscrits
- Générer la spécification de récupération des fonctionnalités à l’aide de la liste des nouvelles fonctionnalités
La requête get_offline_features()
prend beaucoup de temps
Symptôme :
L’exécution de get_offline_features
pour générer des données d’apprentissage, à l’aide de quelques fonctionnalités du magasin de fonctionnalités, prend trop de temps.
Solutions :
Vérifiez ces configurations :
- Vérifiez que
temporal_join_lookback
est défini dans la spécification de chaque ensemble de fonctionnalités utilisé dans la requête. Définissez sa valeur sur une valeur plus petite. - Si la fenêtre de taille et timestamp sur le cadre de données d’observation est volumineuse, configurez la session de notebook (ou le travail) pour augmenter la taille (mémoire et cœur) du pilote et de l’exécuteur. En outre, augmentez le nombre d’exécuteurs.
Erreurs de travail de matérialisation des fonctionnalités
- Configuration de magasin hors connexion non valide
- L’identité de matérialisation ne dispose pas de l’autorisation RBAC appropriée sur le magasin de fonctionnalités
- L’identité de matérialisation ne dispose pas de l’autorisation RBAC appropriée pour lire à partir du stockage
- L’identité de matérialisation ne dispose pas de l’autorisation RBAC pour écrire des données dans le magasin hors connexion
- La diffusion en continu des résultats de l’exécution d’un travail vers un notebook entraîne un échec
- Configuration Spark invalide
Lorsque le travail de matérialisation des fonctionnalités échoue, procédez comme suit pour vérifier les détails de l’échec du travail :
- Accédez à la page du magasin de fonctionnalités : https://ml.azure.com/featureStore/{your-feature-store-name}.
- Accédez à l’onglet
feature set
, sélectionnez l’ensemble de fonctionnalités approprié, puis accédez à la page de détails de l’ensemble de fonctionnalités. - Dans la page détails de l’ensemble de fonctionnalités, sélectionnez l’onglet
Materialization jobs
, puis sélectionnez le travail ayant échoué pour l’ouvrir dans la vue détails du travail. - Dans la vue détails du travail, sous la carte
Properties
, passez en revue l’état du travail et le message d’erreur. - Vous pouvez également accéder à l’onglet
Outputs + logs
, puis rechercher le fichierstdout
à partir du fichierlogs\azureml\driver\stdout
.
Après avoir appliqué un correctif, vous pouvez déclencher manuellement une tâche de matérialisation de renvoi pour vérifier que le correctif fonctionne.
Configuration du magasin hors connexion non valide
Symptôme
Le travail de matérialisation échoue avec ce message d’erreur dans le fichierlogs/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
Solution
Utilisez le Kit de développement logiciel (SDK) pour vérifier la cible de stockage hors connexion définie dans le magasin de fonctionnalités :
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
Vous pouvez également vérifier la cible de stockage hors connexion sur la page vue d’ensemble de l’interface utilisateur du magasin de fonctionnalités. Vérifiez que le stockage et le conteneur existent et que la cible a ce format :
/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{storage}/blobServices/default/containers/{container-name}
L’identité de matérialisation ne dispose pas de l’autorisation RBAC appropriée sur le magasin de fonctionnalités
Symptôme :
Le travail de matérialisation échoue avec ce message d’erreur dans le fichier 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
Solution :
Attribuez le rôle Azure Machine Learning Data Scientist
sur le magasin de fonctionnalités à l’identité de matérialisation (identité managée affectée par l’utilisateur) du magasin de fonctionnalités.
Azure Machine Learning Data Scientist
est un rôle recommandé. Vous pouvez créer votre propre rôle personnalisé avec ces actions :
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Pour plus d’informations, consultez la ressource Autorisations requises pour le rôle feature store materialization managed identity
.
L’identité de matérialisation ne dispose pas de l’autorisation RBAC appropriée pour lire à partir du stockage
Symptôme
Le travail de matérialisation échoue avec ce message d’erreur dans le fichier 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)
Solution :
Attribuez le rôleStorage Blob Data Reader
, sur le stockage source, à l’identité de matérialisation (identité managée affectée par l’utilisateur) du magasin de fonctionnalités.
Storage Blob Data Reader
est la condition d’accès minimale recommandée. Vous pouvez également attribuer des rôles avec plus de privilèges (par exemple, Storage Blob Data Contributor
ou Storage Blob Data Owner
).
Pour plus d’informations sur la configuration RBAC, visitez la ressource Autorisations requises pour le rôle feature store materialization managed identity
.
L’identité de matérialisation ne dispose pas de l’autorisation RBAC appropriée pour écrire des données dans le magasin hors connexion
Symptôme
Le travail de matérialisation échoue avec ce message d’erreur dans le fichier 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
Solution
Attribuez le rôle Storage Blob Data Reader
sur le stockage source à l’identité de matérialisation (identité managée affectée par l’utilisateur) du magasin de fonctionnalités.
Storage Blob Data Contributor
est la condition d’accès minimale recommandée. Vous pouvez également attribuer des rôles avec plus de privilèges (par exemple, Storage Blob Data Owner
).
Pour plus d’informations sur la configuration RBAC, visitez la ressource Autorisations requises pour le rôle feature store materialization managed identity
.
La sortie du travail de diffusion en continu vers un notebook entraîne un échec
Symptôme :
Lors de l’utilisation du client CRUD du magasin de fonctionnalités pour diffuser en continu les résultats du travail de matérialisation vers un notebook à l’aide de fs_client.jobs.stream("<job_id>")
, l’appel du SDK échoue avec une erreur.
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.
Solution :
Lorsque le travail de matérialisation est créé (par exemple, par un appel de remplissage), la tâche peut prendre quelques secondes pour que le travail s’initialise correctement. Réexécutez la commande jobs.stream()
quelques secondes plus tard. Cela devrait résoudre le problème.
Configuration Spark invalide
Symptôme :
Un travail de matérialisation échoue avec ce message d’erreur :
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]"
}
Solution :
Mettez à jour le materialization_settings.spark_configuration{}
de l’ensemble de fonctionnalités. Assurez-vous que ces paramètres utilisent à la fois des quantités de mémoire et un nombre total de cœurs, ces deux valeurs devant être inférieures à ce que le type d’instance, tel que défini par materialization_settings.resource
, fournit :
spark.driver.cores
spark.driver.memory
spark.executor.cores
spark.executor.memory
Par exemple, pour le type d’instance standard_e8s_v3, cette configuration Spark est l’une des options valides :
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)