Rozwiązywanie problemów z magazyn zarządzanych funkcji

Z tego artykułu dowiesz się, jak rozwiązywać typowe problemy, które mogą wystąpić z magazyn zarządzanych funkcji w usłudze Azure Machine Edukacja.

Problemy występujące podczas tworzenia i aktualizowania magazynu funkcji

Te problemy mogą wystąpić podczas tworzenia lub aktualizowania magazynu funkcji:

Błąd ograniczania usługi ARM

Objaw

Tworzenie lub aktualizowanie magazynu funkcji kończy się niepowodzeniem. Błąd może wyglądać następująco:

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

Rozwiązanie

Uruchom operację tworzenia/aktualizowania magazynu funkcji w późniejszym czasie. Ponieważ wdrożenie odbywa się w wielu krokach, druga próba może zakończyć się niepowodzeniem, ponieważ niektóre zasoby już istnieją. Usuń te zasoby i wznów zadanie.

Błędy uprawnień RBAC

Aby utworzyć magazyn funkcji, użytkownik musi Contributor mieć role i User Access Administrator (lub rolę niestandardową obejmującą ten sam zestaw lub superzestaw akcji).

Objaw

Jeśli użytkownik nie ma wymaganych ról, wdrożenie zakończy się niepowodzeniem. Odpowiedź o błędzie może wyglądać następująco

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

Rozwiązanie

Przypisz użytkownikowi role Contributor i User Access Administrator w grupie zasobów, w której ma zostać utworzony magazyn funkcji. Następnie poinstruuj użytkownika, aby ponownie uruchomić wdrożenie.

Aby uzyskać więcej informacji, zobacz Uprawnienia wymagane dla feature store materialization managed identity roli.

Problem ze zduplikowanym identyfikatorem ARM tożsamości materializacji

Po zaktualizowaniu magazynu funkcji w celu włączenia materializacji po raz pierwszy niektóre późniejsze aktualizacje w magazynie funkcji mogą spowodować ten błąd.

Objaw

Po zaktualizowaniu magazynu funkcji przy użyciu zestawu SDK/interfejsu wiersza polecenia aktualizacja kończy się niepowodzeniem z następującym komunikatem o błędzie:

Błąd:

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

Rozwiązanie

Problem dotyczy identyfikatora usługi ARM w formacie identyfikatora materialization_identity usługi ARM.

W interfejsie użytkownika platformy Azure lub zestawie SDK identyfikator usługi ARM tożsamości zarządzanej przypisanej przez użytkownika używa małych liter resourcegroups. Zobacz ten przykład:

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

Gdy magazyn funkcji używa tożsamości zarządzanej przypisanej przez użytkownika jako jej materialization_identity, identyfikator usługi ARM jest znormalizowany i przechowywany przy użyciu polecenia resourceGroups. Zobacz ten przykład:

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

W żądaniu aktualizacji możesz użyć tożsamości przypisanej przez użytkownika zgodnej z tożsamością materializacji, aby zaktualizować magazyn funkcji. W przypadku używania tej tożsamości zarządzanej w tym celu podczas korzystania z identyfikatora usługi ARM w formacie (A) aktualizacja kończy się niepowodzeniem i zwraca wcześniejszy komunikat o błędzie.

Aby rozwiązać ten problem, zastąp resourceGroups ciąg ciąg resourcegroups identyfikatorem arm tożsamości zarządzanej przypisanej przez użytkownika. Następnie ponownie uruchom aktualizację magazynu funkcji.

Starsze wersje pakietu azure-mgmt-authorization nie działają z usługą AzureMLOnBehalfOfCredential

Objaw

Jeśli używasz skryptu podanego setup_storage_uaiw folderze featurestore_sample w repozytorium azureml-examples, skrypt kończy się niepowodzeniem z następującym komunikatem o błędzie:

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

Rozwiązanie 2.

Sprawdź wersję zainstalowanego azure-mgmt-authorization pakietu i sprawdź, czy używasz najnowszej wersji, co najmniej 3.0.0 lub nowszej. Stara wersja, na przykład 0.61.0, nie działa z AzureMLOnBehalfOfCredentialprogramem .

Błędy tworzenia specyfikacji zestawu funkcji

