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
- Błędy uprawnień RBAC
- Problem z zduplikowanym identyfikatorem arm tożsamości materializacji
- Starsze wersje
azure-mgmt-authorization
pakietu nie działają zAzureMLOnBehalfOfCredential
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_uai
w 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 AzureMLOnBehalfOfCredential
programem .
Błędy tworzenia specyfikacji zestawu funkcji
- Nieprawidłowy schemat w specyfikacji zestawu funkcji
- Nie można odnaleźć klasy transformacji
- FileNotFoundError w folderze kodu
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 features
elementu 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ą MyFeatureTransformer
feature_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.0b2
elementu .
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ń
- Błędy rozwiązywania specyfikacji pobierania funkcji
- Nie można odnaleźć pliku feature_retrieval_spec.yaml podczas używania modelu jako danych wejściowych do zadania pobierania funkcji
- Dane obserwacji nie są łączone z żadnymi wartościami funkcji
- Tożsamość zarządzana lub użytkownik nie ma odpowiednich uprawnień RBAC w magazynie funkcji
- Tożsamość zarządzana lub użytkownik nie ma odpowiednich uprawnień RBAC do odczytu z magazynu źródłowego lub magazynu offline
- Zadanie trenowania nie może odczytać danych wygenerowanych przez składnik pobierania funkcji kompilacji
generate_feature_retrieval_spec()
Niepowodzenie z powodu użycia specyfikacji lokalnego zestawu funkcji- Zapytanie
get_offline_features()
trwa długo
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ę, żetemporal_join_lookback > source.source_delay
element .
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.
- Jeśli zadanie pobierania funkcji używa tożsamości zarządzanej, przypisz
AzureML Data Scientist
rolę w magazynie funkcji do tożsamości. - 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
- Nieprawidłowa konfiguracja magazynu w trybie offline
- Tożsamość materializacji nie ma odpowiednich uprawnień RBAC w magazynie funkcji
- Tożsamość materializacji nie ma odpowiednich uprawnień RBAC do odczytu z magazynu
- Tożsamość materializacji nie ma uprawnień RBAC do zapisywania danych w magazynie offline
- Wyniki wykonywania zadania przesyłania strumieniowego do notesu powoduje niepowodzenie
- Nieprawidłowa konfiguracja platformy Spark
Gdy zadanie materializacji funkcji zakończy się niepowodzeniem, wykonaj następujące kroki, aby sprawdzić szczegóły niepowodzenia zadania:
- Przejdź na stronę magazynu cech: https://ml.azure.com/featureStore/{your-feature-store-name}.
- Przejdź do
feature set
karty, wybierz odpowiedni zestaw funkcji i przejdź do strony szczegółów zestawu funkcji. - 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. - W widoku szczegółów zadania na karcie
Properties
przejrzyj stan zadania i komunikat o błędzie. - Możesz również przejść do
Outputs + logs
karty, a następnie znaleźćstdout
plik zlogs\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.resource
programie , 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)