Dela via


Felsöka hanterad funktionsbutik

I den här artikeln får du lära dig hur du felsöker vanliga problem som kan uppstå med hanterad funktionsbutik i Azure Machine Learning.

Problem med att skapa och uppdatera ett funktionsarkiv

Du kan stöta på följande problem när du skapar eller uppdaterar ett funktionsarkiv:

ARM-begränsningsfel

Symptom

Det går inte att skapa eller uppdatera funktionsarkivet. Felet kan se ut så här:

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

Lösning

Kör åtgärden skapa/uppdatera funktionsarkivet vid ett senare tillfälle. Distributionen sker i flera steg, så det andra försöket kan misslyckas eftersom vissa resurser redan finns. Ta bort dessa resurser och återuppta jobbet.

ARM-ID-problem vid duplicerad materialiseringsidentitet

När funktionsarkivet har uppdaterats för att aktivera materialisering för första gången kan vissa senare uppdateringar i funktionsarkivet resultera i det här felet.

Symptom

När funktionsarkivet uppdateras med hjälp av SDK/CLI misslyckas uppdateringen med det här felmeddelandet:

Fel:

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

Lösning

Problemet gäller ARM-ID för materialization_identity ARM-ID-formatet.

Från Azure UI eller SDK använder ARM-ID:t för den användartilldelade hanterade identiteten gemener resourcegroups. Se det här exemplet:

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

När funktionsarkivet använder den användartilldelade hanterade identiteten som sin materialization_identity normaliseras och lagras arm-ID:t med resourceGroups. Se det här exemplet:

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

I uppdateringsbegäran kan du använda en användartilldelad identitet som matchar materialiseringsidentiteten för att uppdatera funktionsarkivet. När du använder ARM-ID:t i format (A) misslyckas uppdateringen när du använder den hanterade identiteten för det ändamålet och returnerar det tidigare felmeddelandet.

Åtgärda problemet genom att ersätta strängen resourcegroups med resourceGroups i arm-ID:t för den användartilldelade hanterade identiteten. Kör sedan funktionslagringsuppdateringen igen.

RBAC-behörighetsfel

För att skapa ett funktionslager behöver användaren rollerna Contributor och User Access Administrator . En anpassad roll som täcker samma uppsättning roller för åtgärderna fungerar. En superuppsättning av de två rollerna för åtgärderna fungerar också.

Symptom

Om användaren inte har de roller som krävs misslyckas distributionen. Felsvaret kan se ut så här:

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

Lösning

Bevilja rollerna Contributor och User Access Administrator till användaren i resursgruppen där funktionsarkivet skapas. Instruera sedan användaren att köra distributionen igen.

Mer information finns i Behörigheter som krävs för rollresursenfeature store materialization managed identity.

Äldre versioner av azure-mgmt-authorization-paketet fungerar inte med AzureMLOnBehalfOfCredential

Symptom

I azureml-examples-lagringsplatsen, När du använder skriptet setup_storage_uai som anges i mappen featurestore_sample , misslyckas skriptet med det här felmeddelandet:

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

Lösning:

Kontrollera versionen av det installerade azure-mgmt-authorization paketet och kontrollera att du använder en ny version, minst 3.0.0 eller senare. En äldre version – till exempel 0.61.0 – fungerar inte med AzureMLOnBehalfOfCredential.

Skapa fel för funktionsuppsättningsspecifikation

Ogiltigt schema i funktionsuppsättningsspecifikationen

Innan du registrerar en funktionsuppsättning i funktionsarkivet definierar du funktionsuppsättningsspecifikationen lokalt och kör <feature_set_spec>.to_spark_dataframe() för att verifiera den.

Symptom

När en användare kör <feature_set_spec>.to_spark_dataframe()kan olika schemavalideringsfel inträffa om funktionsuppsättningens dataramschema inte överensstämmer med funktionsuppsättningens specifikationsdefinition.

Till exempel:

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

Lösning