Nieprawidłowy schemat w specyfikacji zestawu funkcji

Przed zarejestrowaniem zestawu funkcji w magazynie funkcji zdefiniuj specyfikację zestawu funkcji lokalnie i uruchom <feature_set_spec>.to_spark_dataframe() polecenie , aby go zweryfikować.

Objaw

Gdy użytkownik uruchomi <feature_set_spec>.to_spark_dataframe()polecenie , mogą wystąpić różne błędy weryfikacji schematu, jeśli schemat ramki danych zestawu funkcji nie jest zgodny z definicją specyfikacji zestawu funkcji.

Na przykład:

  • Komunikat o błędzie: azure.ai.ml.exceptions.ValidationException: Schema check errors, timestamp column: timestamp is not in output dataframe
  • Komunikat o błędzie: Exception: Schema check errors, no index column: accountID in output dataframe
  • Komunikat o błędzie: ValidationException: Schema check errors, feature column: transaction_7d_count has data type: ColumnType.long, expected: ColumnType.string

Rozwiązanie

Sprawdź błąd niepowodzenia weryfikacji schematu i odpowiednio zaktualizuj definicję specyfikacji zestawu funkcji dla nazw kolumn i typów. Przykłady:

  • zaktualizuj właściwość , source.timestamp_column.name aby poprawnie zdefiniować nazwy kolumn sygnatury czasowej.
  • zaktualizuj właściwość , index_columns aby poprawnie zdefiniować kolumny indeksu.
  • zaktualizuj właściwość , features aby poprawnie zdefiniować nazwy i typy kolumn funkcji.
  • Jeśli dane źródła funkcji mają typ csv, sprawdź, czy pliki CSV są generowane z nagłówkami kolumn.

Następnie uruchom ponownie polecenie <feature_set_spec>.to_spark_dataframe() , aby sprawdzić, czy weryfikacja została pomyślnie przekazana.

Jeśli zestaw SDK definiuje specyfikację zestawu funkcji, infer_schema opcja jest również zalecana jako preferowany sposób automatycznego wypełniania featureselementu zamiast ręcznego wpisywania wartości. Element timestamp_column i index columns nie może być wypełniany automatycznie.

Aby uzyskać więcej informacji, zobacz dokument schematu specyfikacji zestawu funkcji.

Nie można odnaleźć klasy transformacji

Objaw

Gdy użytkownik uruchomi <feature_set_spec>.to_spark_dataframe()polecenie , zwraca ten błąd: AttributeError: module '<...>' has no attribute '<...>'

Na przykład:

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

Rozwiązanie

Oczekuje się, że klasa przekształcania funkcji będzie miała swoją definicję w pliku języka Python w folderze głównym folderu kodu. Folder kodu może mieć inne pliki lub podfoldery.

Ustaw wartość feature_transformation_code.transformation_class właściwości na <py file name of the transformation class>.<transformation class name>.

Jeśli na przykład folder kodu wygląda następująco:

code/
└\\ my_transformation_class.py

a plik my_transformation_class.py definiuje klasę , ustawioną MyFeatureTransformerfeature_transformation_code.transformation_class na my_transformation_class.MyFeatureTransformer

Komunikat o błędzie FileNotFoundError w folderze kodu

Objaw

Jeśli zestaw funkcji spec YAML jest tworzony ręcznie, a zestaw SDK nie generuje zestawu funkcji, może wystąpić błąd. Polecenie runs <feature_set_spec>.to_spark_dataframe() zwraca błąd FileNotFoundError: [Errno 2] No such file or directory: ....

Rozwiązanie

Sprawdź folder kodu. Powinien to być podfolder w folderze specyfikacji zestawu funkcji. W specyfikacji zestawu funkcji ustaw feature_transformation_code.path jako ścieżkę względną do folderu specyfikacji zestawu funkcji. Na przykład:

feature set spec folder/
├-kod/
• ├\\ my_transformer.py
• └-my_orther_folder
└\\ FeatureSetSpec.yaml

W tym przykładzie feature_transformation_code.path właściwość w języku YAML powinna być następująca: ./code

Uwaga

