Sdílet prostřednictvím


Ř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

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í

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 featuresvyplň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ů

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, že temporal_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í:

  1. Pokud úloha načtení funkce používá spravovanou identitu, přiřaďte AzureML Data Scientist k identitě roli v úložišti funkcí.

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

Pokud se úloha materializace funkcí nezdaří, pomocí následujícího postupu zkontrolujte podrobnosti o selhání úlohy:

  1. Přejděte na stránku úložiště funkcí: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Přejděte na feature set kartu, vyberte příslušnou sadu funkcí a přejděte na stránku podrobností sady funkcí.
  3. 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.
  4. V zobrazení Properties podrobností úlohy na kartě zkontrolujte stav úlohy a chybovou zprávu.
  5. Můžete také přejít na Outputs + logs kartu a pak soubor najít stdout ze logs\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 Ownernapří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)

Další kroky