Kontrollera fel vid schemavalidering och uppdatera funktionsuppsättningens specifikationsdefinition i enlighet med detta för både kolumnnamnen och typerna. Till exempel:

  • uppdatera egenskapen source.timestamp_column.name för att korrekt definiera tidsstämpelkolumnnamnen
  • uppdatera egenskapen index_columns för att korrekt definiera indexkolumnerna
  • features uppdatera egenskapen för att korrekt definiera namn och typer av funktionskolumner
  • Om funktionskällans data är av typen csv kontrollerar du att CSV-filerna genereras med kolumnrubriker

Kör <feature_set_spec>.to_spark_dataframe() sedan igen för att kontrollera om verifieringen har godkänts.

Om SDK:t definierar funktionsuppsättningsspecifikationen infer_schema i stället för att skriva in värdena manuellt rekommenderas även alternativet som det bästa sättet att fylla featuresi automatiskt . Och timestamp_column index columns kan inte fyllas automatiskt.

Mer information finns i schemaresursen Funktionsuppsättningsspecifikation.

Det går inte att hitta transformeringsklassen

Symptom

När en användare kör <feature_set_spec>.to_spark_dataframe()returneras det här felet: AttributeError: module '<...>' has no attribute '<...>'

Till exempel:

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

Lösning

Funktionstransformeringsklassen förväntas ha sin definition i en Python-fil under roten i kodmappen. Kodmappen kan ha andra filer eller undermappar.

Ange värdet för feature_transformation_code.transformation_class egenskapen till <py file name of the transformation class>.<transformation class name>.

Om kodmappen till exempel ser ut så här

code/
└my_transformation_class.py

och filen my_transformation_class.py definierar MyFeatureTransformer klassen, anger

feature_transformation_code.transformation_class som ska my_transformation_class.MyFeatureTransformer

FileNotFoundError i kodmappen

Symptom

Det här felet kan inträffa om funktionsuppsättningsspecifikationen YAML skapas manuellt och SDK:t inte genererar funktionsuppsättningen. Kommandot

runs <feature_set_spec>.to_spark_dataframe()

returnerar fel

FileNotFoundError: [Errno 2] No such file or directory: ....

Lösning

Kontrollera kodmappen. Det bör vara en undermapp under funktionsuppsättningens specifikationsmapp. I funktionsuppsättningsspecifikationen anger du feature_transformation_code.path som en relativ sökväg till funktionsuppsättningens specifikationsmapp. Till exempel:

feature set spec folder/
kod/
│ my_transformer.py
│ └my_orther_folder
└└-- funktionersetSpec.yaml

I det här exemplet feature_transformation_code.path ska egenskapen i YAML vara ./code

Kommentar

När du använder funktionen create_feature_set_spec i azureml-featurestore för att skapa ett FeatureSetSpec python-objekt kan det ta vilken lokal mapp som helst som feature_transformation_code.path värde. När Objektet FeatureSetSpec dumpas för att bilda en funktionsuppsättningsspecifikation i en målmapp kopieras kodsökvägen till målmappen feature_transformation_code.path och egenskapen uppdateras i specifikationen yaml.

Crud-fel för funktionsuppsättning

Funktionsuppsättningen GET misslyckas på grund av ogiltig FeatureStoreEntity

Symptom

När du använder CRUD-klienten för funktionsarkivet för att hämta en funktionsuppsättning – till exempel fs_client.feature_sets.get(name, version)"" – kan det här felet uppstå:


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

Det här felet kan också inträffa i materialiseringsjobbet i FeatureStore, där jobbet misslyckas med samma felspårning tillbaka.

Lösning

Starta en notebook-session med den nya versionen av SDKS

  • Om den använder azure-ai-ml uppdaterar du till azure-ai-ml==1.8.0.
  • Om den använder funktionslagringens dataplans-SDK uppdaterar du den till azureml-featurestore== 0.1.0b2.

I notebook-sessionen uppdaterar du funktionsarkivets entitet för att ange dess stage egenskap, som du ser i det här exemplet:

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

När du definierar FeatureStoreEntity anger du egenskaperna så att de matchar de egenskaper som användes när den skapades. Den enda skillnaden är att lägga till egenskapen stage .

När anropet begin_create_or_update() har returnerats ska nästa feature_sets.get() anrop och nästa materialiseringsjobb lyckas.