Jeśli używasz funkcji create_feature_set_spec w pliku azureml-featurestore do tworzenia obiektu języka Python FeatureSetSpec, może on przyjmować dowolny folder lokalny jako feature_transformation_code.path wartość. Gdy obiekt FeatureSetSpec jest po cenach dumpingowych w celu utworzenia zestawu funkcji spec yaml w folderze docelowym, ścieżka kodu zostanie skopiowana do folderu docelowego, a feature_transformation_code.path właściwość zaktualizowana w pliku yaml specyfikacji.

Błędy CRUD zestawu funkcji

Błąd GET zestawu funkcji z powodu nieprawidłowej funkcjiStoreEntity

Objaw

Jeśli używasz klienta CRUD magazynu funkcji do pobrania zestawu funkcji — na przykład fs_client.feature_sets.get(name, version)"" — może zostać wyświetlony następujący błąd:


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

Ten błąd może również wystąpić w zadaniu materializacji FeatureStore, w którym zadanie kończy się niepowodzeniem z tym samym śladem błędu.

Rozwiązanie

Rozpoczynanie sesji notesu przy użyciu nowej wersji zestawu SDKS

  • Jeśli używa ona usługi azure-ai-ml, zaktualizuj element do azure-ai-ml==1.8.0.
  • Jeśli używa zestawu SDK magazynu danych magazynu funkcji, zaktualizuj go do azureml-featurestore== 0.1.0b2elementu .

W sesji notesu zaktualizuj jednostkę magazynu funkcji, aby ustawić jej stage właściwość, jak pokazano w tym przykładzie:

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())

Podczas definiowania właściwości FeatureStoreEntity ustaw właściwości tak, aby były zgodne z właściwościami użytymi podczas jej tworzenia. Jedyną różnicą stage jest dodanie właściwości .

Po pomyślnym powrocie wywołania begin_create_or_update() następne feature_sets.get() wywołanie i następne zadanie materializacji powinno zakończyć się powodzeniem.

Zadania pobierania funkcji i błędy zapytań

Gdy zadanie pobierania funkcji zakończy się niepowodzeniem, sprawdź szczegóły błędu. Przejdź do strony szczegółów przebiegu, wybierz kartę Dane wyjściowe i dzienniki i sprawdź plik logs/azureml/driver/stdout .

Jeśli użytkownik uruchamia get_offline_feature() zapytanie w notesie, dane wyjściowe komórek bezpośrednio pokazują błąd.

Błędy rozwiązywania specyfikacji pobierania funkcji

Objaw

Zapytanie/zadanie pobierania funkcji pokazuje następujące błędy:

  • Nieprawidłowa cecha
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
  • Nieprawidłowy identyfikator URI magazynu funkcji:
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"
  • Nieprawidłowy zestaw funkcji:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."

Rozwiązanie

Sprawdź zawartość używanego feature_retrieval_spec.yaml zadania. Upewnij się, że identyfikator URI magazynu cech, nazwa/wersja zestawu cech i nazwy cech są prawidłowe i znajdują się w magazynie cech.

Aby wybrać funkcje z magazynu funkcji i wygenerować plik YAML specyfikacji funkcji pobierania funkcji, zaleca się użycie funkcji narzędzia.

Ten fragment kodu używa generate_feature_retrieval_spec funkcji narzędzia.

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)

Nie można odnaleźć pliku feature_retrieval_spec.yaml podczas używania modelu jako danych wejściowych do zadania pobierania funkcji

Objaw

Jeśli używasz zarejestrowanego modelu jako danych wejściowych zadania pobierania funkcji, zadanie kończy się niepowodzeniem z powodu następującego błędu:

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

Rozwiązanie 2.

Po podaniu modelu jako danych wejściowych do kroku pobierania funkcji model oczekuje znalezienia pliku YAML specyfikacji pobierania w folderze artefaktu modelu. Zadanie kończy się niepowodzeniem, jeśli brakuje tego pliku.

Aby rozwiązać ten problem, należy spakować folder feature_retrieval_spec.yaml w folderze głównym folderu artefaktu modelu przed zarejestrowaniem modelu.

Dane obserwacji nie są łączone z żadnymi wartościami funkcji

Objaw

