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 Learning.
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
- Problem z zduplikowanym identyfikatorem arm tożsamości materializacji
- Błędy uprawnień RBAC
- 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. Wdrożenie odbywa się w wielu krokach, więc druga próba może zakończyć się niepowodzeniem, ponieważ niektóre zasoby już istnieją. Usuń te zasoby i wznów zadanie.
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. Chociaż używasz identyfikatora usługi ARM w formacie (A), w przypadku korzystania z tej tożsamości zarządzanej w tym celu 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.
Błędy uprawnień RBAC
Aby utworzyć magazyn funkcji, użytkownik potrzebuje Contributor
ról i User Access Administrator
. Rola niestandardowa obejmująca ten sam zestaw ról akcji będzie działać. Będzie również działać super zestaw tych dwóch ról 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
Przyznaj użytkownikowi Contributor
role i User Access Administrator
w grupie zasobów, w której jest tworzony magazyn funkcji. Następnie poinstruuj użytkownika, aby ponownie uruchomić wdrożenie.
Aby uzyskać więcej informacji, odwiedź stronę Uprawnienia wymagane dla feature store materialization managed identity
zasobu roli .
Starsze wersje pakietu azure-mgmt-authorization nie działają z usługą AzureMLOnBehalfOfCredential
Objaw
W repozytorium azureml-examples po użyciu skryptu podanego setup_storage_uai
w folderze featurestore_sample 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. Starsza 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()
program , 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. Na przykład:
- 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 są typu 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.
Zamiast ręcznie wpisywać wartości, jeśli zestaw SDK definiuje specyfikację zestawu funkcji, infer_schema
opcja jest również zalecana jako preferowany sposób automatycznego wypełniania .features
Element timestamp_column
i index columns
nie może być wypełniany automatycznie.
Aby uzyskać więcej informacji, odwiedź zasób 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ę MyFeatureTransformer
, zestaw
feature_transformation_code.transformation_class
być my_transformation_class.MyFeatureTransformer
Komunikat o błędzie FileNotFoundError w folderze kodu
Objaw
Ten błąd może wystąpić, jeśli zestaw funkcji spec YAML został utworzony ręcznie, a zestaw SDK nie generuje zestawu funkcji. 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 programie azureml-featurestore
do utworzenia obiektu języka Python FeatureSetSpec, może on przyjąć 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 jest kopiowana do folderu docelowego, a feature_transformation_code.path
właściwość jest aktualizowana 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 wystąpić 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. Sprawdź, czy wszystkie nazwy magazynów funkcji
- Identyfikator URI
- nazwa/wersja zestawu funkcji
- funkcja
są prawidłowe i że istnieją w magazynie funkcji.
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ć feature_retrieval_spec.yaml
plik 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 transaction_amount_3d_avg
funkcji 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:
temporal_join_lookback
Rozszerz 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 platformy Spark usługi Azure Machine Learning
- ten notes używa własnej tożsamości użytkownika do uzyskiwania dostępu do usługi Azure Machine Learning
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.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Aby uzyskać więcej informacji na temat konfiguracji kontroli dostępu opartej na rolach, odwiedź stronę Zarządzanie dostępem do magazyn zarządzanych funkcji zasobu.
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ę zarówno do magazynu źródłowego, jak 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 Learning 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.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Aby uzyskać więcej informacji, odwiedź stronę Uprawnienia wymagane dla feature store materialization managed identity
zasobu 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żesz również przypisywać role z większymi uprawnieniami — 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, odwiedź stronę Uprawnienia wymagane dla zasobu 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żesz również przypisywać role z większymi uprawnieniami — 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, odwiedź stronę Uprawnienia wymagane dla zasobu 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 wywołania fs_client.jobs.stream("<job_id>")
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. To powinno rozwiązać problem.
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ą zarówno ilości rozmiaru pamięci, jak i całkowitej liczby wartości rdzeni, które są mniejsze niż typ wystąpienia, zgodnie z definicją w materialization_settings.resource
parametrze , 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)