Funktionshämtningsjobb och frågefel

När ett funktionshämtningsjobb misslyckas kontrollerar du felinformationen. Gå till sidan körningsinformation, välj fliken Utdata + loggar och granska filen logs/azureml/driver/stdout .

Om användaren kör get_offline_feature() frågan i notebook-filen visas felet direkt i cellutdata.

Lösningsfel för funktionshämtningsspecifikation

Symptom

Frågan/jobbet för funktionshämtning visar följande fel:

  • Ogiltig funktion
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
  • Ogiltig funktionsarkiv-URI:
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"
  • Ogiltig funktionsuppsättning:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."

Lösning

Kontrollera innehållet i feature_retrieval_spec.yaml det jobb som används. Kontrollera att alla namn på funktionsarkivet

  • URI
  • funktionsuppsättningens namn/version
  • funktion

är giltiga och att de finns i funktionsarkivet.

Om du vill välja funktioner från ett funktionsarkiv och generera YAML-filen för funktionshämtningsspecifikation rekommenderas användning av verktygsfunktionen.

Det här kodfragmentet använder verktygsfunktionen generate_feature_retrieval_spec .

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)

Filen feature_retrieval_spec.yaml hittades inte när du använder en modell som indata till funktionshämtningsjobbet

Symptom

När du använder en registrerad modell som indata för funktionshämtningsjobb misslyckas jobbet med det här felet:

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

Lösning:

När du anger en modell som indata till funktionshämtningssteget förväntar sig modellen att hitta YAML-filen för hämtningsspecifikation under modellartefaktmappen. Jobbet misslyckas om filen saknas.

Åtgärda problemet genom att paketera feature_retrieval_spec.yaml filen i rotmappen i modellartefaktmappen innan du registrerar modellen.

Observationsdata är inte kopplade till några funktionsvärden

Symptom

När användarna har kört frågan/jobbet för funktionshämtning hämtar utdata inga funktionsvärden. En användare kör till exempel funktionshämtningsjobbet transaction_amount_3d_avg för att hämta funktionerna och transaction_amount_7d_avg med följande resultat:

transactionID accountID timestamp 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

Lösning

Funktionshämtningen kör en tidpunktsbaserad kopplingsfråga. Om kopplingsresultatet visas tomt kan du prova följande potentiella lösningar:

  • temporal_join_lookback Utöka intervallet i funktionsuppsättningens specifikationsdefinition eller ta bort det tillfälligt. Detta gör att punkt-i-tid-kopplingen kan se tillbaka längre (eller oändligt) in i det förflutna, före tidsstämpeln för observationshändelsen, för att hitta funktionsvärdena.
  • Om source.source_delay även anges i funktionsuppsättningens specifikationsdefinition kontrollerar du att temporal_join_lookback > source.source_delay.

Om ingen av dessa lösningar fungerar hämtar du funktionsuppsättningen från funktionsarkivet och kör <feature_set>.to_spark_dataframe() för att manuellt granska kolumnerna för funktionsindex och tidsstämplar. Felet kan inträffa eftersom:

  • indexvärdena i observationsdata finns inte i funktionsuppsättningens dataram
  • inget funktionsvärde, med ett tidsstämpelvärde innan tidsstämpeln för observation finns.

I dessa fall kan du behöva fylla på fler funktionsdata om funktionen är aktiverad offlinematerialisering.

Användaren eller den hanterade identiteten har inte rätt RBAC-behörighet i funktionsarkivet

Symptom:

Funktionshämtningsjobbet/frågan misslyckas med det här felmeddelandet i filen 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

Lösning:

  1. Om funktionshämtningsjobbet använder en hanterad identitet tilldelar du AzureML Data Scientist rollen i funktionsarkivet till identiteten.

  2. Om problemet uppstår när

  • användaren kör kod i en Azure Machine Learning Spark-notebook-fil
  • notebook-filen använder användarens egen identitet för att få åtkomst till Azure Machine Learning-tjänsten

AzureML Data Scientist tilldela rollen i funktionsarkivet till användarens Microsoft Entra-identitet.