Gdy użytkownicy uruchamiają zapytanie/zadanie pobierania funkcji, dane wyjściowe nie pobierają żadnych wartości funkcji. Na przykład użytkownik uruchamia zadanie pobierania funkcji w celu pobrania funkcji transaction_amount_3d_avg i transaction_amount_7d_avg z następującymi wynikami:

transactionID accountID sygnatura czasowa 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

Rozwiązanie

Pobieranie cech wykonuje zapytanie dołączania do punktu w czasie. Jeśli wynik sprzężenia będzie pusty, wypróbuj następujące potencjalne rozwiązania:

  • Rozszerz temporal_join_lookback zakres definicji specyfikacji zestawu funkcji lub tymczasowo usuń go. Dzięki temu sprzężenie do punktu w czasie może wrócić do przeszłości (lub nieskończenie) przed sygnaturą czasową zdarzenia obserwacji, aby znaleźć wartości funkcji.
  • Jeśli source.source_delay parametr jest również ustawiony w definicji specyfikacji zestawu funkcji, upewnij się, że temporal_join_lookback > source.source_delayelement .

Jeśli żadne z tych rozwiązań nie działa, pobierz zestaw funkcji z magazynu funkcji i uruchom polecenie <feature_set>.to_spark_dataframe() , aby ręcznie sprawdzić kolumny indeksu funkcji i znaczniki czasu. Błąd może wystąpić, ponieważ:

  • wartości indeksu w danych obserwacji nie istnieją w ramce danych zestawu funkcji
  • brak wartości cech, z wartością znacznika czasu przed znacznikiem czasu obserwacji, istnieje.

W takich przypadkach, jeśli funkcja włączyła materializację w trybie offline, może być konieczne wypełnienie dodatkowych danych funkcji.

Tożsamość użytkownika lub tożsamość zarządzana nie ma odpowiednich uprawnień RBAC w magazynie funkcji

Objaw:

Zadanie pobierania funkcji/zapytanie kończy się niepowodzeniem z powodu tego komunikatu o błędzie w pliku 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

Rozwiązanie 2.

  1. Jeśli zadanie pobierania funkcji używa tożsamości zarządzanej, przypisz AzureML Data Scientist rolę w magazynie funkcji do tożsamości.
  2. Jeśli problem występuje, gdy
  • użytkownik uruchamia kod w notesie usługi Azure Machine Edukacja Spark
  • ten notes używa własnej tożsamości użytkownika do uzyskiwania dostępu do usługi Azure Machine Edukacja

AzureML Data Scientist przypisz rolę w magazynie funkcji do tożsamości Microsoft Entra użytkownika.

Zalecaną rolą jest Azure Machine Learning Data Scientist. Użytkownik może utworzyć własną rolę niestandardową przy użyciu następujących akcji

  • Microsoft.Machine Edukacja Services/workspaces/datastores/listsecrets/action
  • Microsoft.Machine Edukacja Services/workspaces/featuresets/read
  • Microsoft.Machine Edukacja Services/workspaces/read

Aby uzyskać więcej informacji na temat konfiguracji kontroli dostępu opartej na rolach, zobacz Zarządzanie dostępem do magazyn zarządzanych funkcji.

Tożsamość zarządzana lub użytkownik nie ma odpowiednich uprawnień RBAC do odczytu z magazynu źródłowego lub magazynu offline

Objaw

Zadanie pobierania funkcji/zapytanie kończy się niepowodzeniem z następującym komunikatem o błędzie w pliku 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)

Rozwiązanie 2.

  • Jeśli zadanie pobierania funkcji używa tożsamości zarządzanej, przypisz Storage Blob Data Reader rolę do magazynu źródłowego i magazynu w trybie offline do tożsamości.
  • Ten błąd występuje, gdy notes używa tożsamości użytkownika do uzyskiwania dostępu do usługi Azure Machine Edukacja w celu uruchomienia zapytania. Aby rozwiązać ten problem, przypisz Storage Blob Data Reader rolę do tożsamości użytkownika na źródłowym magazynie i koncie magazynu w trybie offline.

Minimalnym zalecanym wymaganiem dostępu jest Storage Blob Data Reader. Użytkownicy mogą również przypisywać role — na przykład Storage Blob Data Contributor lub Storage Blob Data Owner — z większymi uprawnieniami.

