Problembehandlung für den verwalteten Feature Store
In diesem Artikel erfahren Sie, wie Sie häufig auftretende Probleme mit dem verwalteten Funktionsspeicher in Azure Machine Learning beheben können.
Probleme beim Erstellen und Aktualisieren eines Feature Stores
Diese Probleme können auftreten, wenn Sie einen Feature Store erstellen oder aktualisieren:
- ARM-Drosselungsfehler
- Problem mit duplizierter ARM-ID für Materialisierungsidentität
- RBAC-Berechtigungsfehler
- Ältere Versionen des
azure-mgmt-authorization
Pakets funktionieren nicht mitAzureMLOnBehalfOfCredential
ARM-Drosselungsfehler
Symptom
Die Erstellung oder Aktualisierung des Feature Store schlägt fehl. Der Fehler könnte folgendermaßen aussehen:
{
"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": "..."
}
]
}
}
Lösung
Führen Sie den Vorgang zum Erstellen/Aktualisieren des Feature Stores zu einem späteren Zeitpunkt aus. Die Bereitstellung erfolgt in mehreren Schritten, daher könnte der zweite Versuch fehlschlagen, weil einige der Ressourcen bereits vorhanden sind. Löschen Sie diese Ressourcen, und setzen Sie den Auftrag fort.
Problem mit duplizierter ARM-ID für Materialisierungsidentität
Sobald der Feature Store aktualisiert wurde, um die Materialisierung zum ersten Mal zu aktivieren, können spätere Aktualisierungen des Feature Store zu diesem Fehler führen.
Symptom
Wenn der Feature Store mit dem SDK/CLI aktualisiert wird, schlägt die Aktualisierung mit dieser Fehlermeldung fehl:
Fehler:
{
"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."
}
}
Lösung
Das Problem betrifft die ARM-ID des materialization_identity
ARM-ID-Formats.
In der Azure-Benutzeroberfläche oder im SDK wird für die ARM-ID der vom Benutzer zugewiesenen verwalteten Identität die Kleinschreibung resourcegroups
verwendet. Beispiel:
- (A): /subscriptions/{sub-id}/resourcegroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
Wenn der Feature Store die vom Benutzer zugewiesene verwaltete Identität als seine materialization_identity verwendet, wird seine ARM-ID normalisiert und mit resourceGroups
gespeichert. Beispiel:
- (B): /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
In der Aktualisierungsanforderung können Sie eine vom Benutzer zugewiesene Identität verwenden, die mit der Materialisierungsidentität übereinstimmt, um den Feature Store zu aktualisieren. Wenn Sie diese verwaltete Identität zu diesem Zweck verwenden, während Sie die ARM-ID im Format (A) verwenden, schlägt die Aktualisierung fehl und es wird die oben genannte Fehlermeldung ausgegeben.
Um das Problem zu beheben, ersetzen Sie die Zeichenfolge resourcegroups
durch resourceGroups
in der vom Benutzer zugewiesenen ARM-ID der verwalteten Identität. Führen Sie dann das Feature-Store-Update erneut aus.
RBAC-Berechtigungsfehler
Zum Erstellen eines Feature Store benötigt der Benutzer die Rollen Contributor
und User Access Administrator
. Eine benutzerdefinierte Rolle, die den gleichen Satz von Rollen der Aktionen abdeckt, geht auch. Eine Super-Gruppe dieser beiden Rollen der Aktionen funktioniert ebenfalls.
Symptom
Wenn der Benutzer nicht die erforderlichen Rollen hat, schlägt die Bereitstellung fehl. Eine Antwort könnte wie folgt aussehen:
{
"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."
}
}
Lösung
Weisen Sie dem Benutzer die Rollen Contributor
und User Access Administrator
für die Ressourcengruppe zu, in der der Feature Store erstellt wird. Weisen Sie dann den Benutzer an, die Bereitstellung erneut auszuführen.
Weitere Informationen finden Sie in den Berechtigungen, die für die feature store materialization managed identity
-Rolle Ressource erforderlich sind.
Ältere Versionen des azure-mgmt-authorization-Pakets funktionieren nicht mit AzureMLOnBehalfOfCredential
Symptom
Wenn Sie im Repository azureml-examples das Skript setup_storage_uai
, das im Ordner featurestore_sample bereitgestellt wird, verwenden, schlägt das Skript mit dieser Fehlermeldung fehl:
AttributeError: 'AzureMLOnBehalfOfCredential' object has no attribute 'signed_session'
Lösung:
Überprüfen Sie die Version des installierten Pakets azure-mgmt-authorization
, und stellen Sie sicher, dass Sie eine aktuelle Version verwenden, mindestens 3.0.0 oder höher. Eine ältere Version, zum Beispiel „0.61.0“, funktioniert nicht mit AzureMLOnBehalfOfCredential
.
Fehler beim Erstellen der Featuresatzspezifikation
- Ungültiges Schema in Featuresatzspezifikation
- Kann die Transformationsklasse nicht finden
- FileNotFoundError im Codeordner
Ungültiges Schema in Featuresatzspezifikation
Bevor Sie ein Feature-Set im Feature-Speicher registrieren, definieren Sie die Feature-Set-Spezifikation lokal und führen <feature_set_spec>.to_spark_dataframe()
aus, um sie zu validieren.
Symptom
Wenn ein Benutzer <feature_set_spec>.to_spark_dataframe()
ausführt, können verschiedene Schemavalidierungsfehler auftreten, wenn das Datenrahmenschema des Featuresatzes nicht mit der Definition des Featuresatzes übereinstimmt.
Zum Beispiel:
- Fehlermeldung:
azure.ai.ml.exceptions.ValidationException: Schema check errors, timestamp column: timestamp is not in output dataframe
- Fehlermeldung:
Exception: Schema check errors, no index column: accountID in output dataframe
- Fehlermeldung:
ValidationException: Schema check errors, feature column: transaction_7d_count has data type: ColumnType.long, expected: ColumnType.string
Lösung
Überprüfen Sie den Fehler bei der Schemavalidierung und aktualisieren Sie die Definition der Feature-Set-Spezifikation entsprechend, sowohl für die Spaltennamen als auch für die Typen. Zum Beispiel:
- die Eigenschaft
source.timestamp_column.name
aktualisieren, um die Namen der Zeitstempelspalten korrekt zu definieren - die Eigenschaft
index_columns
aktualisieren, um die Indexspalten korrekt zu definieren - die Eigenschaft
features
aktualisieren, um die Namen und Typen der Featurespalten korrekt zu definieren - wenn die Feature-Quelldaten vom Typ csv sind, überprüfen Sie, ob die CSV-Dateien mit Spaltenüberschriften erzeugt werden
Führen Sie anschließend <feature_set_spec>.to_spark_dataframe()
erneut aus, um zu prüfen, ob die Validierung erfolgreich war.
Wenn das SDK die Featuresatzspezifikation definiert, wird die Option infer_schema
auch als bevorzugte Methode zum automatischen Ausfüllen der features
empfohlen, anstatt die Werte manuell einzugeben. timestamp_column
und index columns
können nicht automatisch ausgefüllt werden.
Weitere Informationen finden Sie in der Ressource Feature Set Spec schema.
Ich kann die Transformationsklasse nicht finden
Symptom
Wenn ein Benutzer <feature_set_spec>.to_spark_dataframe()
ausführt, gibt er diesen Fehler zurück: AttributeError: module '<...>' has no attribute '<...>'
Beispiel:
AttributeError: module '7780d27aa8364270b6b61fed2a43b749.transaction_transform' has no attribute 'TransactionFeatureTransformer1'
Lösung
Es wird erwartet, dass die Feature-Transformationsklasse in einer Python-Datei im Stammverzeichnis des Code-Ordners definiert ist. Der Code-Ordner kann andere Dateien oder Unterordner enthalten.
Legen Sie den Wert der feature_transformation_code.transformation_class
-Eigenschaft auf <py file name of the transformation class>.<transformation class name>
fest.
Wenn der Code-Ordner zum Beispiel so aussieht
code
/
└── my_transformation_class.py
und die Datei „my_transformation_class.py“ definiert die Klasse MyFeatureTransformer
, setzt
feature_transformation_code.transformation_class
auf my_transformation_class.MyFeatureTransformer
FileNotFoundError im Codeordner
Symptom
Dieser Fehler kann auftreten, wenn die Feature Set Spec YAML manuell erstellt wird und das SDK den Featuresatz nicht generiert. Befehl
runs <feature_set_spec>.to_spark_dataframe()
gibt Fehler zurück
FileNotFoundError: [Errno 2] No such file or directory: ....
Lösung
Überprüfen Sie den Codeordner. Es sollte ein Unterordner unter dem Feature Set Spec Ordner sein. Legen Sie in der Feature-Set-Spezifikation feature_transformation_code.path
als relativen Pfad zum Feature-Set-Spezifikationsordner fest. Beispiel:
feature set spec folder
/
├── code/
│ ├── my_transformer.py
│ └── my_orther_folder
└── FeatureSetSpec.yaml
In diesem Beispiel sollte die Eigenschaft feature_transformation_code.path
in der YAML-Datei ./code
lauten.
Hinweis
Wenn Sie die Funktion create_feature_set_spec in azureml-featurestore
verwenden, um ein FeatureSetSpec-Python-Objekt zu erstellen, kann es einen beliebigen lokalen Ordner als feature_transformation_code.path
-Wert annehmen. Wenn das FeatureSetSpec-Objekt zur Bildung einer YAML-Datei für FeatureSetSpec in einen Zielordner ausgegeben wird, wird der Codepfad in den Zielordner kopiert und die Eigenschaft feature_transformation_code.path
in der YAML-Datei der Spezifikation aktualisiert.
CRUD-Fehler im Featuresatz
GET-Befehl schlägt für Featuresatz aufgrund einer ungültigen FeatureStoreEntity fehl
Symptom
Wenn Sie den CRUD-Client des Feature Stores verwenden, um einen Featuresatz mit GET abzurufen – z. B. fs_client.feature_sets.get(name, version)
"` –, kann dieser Fehler auftreten:
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
Dieser Fehler kann auch im FeatureStore-Materialisierungsauftrag auftreten, wo der Auftrag mit demselben Fehler-Traceback fehlschlägt.
Lösung
Starten einer Notebooksitzung mit der neuen Version von SDKS
- Wenn es azure-ai-ml verwendet, aktualisieren Sie auf
azure-ai-ml==1.8.0
. - Wenn es das Feature Store Dataplane SDK verwendet, aktualisieren Sie es auf
azureml-featurestore== 0.1.0b2
.
Aktualisieren Sie in der Notebooksitzung die Featurespeicherentität, um die Eigenschaft stage
festzulegen, wie in diesem Beispiel gezeigt:
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())
Wenn Sie die FeatureStoreEntität definieren, stellen Sie die Eigenschaften so ein, dass sie mit den Eigenschaften übereinstimmen, die bei der Erstellung der Entität verwendet wurden. Der einzige Unterschied besteht darin, die Eigenschaft stage
hinzuzufügen.
Sobald der Aufruf von begin_create_or_update()
erfolgreich zurückgegeben wird, sollten der nächste Aufruf von feature_sets.get()
und der nächste Materialisierungsauftrag erfolgreich sein.
Fehler bei Featureabrufauftrag und -abfrage
- Fehler bei der Auflösung der Spezifikation für das Abrufen von Merkmalen
- Datei feature_retrieval_spec.yaml nicht gefunden, wenn ein Modell als Eingabe für den Featureabrufauftrag verwendet wird
- Beobachtungsdaten sind nicht mit Merkmalswerten verbunden
- Benutzer oder verwaltete Identität hat nicht die richtige RBAC-Berechtigung für den Feature Store
- Benutzer oder verwaltete Identität verfügt nicht über die richtige RBAC-Berechtigung zum Lesen aus dem Quellspeicher oder Offlinespeicher
- Trainingsauftrag liest keine Daten, die von der integrierten Featureabrufkomponente generiert wurden
- Fehler bei
generate_feature_retrieval_spec()
aufgrund der Verwendung der lokalen Featuresatzspezifikation - Die
get_offline_features()
Abfrage dauert sehr lange
Wenn ein Merkmalsabrufauftrag fehlschlägt, prüfen Sie die Fehlerdetails. Gehen Sie auf die Ausführungsdetailseite, wählen Sie die Registerkarte Ausgaben + Protokolle und untersuchen Sie die Datei logs/azureml/driver/stdout.
Wenn der Benutzer die get_offline_feature()
-Abfrage im Notebook ausführt, zeigen die Zellausgaben direkt den Fehler an.
Auflösungsfehler bei der Suche nach Merkmalen
Symptom
Die Abfrage/der Auftrag zum Abrufen von Merkmalen zeigt diese Fehler an:
- Ungültiges Feature
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
- Ungültiger Feature Store-URI:
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"
- Ungültiger Featuresatz:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."
Lösung
Überprüfen Sie den Inhalt von feature_retrieval_spec.yaml
, den der Auftrag verwendet. Überprüfen, ob alle Namens des Feature Stores
- URI
- Featuresatzname/-version
- feature
gültig und im Feature Store vorhanden sind.
Für die Auswahl von Merkmalen aus einem Feature Store und die Generierung der YAML-Datei für die Featuresuche wird die Verwendung der Hilfsfunktion empfohlen.
In diesem Codeschnipsel wir die Hilfsfunktion generate_feature_retrieval_spec
verwendet.
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)
Datei feature_retrieval_spec.yaml nicht gefunden, wenn ein Modell als Eingabe für den Featureabrufauftrag verwendet wird
Symptom
Wenn Sie ein registriertes Modell als Eingabe für einen Feature Retrieval-Auftrag verwenden, schlägt der Auftrag mit diesem Fehler fehl:
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
Lösung:
Wenn Sie ein Modell als Eingabe für den Feature Retrieval Schritt bereitstellen, erwartet das Modell, dass die Retrieval Spec YAML-Datei im Artefaktordner des Modells zu finden ist. Der Auftrag schlägt fehl, wenn diese Datei nicht vorhanden ist.
Um das Problem zu beheben, verpacken Sie die Datei feature_retrieval_spec.yaml
im Stammordner des Artefaktordners des Modells, bevor Sie das Modell registrieren.
Beobachtungsdaten nicht mit Featurewerten verknüpft
Symptom
Nachdem die Benutzer die Abfrage/den Auftrag zum Abrufen von Merkmalen ausgeführt haben, erhalten die Ausgabedaten keine Merkmalswerte. Ein Beispiel: Ein Benutzer führt den Featureabrufauftrag aus, um die Feature transaction_amount_3d_avg
und transaction_amount_7d_avg
mit diesen Ergebnissen abzurufen:
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 |
Lösung
Der Featureabruf führt eine zeitpunktbezogene Joinabfrage durch. Wenn das Verknüpfungsergebnis leer ist, versuchen Sie diese möglichen Lösungen:
- Erweitern Sie in der Definition der Featuresatzspezifikation den Bereich
temporal_join_lookback
, oder entfernen Sie ihn vorübergehend. Auf diese Weise kann die Point-in-Time-Verknüpfung weiter (oder unendlich) in die Vergangenheit zurückblicken, vor dem Zeitstempel des Beobachtungsereignisses, um die Merkmalswerte zu finden. - Wenn
source.source_delay
auch in der Feature-Set-Spezifikation festgelegt ist, stellen Sie sicher, dasstemporal_join_lookback > source.source_delay
.
Wenn keine dieser Lösungen funktioniert, holen Sie den Feature-Satz aus dem Feature Store und führen Sie <feature_set>.to_spark_dataframe()
aus, um die Feature-Indexspalten und Zeitstempel manuell zu überprüfen. Der Fehler könnte aus folgenden Gründen auftreten:
- Die Indexwerte in den Beobachtungsdaten sind im Dataframe des Featuresatzes nicht vorhanden.
- kein Merkmalswert mit einem Zeitstempelwert vor dem Beobachtungszeitstempel existiert.
In diesen Fällen, wenn das Feature die Offline-Materialisierung aktiviert hat, müssen Sie möglicherweise weitere Feature-Daten nachfüllen.
Der Benutzer oder die verwaltete Identität hat nicht die richtige RBAC-Berechtigung für den Feature Store
Symptom:
Der Auftrag/die Abfrage zum Abrufen von Merkmalen schlägt mit dieser Fehlermeldung in der Datei logs/azureml/driver/stdout fehl:
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
Lösung:
Wenn der Feature-Abrufauftrag eine verwaltete Identität verwendet, weisen Sie der Identität die Rolle
AzureML Data Scientist
auf dem Feature-Speicher zu.Wenn das Problem auftritt, wenn
- der Benutzer führt Code in einem Azure Machine Learning Spark-Notizbuch aus
- das Notebook die eigene Identität des Benutzers für den Zugriff auf den Azure Machine Learning-Dienst verwendet
Weisen Sie der Microsoft Entra Identität des Benutzers die Rolle AzureML Data Scientist
im Feature Store zu.
Azure Machine Learning Data Scientist
ist eine empfohlene Rolle. Der Benutzer kann mit den folgenden Aktionen eine eigene benutzerdefinierte Rolle erstellen.
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Weitere Informationen zur RBAC-Einrichtung finden Sie in der Ressource Verwalten des Zugriffs auf den verwalteten Feature Store.
Der Benutzer oder die verwaltete Identität verfügt nicht über die richtige RBAC-Berechtigung zum Lesen aus dem Quellspeicher oder Offlinespeicher
Symptom
Der Auftrag/die Abfrage zum Abrufen von Features schlägt mit der folgenden Fehlermeldung in der Datei logs/azureml/driver/stdout fehl:
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)
Lösung:
- Wenn der Featureabrufauftrag eine verwaltete Identität verwendet, weisen Sie der Identität die Rolle
Storage Blob Data Reader
auf dem Quellspeicher und dem Offline-Speicher zu. - Dieser Fehler tritt auf, wenn das Notebook die Identität des Benutzers für den Zugriff auf den Azure Machine Learning-Dienst zur Ausführung der Abfrage verwendet. Um den Fehler zu beheben, weisen Sie der Identität des Benutzers auf dem Quellspeicher- und Offlinespeicherkonto die Rolle
Storage Blob Data Reader
zu.
Storage Blob Data Reader
ist die empfohlene Mindestzugriffsanforderung. Benutzer können auch Rollen - z. B. Storage Blob Data Contributor
oder Storage Blob Data Owner
- mit mehr Berechtigungen zuweisen.
Trainingsauftrag liest keine Daten, die von der integrierten Featureabrufkomponente generiert wurden
Symptom
Ein Trainingsauftrag schlägt mit der Fehlermeldung fehl, dass die Trainingsdaten nicht vorhanden sind, das Format falsch ist oder ein Parserfehler vorliegt:
FileNotFoundError: [Errno 2] No such file or directory
- das Format nicht korrekt ist.
ParserError:
Lösung
Die integrierte Komponente zum Featureabruf weist die Ausgabe „output_data
“ auf. Die Ausgabedaten enthalten die Datenressource uri_folder. Es hat immer diese Ordnerstruktur:
<training data folder>
/
├── data/
│ ├── xxxxx.parquet
│ └── xxxxx.parquet
└── feature_retrieval_spec.yaml
Die Ausgabedaten liegen immer im Parkettformat vor. Aktualisieren Sie das Trainingsskript so, dass Daten aus dem Unterordner „data“ im Parquet-Format gelesen werden.
Fehler bei generate_feature_retrieval_spec()
aufgrund der Verwendung der lokalen Featuresatzspezifikation
Symptom:
Dieser Python-Code generiert eine Feature-Retrieval-Spezifikation für eine gegebene Liste von Features:
featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)
Wenn die Merkmalsliste Merkmale enthält, die durch eine lokale Merkmalsspezifikation definiert sind, schlägt generate_feature_retrieval_spec()
mit dieser Fehlermeldung fehl:
AttributeError: 'FeatureSetSpec' object has no attribute 'id'
Lösung:
Eine Featureabrufsspezifikation kann nur mithilfe von Featuresätzen generiert werden, die im Feature Store registriert sind. So beheben Sie das Problem:
- Registrierung der lokalen Feature-Set-Spezifikation als Feature-Set im Feature-Speicher
- Abrufen der registrierten Funktionen
- Erstellen Sie Featurelisten erneut, und verwenden Sie dabei nur Features aus registrierten Featuresätzen.
- Generieren Sie die Featureabrufspezifikation mithilfe der neuen Featureliste.
Die get_offline_features()
-Abfrage dauert sehr lange
Symptom:
Die Ausführung von get_offline_features
zur Erzeugung von Trainingsdaten unter Verwendung einiger Merkmale aus dem Feature Store dauert zu lange.
Lösungen:
Überprüfen Sie diese Konfigurationen:
- Überprüfen Sie, ob für jeden in der Abfrage verwendeten Featuresatz
temporal_join_lookback
in der Featuresatzspezifikation festgelegt ist. Legen Sie den Wert auf einen kleineren Wert fest. - Wenn die Größe und das Zeitstempel-Fenster des Beobachtungsdatenrahmens groß sind, konfigurieren Sie die Notebook-Sitzung (oder den Auftrag) so, dass die Größe (Speicher und Kern) des Treibers und des Executors erhöht wird. Erhöhen Sie außerdem die Zahl der Executors.
Fehler beim Featurematerialisierungsauftrag
- Ungültige Offlinespeicherkonfiguration
- Materialisierungsidentität hat nicht die richtige RBAC-Berechtigung für den Feature Store
- Materialisierungsidentität hat nicht die richtige RBAC-Berechtigung, um vom Speicher zu lesen
- Materialisierungsidentität hat keine RBAC-Berechtigung zum Schreiben von Daten in den Offline-Speicher
- Das Streaming von Auftragsausführungsergebnissen auf ein Notebook führt zu einem Fehler
- Ungültige Spark-Konfiguration
Wenn der Feature-Materialisierungsauftrag fehlschlägt, führen Sie die folgenden Schritte aus, um die Details des Auftragsfehlers zu überprüfen:
- Navigieren Sie zur Feature Store-Seite https://ml.azure.com/featureStore/{your-feature-store-name}.
- Gehen Sie auf die Registerkarte
feature set
, wählen Sie das entsprechende Feature-Set aus und navigieren Sie zur Detailseite Feature-Set. - Wählen Sie auf der Detailseite des Funktionssatzes die Registerkarte
Materialization jobs
und dann den fehlgeschlagenen Auftrag, um ihn in der Auftragsdetailansicht zu öffnen. - Überprüfen Sie in der Auftragsdetailansicht unter der Karte
Properties
den Auftragsstatus und die Fehlermeldung. - Sie können auch zur Registerkarte
Outputs + logs
gehen und dann die Dateistdout
in der Dateilogs\azureml\driver\stdout
suchen.
Nachdem Sie eine Korrektur angewendet haben, können Sie manuell einen Materialisierungsauftrag zur Rückverfüllung auslösen, um zu überprüfen, ob die Korrektur funktioniert.
Ungültige Offlinespeicherkonfiguration
Symptom
Der Materialisierungsauftrag schlägt mit dieser Fehlermeldung in der Datei logs/azureml/driver/stdout
fehl:
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
Lösung
Verwenden Sie das SDK, um das im Feature Store definierte Offline-Speicherziel zu überprüfen:
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
Sie können das Offline-Speicherziel auch auf der Übersichtsseite der Benutzeroberfläche des Feature-Stores überprüfen. Vergewissern Sie sich, dass sowohl der Speicher als auch der Container existieren und dass das Ziel dieses Format hat:
/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{storage}/blobServices/default/containers/{container-name}
Materialization Identity hat nicht die richtige RBAC-Berechtigung für den Feature Store
Symptom:
Der Materialisierungsauftrag schlägt mit dieser Fehlermeldung in der Datei logs/azureml/driver/stdout fehl:
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
Lösung:
Weisen Sie der Materialisierungsidentität (einer benutzerseitig zugewiesenen verwalteten Identität) des Feature Stores die Rolle Azure Machine Learning Data Scientist
zu.
Azure Machine Learning Data Scientist
ist eine empfohlene Rolle. Mit diesen Aktionen können Sie Ihre eigene benutzerdefinierte Rolle erstellen:
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Weitere Informationen finden Sie in den Berechtigungen, die für die feature store materialization managed identity
-Rolle Ressource erforderlich sind.
Die Materialisierungsidentität hat nicht die richtige RBAC-Berechtigung, um aus dem Speicher zu lesen
Symptom
Der Materialisierungsauftrag schlägt mit dieser Fehlermeldung in der Datei logs/azureml/driver/stdout fehl:
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)
Lösung:
Weisen Sie die Rolle Storage Blob Data Reader
auf dem Quellspeicher der Materialisierungsidentität (eine vom Benutzer zugewiesene verwaltete Identität) des Feature Store zu.
Storage Blob Data Reader
ist die empfohlene Mindestzugriffsanforderung. Sie können auch Rollen mit mehr Berechtigungen zuweisen, z. B. Storage Blob Data Contributor
oder Storage Blob Data Owner
.
Weitere Informationen zur RBAC-Konfiguration finden Sie unter Erforderliche Berechtigungen für die feature store materialization managed identity
-Rolle Ressource.
Die Materialisierungsidentität hat nicht die richtige RBAC-Berechtigung, um Daten in den Offline-Speicher zu schreiben
Symptom
Der Materialisierungsauftrag schlägt mit dieser Fehlermeldung in der Datei logs/azureml/driver/stdout fehl:
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
Lösung
Weisen Sie die Rolle Storage Blob Data Reader
auf dem Quellspeicher der Materialisierungsidentität (eine vom Benutzer zugewiesene verwaltete Identität) des Feature Store zu.
Storage Blob Data Contributor
ist die empfohlene Mindestzugriffsanforderung. Sie können auch Rollen mit mehr Privilegien zuweisen, z. B. Storage Blob Data Owner
.
Weitere Informationen zur RBAC-Konfiguration finden Sie unter Erforderliche Berechtigungen für die feature store materialization managed identity
-Rolle Ressource.
Streaming der Auftragsausgabe auf ein Notebook führt zu einem Fehler
Symptom:
Wenn Sie den CRUD-Client des Feature Stores verwenden, um Ergebnisse von Materialisierungsaufträgen mithilfe von fs_client.jobs.stream("<job_id>")
an ein Notebook zu streamen, schlägt der SDK-Aufruf mit einem Fehler fehl.
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.
Lösung:
Wenn der Materialisierungsauftrag erstellt wird (z. B. durch einen Backfill-Aufruf), kann es einige Sekunden dauern, bis der Auftrag ordnungsgemäß initialisiert ist. Führen Sie den Befehl jobs.stream()
ein paar Sekunden später erneut aus. Das Problem sollte dadurch behoben werden.
Ungültige Spark-Konfiguration
Symptom:
Ein Materialisierungsauftrag schlägt mit dieser Fehlermeldung fehl:
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]"
}
Lösung:
Aktualisieren Sie materialization_settings.spark_configuration{}
des Featuresatzes. Vergewissern Sie sich, dass diese Parameter sowohl Speichergrößen als auch eine Gesamtzahl von Kernwerten verwenden, die beide kleiner sind als die Werte, die der Instanztyp, wie durch materialization_settings.resource
definiert, bietet:
spark.driver.cores
spark.driver.memory
spark.executor.cores
spark.executor.memory
Für den Instanztyp standard_e8s_v3 ist diese Spark-Konfiguration zum Beispiel eine der gültigen Optionen:
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)