Azure Machine Learning Data Scientist är en rekommenderad roll. Användaren kan skapa en egen anpassad roll med följande åtgärder

  • Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
  • Microsoft.MachineLearningServices/workspaces/featuresets/read
  • Microsoft.MachineLearningServices/workspaces/read

Mer information om RBAC-konfiguration finns i Hantera åtkomst till hanterad funktionsbutik resurs.

Användar- eller hanterad identitet har inte rätt RBAC-behörighet att läsa från källlagringsplatsen eller offlinearkivet

Symptom

Funktionshämtningsjobbet/frågan misslyckas med följande felmeddelande i filen 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)

Lösning:

  • Om funktionshämtningsjobbet använder en hanterad identitet tilldelar du Storage Blob Data Reader rollen på både källlagrings- och offlinelagringslagringen till identiteten.
  • Det här felet inträffar när notebook-filen använder användarens identitet för att komma åt Azure Machine Learning-tjänsten för att köra frågan. Lös felet genom att tilldela Storage Blob Data Reader rollen till användarens identitet på lagringskontot för källlagring och offlinelagring.

Storage Blob Data Reader är lägsta rekommenderade åtkomstbehörighet. Användare kan också tilldela roller – till exempel Storage Blob Data Contributor eller Storage Blob Data Owner – med fler behörigheter.

Träningsjobbet kan inte läsa data som genereras av komponenten för inbyggd funktionshämtning

Symptom

Ett träningsjobb misslyckas med felmeddelandet att träningsdata inte finns, att formatet är felaktigt eller att det finns ett parserfel:

FileNotFoundError: [Errno 2] No such file or directory
  • formatet är inte korrekt.
ParserError:

Lösning

Den inbyggda funktionshämtningskomponenten har bara output_data som utdata. Utdata är en datatillgång av typen uri_folder. Den har alltid den här mappstrukturen:

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

Utdata är alltid i parquet-format. Uppdatera träningsskriptet så att det läser från undermappen ”data” och läs data som parquet.

generate_feature_retrieval_spec() misslyckas på grund av användning av specifikationen för lokal funktionsuppsättning

Symptom:

Den här Python-koden genererar en funktionshämtningsspecifikation på en viss lista över funktioner:

featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)

Om funktionslistan innehåller funktioner som definierats av en lokal funktionsuppsättningsspecifikation misslyckas generate_feature_retrieval_spec() med det här felmeddelandet:

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

Lösning:

En funktionshämtningsspecifikation kan bara genereras med hjälp av funktionsuppsättningar som registrerats i Funktionsarkiv. Så här åtgärdar du problemet:

  • Registrera den lokala funktionsuppsättningsspecifikationen som en funktionsuppsättning i funktionsarkivet
  • Hämta den registrerade funktionsuppsättningen
  • Skapa funktionslistor igen med endast funktioner från registrerade funktionsuppsättningar
  • Generera funktionshämtningsspecifikationen med hjälp av den nya funktionslistan

Frågan get_offline_features() tar lång tid

Symptom:

Det get_offline_features tar för lång tid att köra för att generera träningsdata med hjälp av några funktioner från funktionsarkivet.

Lösningar:

Kontrollera dessa konfigurationer:

  • Kontrollera att varje funktionsuppsättning som används i frågan har temporal_join_lookback angetts i funktionsuppsättningsspecifikationen. Ange dess värde till ett mindre värde.
  • Om storleks- och tidsstämpelfönstret på observationsdataramen är stort konfigurerar du notebook-sessionen (eller jobbet) för att öka storleken (minne och kärna) för drivrutinen och kören. Öka dessutom antalet utförare.

Fel vid funktionsmaterialiseringsjobb

När funktionsmaterialetiseringsjobbet misslyckas följer du dessa steg för att kontrollera information om jobbfel:

  1. Gå till sidan för funktionsbutiken: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Gå till fliken feature set , välj relevant funktionsuppsättning och gå till detaljsidan funktionsuppsättning.
  3. Från detaljsidan för funktionsuppsättning väljer du fliken Materialization jobs och väljer sedan det misslyckade jobbet för att öppna det i jobbinformationsvyn.
  4. Granska jobbstatusen och felmeddelandet under Properties kortet i jobbinformationsvyn.
  5. Du kan också gå till fliken Outputs + logs och sedan hitta stdout filen från logs\azureml\driver\stdout filen.