Zadanie trenowania nie może odczytać danych wygenerowanych przez składnik pobierania funkcji kompilacji

Objaw

Zadanie trenowania kończy się niepowodzeniem z komunikatem o błędzie informującym, że dane szkoleniowe nie istnieją, format jest niepoprawny lub występuje błąd analizatora:

FileNotFoundError: [Errno 2] No such file or directory
  • format nie jest poprawny.
ParserError:

Rozwiązanie

Wbudowany składnik pobierania cech ma jedne dane wyjściowe: output_data. Dane wyjściowe są zasobem danych folderu uri_folder. Zawsze ma tę strukturę folderów:

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

Dane wyjściowe są zawsze w formacie parquet. Zaktualizuj skrypt trenowania, aby móc odczytywać z folderu podrzędnego „data”, i odczytuj dane w formacie parquet.

generate_feature_retrieval_spec() Niepowodzenie z powodu użycia specyfikacji lokalnego zestawu funkcji

Objaw:

Ten kod w języku Python generuje specyfikację pobierania funkcji na danej liście funkcji:

featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)

Jeśli lista funkcji zawiera funkcje zdefiniowane przez lokalną specyfikację zestawu funkcji, generate_feature_retrieval_spec() komunikat o błędzie kończy się niepowodzeniem:

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

Rozwiązanie 2.

Specja pobierania funkcji może być generowana tylko przy użyciu zestawów funkcji zarejestrowanych w magazynie funkcji. Aby rozwiązać ten problem:

  • Rejestrowanie specyfikacji lokalnego zestawu funkcji jako zestawu funkcji w magazynie funkcji
  • Pobieranie zarejestrowanego zestawu funkcji
  • Ponowne tworzenie list funkcji przy użyciu tylko funkcji z zarejestrowanych zestawów funkcji
  • Generowanie specyfikacji pobierania funkcji przy użyciu nowej listy funkcji

Zapytanie get_offline_features() trwa długo

Objaw:

Uruchamianie get_offline_features w celu wygenerowania danych szkoleniowych przy użyciu kilku funkcji z magazynu funkcji trwa zbyt długo.

Rozwiązania:

Sprawdź następujące konfiguracje:

  • Sprawdź, czy każdy zestaw funkcji używany w zapytaniu został temporal_join_lookback ustawiony w specyfikacji zestawu funkcji. Ustaw jej wartość na mniejszą wartość.
  • Jeśli rozmiar i okno znacznika czasu w ramce danych obserwacji są duże, skonfiguruj sesję notesu (lub zadanie), aby zwiększyć rozmiar (pamięć i rdzeń) sterownika i funkcji wykonawczej. Ponadto zwiększ liczbę funkcji wykonawczych.

Błędy zadania materializacji funkcji

Gdy zadanie materializacji funkcji zakończy się niepowodzeniem, wykonaj następujące kroki, aby sprawdzić szczegóły niepowodzenia zadania:

  1. Przejdź na stronę magazynu cech: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Przejdź do feature set karty, wybierz odpowiedni zestaw funkcji i przejdź do strony szczegółów zestawu funkcji.
  3. Na stronie szczegółów zestawu funkcji wybierz kartę Materialization jobs , a następnie wybierz zadanie, które zakończyło się niepowodzeniem, aby otworzyć je w widoku szczegółów zadania.
  4. W widoku szczegółów zadania na karcie Properties przejrzyj stan zadania i komunikat o błędzie.
  5. Możesz również przejść do Outputs + logs karty, a następnie znaleźć stdout plik z logs\azureml\driver\stdout pliku.

Po zastosowaniu poprawki można ręcznie wyzwolić zadanie materializacji wypełniania, aby sprawdzić, czy poprawka działa.

Nieprawidłowa konfiguracja magazynu w trybie offline

Objaw

Zadanie materializacji kończy się niepowodzeniem z powodu tego komunikatu logs/azureml/driver/stdout o błędzie w pliku:

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

Rozwiązanie

Użyj zestawu SDK, aby sprawdzić miejsce docelowe magazynu offline zdefiniowane w magazynie funkcji:


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

