Freigeben über


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

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

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

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, dass temporal_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:

  1. Wenn der Feature-Abrufauftrag eine verwaltete Identität verwendet, weisen Sie der Identität die Rolle AzureML Data Scientist auf dem Feature-Speicher zu.

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

Wenn der Feature-Materialisierungsauftrag fehlschlägt, führen Sie die folgenden Schritte aus, um die Details des Auftragsfehlers zu überprüfen:

  1. Navigieren Sie zur Feature Store-Seite https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Gehen Sie auf die Registerkarte feature set, wählen Sie das entsprechende Feature-Set aus und navigieren Sie zur Detailseite Feature-Set.
  3. Wählen Sie auf der Detailseite des Funktionssatzes die Registerkarte Materialization jobs und dann den fehlgeschlagenen Auftrag, um ihn in der Auftragsdetailansicht zu öffnen.
  4. Überprüfen Sie in der Auftragsdetailansicht unter der Karte Properties den Auftragsstatus und die Fehlermeldung.
  5. Sie können auch zur Registerkarte Outputs + logs gehen und dann die Datei stdout in der Datei logs\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)

Nächste Schritte