När du har tillämpat en korrigering kan du manuellt utlösa ett materialiseringsjobb för återfyllnad för att kontrollera att korrigeringen fungerar.

Ogiltig offlinelagringskonfiguration

Symptom

Materialiseringsjobbet misslyckas med det här felmeddelandet logs/azureml/driver/stdout i filen:

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

Lösning

Använd SDK för att kontrollera det offlinelagringsmål som definierats i funktionsarkivet:


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

Du kan också kontrollera offlinelagringsmålet på översiktssidan för funktionsarkivets användargränssnitt. Kontrollera att både lagringen och containern finns och att målet har det här formatet:

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

Materialiseringsidentiteten har inte rätt RBAC-behörighet i funktionsarkivet

Symptom:

Materialiseringsjobbet misslyckas med det här felmeddelandet i filen 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

Lösning:

Tilldela rollen Azure Machine Learning Data Scientist för funktionsbutiken till materialiseringsidentiteten (en användartilldelad hanterad identitet) för funktionsbutiken.

Azure Machine Learning Data Scientist är en rekommenderad roll. Du kan skapa en egen anpassad roll med följande åtgärder:

  • Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action
  • Microsoft.MachineLearningServices/workspaces/featuresets/read
  • Microsoft.MachineLearningServices/workspaces/read

Mer information finns i Behörigheter som krävs för rollresursenfeature store materialization managed identity.

Materialiseringsidentiteten har inte rätt RBAC-behörighet att läsa från lagringen

Symptom

Materialiseringsjobbet misslyckas med det här felmeddelandet i filen 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)

Lösning:

Storage Blob Data Reader Tilldela rollen på källlagringen till materialiseringsidentiteten (en användartilldelad hanterad identitet) för funktionsarkivet.

Storage Blob Data Reader är lägsta rekommenderade åtkomstbehörighet. Du kan också tilldela roller med fler behörigheter – till exempel Storage Blob Data Contributor eller Storage Blob Data Owner.

Mer information om RBAC-konfiguration finns i Behörigheter som krävs för rollresursenfeature store materialization managed identity.

Materialiseringsidentiteten har inte rätt RBAC-behörighet att skriva data till offlinearkivet

Symptom

Materialiseringsjobbet misslyckas med det här felmeddelandet i filen 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

Lösning

Storage Blob Data Reader Tilldela rollen på källlagringen till materialiseringsidentiteten (en användartilldelad hanterad identitet) för funktionsarkivet.

Storage Blob Data Contributor är lägsta rekommenderade åtkomstbehörighet. Du kan också tilldela roller med fler behörigheter , till exempel Storage Blob Data Owner.

Mer information om RBAC-konfiguration finns i Behörigheter som krävs för rollresursenfeature store materialization managed identity.

Direktuppspelning av jobbutdata till en notebook-fil resulterar i fel

Symptom:

När du använder CRUD-klienten för funktionsarkivet för att strömma materialiseringsjobbresultat till en notebook-fil fs_client.jobs.stream("<job_id>")misslyckas SDK-anropet med ett fel

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.

Lösning:

När materialiseringsjobbet skapas (till exempel av ett återfyllnadsanrop) kan det ta några sekunder innan jobbet initieras korrekt. jobs.stream() Kör kommandot igen några sekunder senare. Detta bör lösa problemet.

Ogiltig Spark-konfiguration

Symptom:

Ett materialiseringsjobb misslyckas med det här felmeddelandet:

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

}

Lösning:

materialization_settings.spark_configuration{} Uppdatera funktionsuppsättningen. Kontrollera att dessa parametrar använder både minnesstorleksmängder och ett totalt antal kärnvärden, som båda är mindre än vad instanstypen, enligt definitionen i materialization_settings.resource, ger:

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

Till exempel, för instanstyp standard_e8s_v3 är den här Spark-konfigurationen ett av de giltiga alternativen:


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)

Nästa steg