Możesz również sprawdzić miejsce docelowe magazynu w trybie offline na stronie przeglądu interfejsu użytkownika magazynu funkcji. Sprawdź, czy zarówno magazyn, jak i kontener istnieją, oraz czy obiekt docelowy ma następujący format:

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

Tożsamość materializacji nie ma odpowiednich uprawnień RBAC w magazynie funkcji

Objaw:

Zadanie materializacji kończy się niepowodzeniem z powodu tego komunikatu o błędzie w pliku 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

Rozwiązanie 2.

Przypisz rolę Azure Machine Learning Data Scientist w magazynie cech do tożsamości materializacji (tożsamości zarządzanej przypisanej przez użytkownika) magazynu cech.

Zalecaną rolą jest Azure Machine Learning Data Scientist. Możesz utworzyć własną rolę niestandardową za pomocą następujących akcji:

  • Microsoft.Machine Edukacja Services/workspaces/datastores/listsecrets/action
  • Microsoft.Machine Edukacja Services/workspaces/featuresets/read
  • Microsoft.Machine Edukacja Services/workspaces/read

Aby uzyskać więcej informacji, zobacz Uprawnienia wymagane dla feature store materialization managed identity roli.

Tożsamość materializacji nie ma odpowiednich uprawnień RBAC do odczytu z magazynu

Objaw

Zadanie materializacji kończy się niepowodzeniem z powodu tego komunikatu o błędzie w pliku 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)

Rozwiązanie 2.

Storage Blob Data Reader Przypisz rolę w magazynie źródłowym do tożsamości materializacji (tożsamości zarządzanej przypisanej przez użytkownika) magazynu funkcji.

Minimalnym zalecanym wymaganiem dostępu jest Storage Blob Data Reader. Można również przypisywać role z większą rolą; na przykład Storage Blob Data Contributor lub Storage Blob Data Owner.

Aby uzyskać więcej informacji na temat konfiguracji kontroli dostępu opartej feature store materialization managed identity na rolach, zobacz Uprawnienia wymagane dla roli.

Tożsamość materializacji nie ma odpowiednich uprawnień RBAC do zapisywania danych w magazynie offline

Objaw

Zadanie materializacji kończy się niepowodzeniem z powodu tego komunikatu o błędzie w pliku 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

Rozwiązanie

Storage Blob Data Reader Przypisz rolę w magazynie źródłowym do tożsamości materializacji (tożsamości zarządzanej przypisanej przez użytkownika) magazynu funkcji.

Minimalnym zalecanym wymaganiem dostępu jest Storage Blob Data Contributor. Można również przypisywać role z większą rolą; na przykład Storage Blob Data Owner.

Aby uzyskać więcej informacji na temat konfiguracji kontroli dostępu opartej feature store materialization managed identity na rolach, zobacz Uprawnienia wymagane dla roli.

Przesyłanie strumieniowe danych wyjściowych zadania do notesu powoduje niepowodzenie

Objaw:

W przypadku korzystania z klienta CRUD magazynu funkcji do przesyłania strumieniowego wyników zadań materializacji do notesu przy użyciu fs_client.jobs.stream("<job_id>")wywołania zestawu SDK kończy się niepowodzeniem z powodu błędu

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.

Rozwiązanie 2.

Po utworzeniu zadania materializacji (na przykład przez wywołanie wypełniania wstecznego) może upłynąć kilka sekund, aby zadanie zostało poprawnie zainicjowane. jobs.stream() Uruchom ponownie polecenie kilka sekund później. Problem powinien zniknąć.

Nieprawidłowa konfiguracja platformy Spark

Objaw:

Zadanie materializacji kończy się niepowodzeniem z tym komunikatem o błędzie:

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

}

Rozwiązanie 2.

materialization_settings.spark_configuration{} Zaktualizuj zestaw funkcji. Upewnij się, że te parametry używają ilości rozmiaru pamięci i całkowitej liczby wartości rdzeni, które są mniejsze niż typ wystąpienia, zgodnie z definicją w materialization_settings.resourceprogramie , zapewnia:

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

Na przykład dla typu wystąpienia standard_e8s_v3 ta konfiguracja platformy Spark jest jedną z prawidłowych opcji.


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)

Następne kroki