Řešení potíží s spravované uložiště funkcí
V tomto článku se dozvíte, jak řešit běžné problémy, se kterými se můžete setkat s spravované uložiště funkcí ve službě Azure Machine Learning.
Problémy zjištěné při vytváření a aktualizaci úložiště funkcí
K těmto problémům může dojít při vytváření nebo aktualizaci úložiště funkcí:
- Chyba omezování ARM
- Problém s id ARM duplikované materializace identity
- Chyby oprávnění RBAC
- Starší verze
azure-mgmt-authorization
balíčku nefungují sAzureMLOnBehalfOfCredential
Chyba omezování ARM
Příznaky
Vytvoření nebo aktualizace úložiště funkcí se nezdaří. Chyba může vypadat takto:
{
"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": "..."
}
]
}
}
Řešení
Spusťte operaci vytvoření/aktualizace úložiště funkcí později. Nasazení probíhá v několika krocích, takže druhý pokus může selhat, protože některé prostředky již existují. Odstraňte tyto prostředky a obnovte úlohu.
Problém s duplicitními ID ARM identity materializace
Jakmile se úložiště funkcí poprvé aktualizuje, aby bylo možné materializaci povolit, můžou některé pozdější aktualizace v úložišti funkcí vést k této chybě.
Příznaky
Když se úložiště funkcí aktualizuje pomocí sady SDK nebo rozhraní příkazového řádku, aktualizace selže s touto chybovou zprávou:
Chyba:
{
"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."
}
}
Řešení
Tento problém zahrnuje ID ARM ve materialization_identity
formátu ID ARM.
V uživatelském rozhraní Azure nebo sadě SDK používá ID ARM spravované identity přiřazené uživatelem malé písmeno resourcegroups
. Podívejte se na tento příklad:
- (A): /subscriptions/{sub-id}/resourcegroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
Když úložiště funkcí používá spravovanou identitu přiřazenou uživatelem jako materialization_identity, id ARM se normalizuje a uloží s resourceGroups
. Podívejte se na tento příklad:
- (B): /subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{your-uai}
V žádosti o aktualizaci můžete k aktualizaci úložiště funkcí použít identitu přiřazenou uživatelem, která odpovídá identitě materializace. Když použijete ID ARM ve formátu (A), při použití této spravované identity pro tento účel se aktualizace nezdaří a vrátí dřívější chybovou zprávu.
Pokud chcete tento problém vyřešit, nahraďte řetězec resourcegroups
v ID ARM spravované identity přiřazené uživatelem resourceGroups
. Pak znovu spusťte aktualizaci úložiště funkcí.
Chyby oprávnění RBAC
Aby uživatel vytvořil úložiště funkcí, potřebuje role Contributor
a User Access Administrator
role. Bude fungovat vlastní role, která pokrývá stejnou sadu rolí akcí. Bude fungovat také super sada těchto dvou rolí akcí.
Příznaky
Pokud uživatel nemá požadované role, nasazení selže. Odpověď na chybu může vypadat takto:
{
"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."
}
}
Řešení
Contributor
Udělte uživateli role ve User Access Administrator
skupině prostředků, ve které se vytváří úložiště funkcí. Pak požádejte uživatele, aby nasazení spustil znovu.
Další informace najdete v části Oprávnění požadovaná pro feature store materialization managed identity
prostředek role .
Starší verze balíčku azure-mgmt-authorization nefungují s AzureMLOnBehalfOfCredential
Příznaky
V úložišti azureml-examples použijete setup_storage_uai
skript zadaný ve složce featurestore_sample , skript selže s touto chybovou zprávou:
AttributeError: 'AzureMLOnBehalfOfCredential' object has no attribute 'signed_session'
Řešení:
Zkontrolujte verzi nainstalovaného azure-mgmt-authorization
balíčku a ověřte, že používáte nejnovější verzi aspoň 3.0.0 nebo novější. Starší verze , například 0.61.0 , nefunguje s AzureMLOnBehalfOfCredential
.
Chyby vytvoření specifikace sady funkcí
- Neplatné schéma ve specifikaci sady funkcí
- Nejde najít transformační třídu
- FileNotFoundError ve složce kódu
Neplatné schéma ve specifikaci sady funkcí
Než zaregistrujete sadu funkcí do úložiště funkcí, definujte specifikaci sady funkcí místně a spusťte <feature_set_spec>.to_spark_dataframe()
ji, abyste ji ověřili.
Příznaky
Při spuštění <feature_set_spec>.to_spark_dataframe()
uživatele může dojít k různým selháním ověření schématu, pokud schéma datového rámce sady funkcí neodpovídá definici specifikace sady funkcí.
Příklad:
- Chybová zpráva:
azure.ai.ml.exceptions.ValidationException: Schema check errors, timestamp column: timestamp is not in output dataframe
- Chybová zpráva:
Exception: Schema check errors, no index column: accountID in output dataframe
- Chybová zpráva:
ValidationException: Schema check errors, feature column: transaction_7d_count has data type: ColumnType.long, expected: ColumnType.string
Řešení
Zkontrolujte chybu selhání ověření schématu a odpovídajícím způsobem aktualizujte definici specifikace sady funkcí pro názvy sloupců i typy. Příklad:
- Aktualizujte
source.timestamp_column.name
vlastnost tak, aby správně definovala názvy sloupců časového razítka. - aktualizujte
index_columns
vlastnost tak, aby správně definovala sloupce indexu. - aktualizujte
features
vlastnost tak, aby správně definovala názvy a typy sloupců funkcí. - Pokud jsou zdrojová data funkce typu CSV, ověřte, že se soubory CSV generují se záhlavími sloupců.
Pak znovu spusťte <feature_set_spec>.to_spark_dataframe()
kontrolu, jestli ověření proběhlo úspěšně.
Místo ručního zadávání hodnot, pokud sada SDK definuje specifikaci sady funkcí, infer_schema
doporučuje se tato možnost také jako upřednostňovaný způsob automatického features
vyplňování . index columns
A timestamp_column
nejde ho automaticky vyplňovat.
Další informace najdete v prostředku schématu specifikace sady funkcí.
Nejde najít transformační třídu
Příznaky
Když uživatel spustí <feature_set_spec>.to_spark_dataframe()
, vrátí tuto chybu: AttributeError: module '<...>' has no attribute '<...>'
Příklad:
AttributeError: module '7780d27aa8364270b6b61fed2a43b749.transaction_transform' has no attribute 'TransactionFeatureTransformer1'
Řešení
Očekává se, že třída transformace funkcí bude mít její definici v souboru Pythonu pod kořenem složky kódu. Složka kódu může obsahovat jiné soubory nebo podsložky.
Nastavte hodnotu feature_transformation_code.transformation_class
vlastnosti na <py file name of the transformation class>.<transformation class name>
hodnotu .
Pokud například složka kódu vypadá takto:
code
/
└–my_transformation_class.py
a soubor my_transformation_class.py definuje MyFeatureTransformer
třídu, set
feature_transformation_code.transformation_class
být my_transformation_class.MyFeatureTransformer
FileNotFoundError ve složce kódu
Příznaky
K této chybě může dojít v případě ručního vytvoření specifikace YAML sady funkcí a sada SDK sadu funkcí nevygeneruje. Příkaz
runs <feature_set_spec>.to_spark_dataframe()
vrátí chybu.
FileNotFoundError: [Errno 2] No such file or directory: ....
Řešení
Zkontrolujte složku kódu. Měla by se jednat o podsložku pod složkou specifikace sady funkcí. Ve specifikaci sady funkcí nastavte feature_transformation_code.path
relativní cestu ke složce specifikace sady funkcí. Příklad:
feature set spec folder
/
├-- kód/
├...– my_transformer.py
└–my_orther_folder
└-- FeatureSetSpec.yaml
V tomto příkladu feature_transformation_code.path
by vlastnost v YAML měla být ./code
Poznámka:
Když použijete funkci create_feature_set_spec k azureml-featurestore
vytvoření objektu Python FeatureSetSpec, může jako hodnotu převzít libovolnou místní složku feature_transformation_code.path
. Když FeatureSetSpec objekt je výpisem pro vytvoření specifikace sady funkcí yaml v cílové složce, cesta kódu se zkopíruje do cílové složky a feature_transformation_code.path
vlastnost se aktualizuje ve specifikaci yaml.
Chyby CRUD sady funkcí
Funkce GET selže kvůli neplatné funkci FeatureStoreEntity
Příznaky
Když použijete klienta CRUD úložiště funkcí k získání sady funkcí , například " fs_client.feature_sets.get(name, version)
' – může se zobrazit tato chyba:
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
K této chybě může dojít také v úloze materializace FeatureStore, kde úloha selže se stejným trasováním chyb zpět.
Řešení
Spuštění relace poznámkového bloku s novou verzí sady SDKS
- Pokud používá azure-ai-ml, aktualizujte na
azure-ai-ml==1.8.0
. - Pokud používá sadu SDK datového roviny úložiště funkcí, aktualizujte ji na
azureml-featurestore== 0.1.0b2
.
V relaci poznámkového bloku aktualizujte entitu úložiště funkcí tak, aby nastavila její stage
vlastnost, jak je znázorněno v tomto příkladu:
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())
Když definujete FeatureStoreEntity, nastavte vlastnosti tak, aby odpovídaly vlastnostem použitým při jeho vytvoření. Jediným rozdílem stage
je přidání vlastnosti.
begin_create_or_update()
Jakmile se volání úspěšně vrátí, další feature_sets.get()
volání a další úloha materializace by měla proběhnout úspěšně.
Úloha načítání funkcí a chyby dotazů
- Chyby řešení specifikace načítání funkcí
- Soubor feature_retrieval_spec.yaml nebyl nalezen při použití modelu jako vstupu do úlohy načtení funkce.
- Data pozorování nejsou připojena k žádným hodnotám funkcí.
- Uživatel nebo spravovaná identita nemá pro úložiště funkcí správná oprávnění RBAC.
- Uživatel nebo spravovaná identita nemá správná oprávnění RBAC ke čtení ze zdrojového úložiště nebo offline úložiště.
- Trénovací úloha nečte data vygenerovaná komponentou načítání funkcí sestavení
generate_feature_retrieval_spec()
selhání kvůli použití specifikace místní sady funkcí- Dotaz
get_offline_features()
trvá dlouhou dobu.
Pokud úloha načítání funkce selže, zkontrolujte podrobnosti o chybě. Přejděte na stránku podrobností o spuštění, vyberte kartu Výstupy a protokoly a prozkoumejte soubor logs/azureml/driver/stdout .
Pokud uživatel spustí get_offline_feature()
dotaz v poznámkovém bloku, výstupy buněk zobrazí přímo chybu.
Chyby řešení specifikace načítání funkcí
Příznaky
Dotaz nebo úloha načítání funkcí zobrazuje tyto chyby:
- Neplatná funkce
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
- Neplatný identifikátor URI úložiště funkcí:
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"
- Neplatná sada funkcí:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."
Řešení
Zkontrolujte obsah, feature_retrieval_spec.yaml
který úloha používá. Ověřte, že všechny názvy úložiště funkcí
- Identifikátor URI
- název nebo verze sady funkcí
- funkce
jsou platné a existují v úložišti funkcí.
Pokud chcete vybrat funkce z úložiště funkcí a vygenerovat soubor YAML specifikace načítání funkcí, doporučujeme použít funkci nástroje.
Tento fragment kódu používá generate_feature_retrieval_spec
funkci nástroje.
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)
Soubor feature_retrieval_spec.yaml nebyl nalezen při použití modelu jako vstupu do úlohy načtení funkce.
Příznaky
Pokud jako vstup úlohy načítání funkcí použijete zaregistrovaný model, úloha selže s touto chybou:
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
Řešení:
Když zadáte model jako vstup do kroku načtení funkce, model očekává, že najde soubor YAML pro načtení specifikace YAML ve složce artefaktů modelu. Úloha selže, pokud tento soubor chybí.
Pokud chcete tento problém vyřešit, zabalte feature_retrieval_spec.yaml
soubor do kořenové složky složky artefaktů modelu před registrací modelu.
Data pozorování se nepřipojila k žádným hodnotám funkcí.
Příznaky
Jakmile uživatelé spustí dotaz nebo úlohu načítání funkcí, výstupní data nezískají žádné hodnoty funkcí. Uživatel například spustí úlohu načtení funkce, která načte transaction_amount_3d_avg
funkce a transaction_amount_7d_avg
funkce s těmito výsledky:
transactionID | accountID | časové razítko | 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 |
Řešení
Načtení funkce provede dotaz spojení k určitému bodu v čase. Pokud se výsledek spojení zobrazí prázdný, vyzkoušejte tato potenciální řešení:
temporal_join_lookback
Rozšiřte rozsah definice specifikace sady funkcí nebo ho dočasně odeberte. Díky tomu se spojení k určitému bodu v čase může vrátit k minulosti (nebo nekonečně) před časovým razítkem události pozorování a najít hodnoty funkcí.- Pokud
source.source_delay
je také nastavena v definici specifikace sady funkcí, ujistěte se, žetemporal_join_lookback > source.source_delay
.
Pokud žádná z těchto řešení nefunguje, získejte sadu funkcí z úložiště funkcí a spusťte <feature_set>.to_spark_dataframe()
, abyste ručně zkontrolovali sloupce a časové razítka indexu funkcí. K selhání může dojít z následujících důvodů:
- hodnoty indexu v datech pozorování neexistují v datovém rámci sady funkcí.
- neexistuje žádná hodnota funkce s hodnotou časového razítka před časovým razítkem pozorování.
V takových případech, pokud funkce povolila offline materializaci, může být potřeba znovu doplnit další data o funkcích.
Uživatel nebo spravovaná identita nemá pro úložiště funkcí správná oprávnění RBAC.
Příznaky:
Úloha načtení funkce nebo dotaz selže s touto chybovou zprávou v souboru 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
Řešení:
Pokud úloha načtení funkce používá spravovanou identitu, přiřaďte
AzureML Data Scientist
k identitě roli v úložišti funkcí.Pokud k problému dojde, když
- Uživatel spustí kód v poznámkovém bloku Spark služby Azure Machine Learning.
- tento poznámkový blok používá pro přístup ke službě Azure Machine Learning vlastní identitu uživatele.
AzureML Data Scientist
přiřaďte roli v úložišti funkcí identitě Microsoft Entra uživatele.
Azure Machine Learning Data Scientist
je doporučená role. Uživatel může vytvořit vlastní roli pomocí následujících akcí.
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Další informace o nastavení RBAC najdete v tématu Správa přístupu k spravované uložiště funkcí prostředku.
Uživatel nebo spravovaná identita nemá správná oprávnění RBAC ke čtení ze zdrojového úložiště nebo offline úložiště.
Příznaky
Úloha načtení funkce nebo dotaz selže s následující chybovou zprávou v souboru 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)
Řešení:
- Pokud úloha načítání funkce používá spravovanou identitu, přiřaďte
Storage Blob Data Reader
k identitě roli ve zdrojovém i offline úložišti. - K této chybě dochází v případě, že poznámkový blok používá identitu uživatele pro přístup ke službě Azure Machine Learning ke spuštění dotazu. Pokud chcete tuto chybu vyřešit, přiřaďte
Storage Blob Data Reader
roli identitě uživatele ve zdrojovém úložišti a účtu úložiště offline.
Storage Blob Data Reader
je minimální doporučený požadavek na přístup. Uživatelé můžou také přiřazovat role – například Storage Blob Data Contributor
Storage Blob Data Owner
nebo – s více oprávněními.
Trénovací úloha nečte data vygenerovaná komponentou načítání funkcí sestavení
Příznaky
Trénovací úloha selže s chybovou zprávou, že trénovací data neexistují, formát je nesprávný nebo došlo k chybě analyzátoru:
FileNotFoundError: [Errno 2] No such file or directory
- formát není správný.
ParserError:
Řešení
Integrovaná komponenta načítání funkcí má jeden výstup: output_data
. Výstupní data jsou datovým prostředkem uri_folder. Vždy má tuto strukturu složek:
<training data folder>
/
├── data/
│ ├── xxxxx.parquet
│ └── xxxxx.parquet
└── feature_retrieval_spec.yaml
Výstupní data jsou vždy ve formátu parquet. Aktualizujte trénovací skript tak, aby četl z podsložky „data“, a načtěte data jako parquet.
generate_feature_retrieval_spec()
selhání kvůli použití specifikace místní sady funkcí
Příznaky:
Tento kód Pythonu vygeneruje specifikaci načtení funkce pro daný seznam funkcí:
featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)
Pokud seznam funkcí obsahuje funkce definované specifikací místní sady funkcí, generate_feature_retrieval_spec()
chyba s touto chybovou zprávou:
AttributeError: 'FeatureSetSpec' object has no attribute 'id'
Řešení:
Specifikace načítání funkcí se dá vygenerovat pouze pomocí sad funkcí registrovaných v úložišti funkcí. Problém vyřešíte tak, že:
- Registrace specifikace místní sady funkcí jako sady funkcí v úložišti funkcí
- Získání registrované sady funkcí
- Opětovné vytvoření seznamů funkcí pomocí jenom funkcí z registrovaných sad funkcí
- Generování specifikace načítání funkcí pomocí seznamu nových funkcí
Dotaz get_offline_features()
trvá dlouhou dobu.
Příznaky:
Spuštění get_offline_features
pro generování trénovacích dat pomocí několika funkcí z úložiště funkcí trvá příliš dlouho.
Řešení:
Zkontrolujte tyto konfigurace:
- Ověřte, že každá sada funkcí použitá v dotazu je nastavená
temporal_join_lookback
ve specifikaci sady funkcí. Nastavte jeho hodnotu na menší hodnotu. - Pokud je okno velikosti a časového razítka v datovém rámci pozorování velké, nakonfigurujte relaci poznámkového bloku (nebo úlohu) tak, aby zvětšil velikost (paměť a jádro) ovladače a exekutoru. Navíc zvyšte počet exekutorů.
Chyby úlohy materializace funkcí
- Neplatná konfigurace offline úložiště
- Identita materializace nemá pro úložiště funkcí správná oprávnění RBAC.
- Identita materializace nemá správná oprávnění RBAC ke čtení z úložiště
- Identita materializace nemá oprávnění RBAC k zápisu dat do offline úložiště.
- Výsledky spuštění úlohy streamování do poznámkového bloku způsobí selhání
- Neplatná konfigurace Sparku
Pokud se úloha materializace funkcí nezdaří, pomocí následujícího postupu zkontrolujte podrobnosti o selhání úlohy:
- Přejděte na stránku úložiště funkcí: https://ml.azure.com/featureStore/{your-feature-store-name}.
- Přejděte na
feature set
kartu, vyberte příslušnou sadu funkcí a přejděte na stránku podrobností sady funkcí. - Na stránce podrobností sady funkcí vyberte
Materialization jobs
kartu a pak ji výběrem neúspěšné úlohy otevřete v zobrazení podrobností úlohy. - V zobrazení
Properties
podrobností úlohy na kartě zkontrolujte stav úlohy a chybovou zprávu. - Můžete také přejít na
Outputs + logs
kartu a pak soubor najítstdout
zelogs\azureml\driver\stdout
souboru.
Po použití opravy můžete ručně aktivovat úlohu materializace obnovení, abyste ověřili, že oprava funguje.
Neplatná konfigurace offline úložiště
Příznaky
Úloha materializace selže s touto chybovou zprávou logs/azureml/driver/stdout
v souboru:
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
Řešení
Pomocí sady SDK zkontrolujte cíl offline úložiště definovaný v úložišti funkcí:
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
Můžete také zkontrolovat cíl offline úložiště na stránce přehledu uživatelského rozhraní úložiště funkcí. Ověřte, že úložiště i kontejner existují a že cíl má tento formát:
/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{storage}/blobServices/default/containers/{container-name}
Identita materializace nemá pro úložiště funkcí správná oprávnění RBAC.
Příznaky:
Úloha materializace selže s touto chybovou zprávou v souboru 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
Řešení:
Přiřaďte roli Azure Machine Learning Data Scientist
v úložišti funkcí identitě materializace (spravované identitě přiřazené uživatelem) úložiště funkcí.
Azure Machine Learning Data Scientist
je doporučená role. Vlastní roli můžete vytvořit pomocí těchto akcí:
- Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
- Microsoft.MachineLearningServices/workspaces/featuresets/read
- Microsoft.MachineLearningServices/workspaces/read
Další informace najdete v části Oprávnění požadovaná pro feature store materialization managed identity
prostředek role .
Identita materializace nemá správná oprávnění RBAC ke čtení z úložiště
Příznaky
Úloha materializace selže s touto chybovou zprávou v souboru 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)
Řešení:
Storage Blob Data Reader
Přiřaďte roli ve zdrojovém úložišti k identitě materializace (spravovaná identita přiřazená uživatelem) úložiště funkcí.
Storage Blob Data Reader
je minimální doporučený požadavek na přístup. Můžete také přiřadit role s více oprávněními , Storage Blob Data Contributor
Storage Blob Data Owner
například .
Další informace o konfiguraci RBAC najdete v části Oprávnění požadovaná pro feature store materialization managed identity
prostředek role .
Identita materializace nemá správná oprávnění RBAC k zápisu dat do offline úložiště
Příznaky
Úloha materializace selže s touto chybovou zprávou v souboru 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
Řešení
Storage Blob Data Reader
Přiřaďte roli ve zdrojovém úložišti k identitě materializace (spravovaná identita přiřazená uživatelem) úložiště funkcí.
Storage Blob Data Contributor
je minimální doporučený požadavek na přístup. Můžete také přiřadit role s více oprávněními , například Storage Blob Data Owner
.
Další informace o konfiguraci RBAC najdete v části Oprávnění požadovaná pro feature store materialization managed identity
prostředek role .
Výstup úlohy streamování do poznámkového bloku způsobí selhání
Příznaky:
Při použití klienta CRUD úložiště funkcí ke streamování výsledků materializační úlohy do poznámkového bloku pomocí fs_client.jobs.stream("<job_id>")
volání sady SDK dojde k chybě.
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.
Řešení:
Při vytvoření úlohy materializace (například voláním zpětného vyplňování) může trvat několik sekund, než se úloha správně inicializuje. jobs.stream()
Spusťte příkaz znovu o několik sekund později. Tím by se měl problém vyřešit.
Neplatná konfigurace Sparku
Příznaky:
Úloha materializace selže s touto chybovou zprávou:
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]"
}
Řešení:
materialization_settings.spark_configuration{}
Aktualizujte sadu funkcí. Ujistěte se, že tyto parametry používají množství velikosti paměti i celkový počet základních hodnot, které jsou menší než typ instance, jak je definováno materialization_settings.resource
, poskytuje:
spark.driver.cores
spark.driver.memory
spark.executor.cores
spark.executor.memory
Například typ instance standard_e8s_v3 je tato konfigurace Sparku jednou z platných možností:
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)