Compartir a través de


Solución de problemas del almacén de características gestionado

En este artículo, aprenderá a solucionar problemas comunes que podría encontrar con el almacén de características gestionado en Azure Machine Learning.

Problemas encontrados al crear y actualizar un almacén de características

Es posible que encuentre los siguientes problemas al crear o actualizar un almacén de características:

Errores de limitación ARM

Síntoma

Se produce un error de creación o actualización del almacén de características. Es posible que el error tenga este aspecto:

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

Solución

Ejecute la operación de creación o actualización del almacén de características más adelante. La implementación se produce en varios pasos, por lo que se podría producir un error en el segundo intento debido a que algunos de los recursos ya existen. Elimine esos recursos y reanude el trabajo.

Problema de id. de ARM de identidad de materialización duplicada

Una vez que se actualiza el almacén de características para habilitar la materialización por primera vez, algunas actualizaciones posteriores en el almacén de características podrían producir este error.

Síntoma

Cuando el almacén de características se actualiza mediante el SDK o la CLI, se produce un error en la actualización con este mensaje de error:

Error:

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

Solución

El problema implica el id. de ARM del formato materialization_identity de id. de ARM.

Desde la interfaz de usuario o el SDK de Azure, el id. de ARM de la identidad administrada asignada por el usuario usa resourcegroups en minúsculas. Consulte este ejemplo:

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

Cuando el almacén de características usa la identidad administrada asignada por el usuario como su valor materialization_identity, su id. de ARM se normaliza y almacena, con resourceGroups. Consulte este ejemplo:

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

En la solicitud de actualización, puede usar una identidad asignada por el usuario que coincida con la identidad de materialización para actualizar el almacén de características. Mientras se usa el identificador de ARM en formato (A), cuando se usa esa identidad administrada para ese propósito, se produce un error en la actualización y se devuelve el mensaje de error anterior.

Para corregir el problema, reemplace la cadena resourcegroups por resourceGroups en el identificador de ARM de la identidad administrada asignada por el usuario. Después, vuelva a ejecutar la actualización del almacén de características.

Errores de permisos RBAC

Para crear un almacén de características, el usuario necesita los roles Contributor y User Access Administrator. Servirá un rol personalizado que cubre el mismo conjunto de roles de las acciones. También servirá un superconjunto de esos dos roles de las acciones.

Síntoma

Si el usuario no tiene los roles necesarios, la implementación produce un error. La respuesta de error podría ser similar a la siguiente:

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

Solución

Conceda los roles Contributor y User Access Administrator al usuario en el grupo de recursos donde se crea el almacén de características. Después, indique al usuario que vuelva a ejecutar la implementación.

Para más información, visite el recurso Permisos necesarios para el rol feature store materialization managed identity.

Las versiones anteriores del paquete azure-mgmt-authorization no funcionan con AzureMLOnBehalfOfCredential

Síntoma

En el repositorio azureml-examples, cuando se usa el script setup_storage_uai proporcionado en la carpeta featurestore_sample, se produce un error en el script con este mensaje de error:

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

Solución:

Compruebe la versión del paquete azure-mgmt-authorization instalado y que usa una versión reciente, al menos la 3.0.0 o posterior. Un versión anterior, como 0.61.0, no funciona con AzureMLOnBehalfOfCredential.

Errores de creación de especificaciones del conjunto de características

Esquema no válido en la especificación del conjunto de características

Antes de registrar un conjunto de características en el almacén de características, defina la especificación del conjunto de características localmente y ejecute <feature_set_spec>.to_spark_dataframe() para validarla.

Síntoma

Cuando un usuario ejecuta <feature_set_spec>.to_spark_dataframe(), se pueden producir varios errores de validación de esquema si el esquema del dataframe del conjunto de características no coincide con la definición de la especificación del conjunto de características.

Por ejemplo:

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

Solución

Compruebe el error de validación del esquema y actualice la definición de especificación del conjunto de características según los nombres y tipos de columnas. Por ejemplo:

  • actualice la propiedad source.timestamp_column.name para definir los nombres de columna de marca de tiempo correctamente
  • actualice la propiedad index_columns para definir correctamente las columnas de índice
  • actualice la propiedad features para definir correctamente los tipos y nombres de columna de características
  • si los datos de origen de características son de tipo csv, compruebe que los archivos CSV se generan con encabezados de columna

A continuación, vuelva a ejecutar <feature_set_spec>.to_spark_dataframe() para comprobar si la validación se ha superado.

En lugar de escribir manualmente los valores, si el SDK define la especificación del conjunto de características, también se recomienda la opción infer_schema como la manera preferida de rellenar features de forma automática. timestamp_column y index columns no se pueden rellenar automáticamente.

Para más información, visite el recurso Esquema de especificación del conjunto de características.

No se encuentra la clase de transformación

Síntoma

Cuando un usuario ejecuta <feature_set_spec>.to_spark_dataframe(), devuelve este error: AttributeError: module '<...>' has no attribute '<...>'

Por ejemplo:

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

Solución

Se espera que la clase de transformación de características se defina en un archivo de Python en la raíz de la carpeta de código. La carpeta de código puede tener otros archivos o subcarpetas.

Establezca el valor de la propiedad feature_transformation_code.transformation_class en <py file name of the transformation class>.<transformation class name>.

Por ejemplo, si la carpeta de código es similar a esta

code/
└── my_transformation_class.py

y el archivo my_transformation_class.py define la clase MyFeatureTransformer, establezca

feature_transformation_code.transformation_class en my_transformation_class.MyFeatureTransformer

FileNotFoundError en la carpeta de código

Síntoma

Este error se puede producir si se crea manualmente el archivo YAML de especificación del conjunto de características y el SDK no genera el conjunto de características. El comando

runs <feature_set_spec>.to_spark_dataframe()

devuelve el error

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

Solución

Compruebe la carpeta de código. Debe ser una subcarpeta en la carpeta de especificaciones del conjunto de características. En la especificación del conjunto de características, establezca feature_transformation_code.path como una ruta de acceso relativa a la carpeta de especificaciones del conjunto de características. Por ejemplo:

feature set spec folder/
├── code/
│ ├── my_transformer.py
│ └── my_orther_folder
└── FeatureSetSpec.yaml

En este ejemplo, la propiedad feature_transformation_code.path del archivo YAML debe ser ./code

Nota:

Al usar la función create_feature_set_spec de azureml-featurestore para crear un objeto FeatureSetSpec de Python, puede tomar cualquier carpeta local como valor feature_transformation_code.path. Cuando el objeto FeatureSetSpec se vuelca para crear un archivo YAML de especificación de conjunto de características en una carpeta de destino, la ruta de acceso del código se copia en la carpeta de destino y la propiedad feature_transformation_code.path se actualiza en el archivo YAML de especificación.

Errores CRUD del conjunto de características

Error GET del conjunto de características debido a un error de FeatureStoreEntity no válido

Síntoma

Al usar el cliente CRUD del almacén de características para aplicar GET a un conjunto de características, por ejemplo, fs_client.feature_sets.get(name, version)"`, es posible que vea este error:


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

Este error también se puede producir en el trabajo de materialización de FeatureStore, donde se produce un error en el trabajo con el mismo seguimiento de errores.

Solución

Inicio de una sesión de cuaderno con la nueva versión de SDKS

  • Si usa azure-ai-ml, actualice a azure-ai-ml==1.8.0.
  • Si usa el SDK de plano de datos del almacén de características, actualícelo a azureml-featurestore== 0.1.0b2.

En la sesión del cuaderno, actualice la entidad del almacén de características para establecer su propiedad stage, como se muestra en este ejemplo:

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

Al definir FeatureStoreEntity, establezca las propiedades para que coincidan con las que se ha creado. La única diferencia es agregar la propiedad stage.

Una vez que la llamada begin_create_or_update() se devuelve correctamente, la siguiente llamada feature_sets.get() y el siguiente trabajo de materialización deben realizarse correctamente.

Errores de consulta y trabajo de recuperación de características

Cuando se produce un error en un trabajo de recuperación de características, compruebe los detalles del error. Vaya a la página de detalles de ejecución, seleccione la pestaña Salidas y registros, y examine el archivo logs/azureml/driver/stdout.

Si el usuario ejecuta la consulta get_offline_feature() en el cuaderno, las salidas de celda muestran directamente el error.

Errores de resolución de especificación de recuperación de características

Síntoma

La consulta o el trabajo de recuperación de características muestran estos errores:

  • Característica no válida
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
  • URI de almacén de características no válido:
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"
  • Conjunto de características no válido:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."

Solución

Compruebe el contenido de feature_retrieval_spec.yaml que usa el trabajo. Compruebe que todos los nombres de almacén de características

  • URI
  • nombre o versión del conjunto de características
  • feature

son válidos y que existen en el almacén de características.

Para seleccionar características de un almacén de características y generar el archivo YAML de especificación de recuperación de características, se recomienda usar la función de utilidad.

Este fragmento de código usa la función de utilidad 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)

No se encontró el archivo feature_retrieval_spec.yaml al usar un modelo como entrada para el trabajo de recuperación de características

Síntoma

Cuando se usa un modelo registrado como entrada de trabajo de recuperación de características, se produce este error en el trabajo:

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

Solución:

Cuando proporciona un modelo como entrada para el paso de recuperación de características, se espera encontrar el archivo YAML de especificación de recuperación en la carpeta de artefactos del modelo. Se produce un error en el trabajo si falta ese archivo.

Para corregir el problema, empaquete el archivo feature_retrieval_spec.yaml en la carpeta raíz del artefacto del modelo antes de registrar el modelo.

Los datos de observación no están unidos con ningún valor de característica

Síntoma

Después de que los usuarios ejecuten la consulta o el trabajo de recuperación de características, los datos de salida no obtienen ningún valor de característica. Por ejemplo, un usuario ejecuta el trabajo de recuperación de características para recuperar las características transaction_amount_3d_avg y transaction_amount_7d_avg, con estos resultados:

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

Solución

La recuperación de características hace una consulta de combinación de un momento específico. Si el resultado de la combinación se muestra vacío, pruebe estas soluciones posibles:

  • Amplíe el intervalo temporal_join_lookback en la definición de especificación del conjunto de características o quítelo temporalmente. Esto permite que la combinación a un momento dado mire hacia atrás (o infinitamente) en el pasado de la marca de tiempo del evento de observación para buscar los valores de las características.
  • Si source.source_delay también se establece en la definición de especificación del conjunto de características, asegúrese de que temporal_join_lookback > source.source_delay.

Si ninguna de estas soluciones funciona, obtenga el conjunto de características del almacén de características y ejecute <feature_set>.to_spark_dataframe() para inspeccionar manualmente las columnas de índice de características y las marcas de tiempo. El error puede deberse a que:

  • Los valores de índice de los datos de observación no existen en el dataframe del conjunto de características
  • no existe ningún valor de característica, con un valor de marca de tiempo anterior a la marca de tiempo de observación.

En estos casos, si la característica ha habilitado la materialización sin conexión, es posible que tenga reponer más datos de características.

El usuario o la identidad administrada no tienen el permiso RBAC adecuado en el almacén de características

Síntoma:

Se produce un error en el trabajo o consulta de recuperación de características con este mensaje de error en el archivo 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

Solución:

  1. Si el trabajo de recuperación de características usa una identidad administrada, asigne el rol AzureML Data Scientist a la identidad en el almacén de características.

  2. Si el problema se produce cuando

  • el usuario ejecuta código en un cuaderno de Spark de Azure Machine Learning
  • ese cuaderno usa la propia identidad del usuario para acceder al servicio Azure Machine Learning

asigne el rol AzureML Data Scientist en el almacén de características a la identidad de Microsoft Entra del usuario.

Azure Machine Learning Data Scientist es un rol recomendado. El usuario puede crear su propio rol personalizado con las siguientes acciones

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

Para más información sobre la configuración de RBAC, visite el recurso Administración del acceso al almacén de características gestionado.

El usuario o la identidad administrada no tienen el permiso RBAC adecuado para leer desde el almacenamiento de origen o el almacén sin conexión

Síntoma

Se produce un error en el trabajo o consulta de recuperación de características con el siguiente mensaje de error en el archivo 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)

Solución:

  • Si el trabajo de recuperación de características usa una identidad administrada, asigne el rol Storage Blob Data Reader a la identidad en el almacenamiento de origen y en el almacenamiento del almacén sin conexión.
  • Este error se produce cuando el cuaderno usa la identidad del usuario para acceder al servicio Azure Machine Learning para ejecutar la consulta. Para resolver el error, asigne el rol Storage Blob Data Reader a la identidad del usuario en el almacenamiento de origen y la cuenta de almacenamiento del almacén sin conexión.

Storage Blob Data Reader es el requisito de acceso mínimo recomendado. Los usuarios también pueden asignar roles, como Storage Blob Data Contributor o Storage Blob Data Owner, con más privilegios.

El trabajo de entrenamiento produce error al leer los datos generados por el componente de recuperación de características integrado

Síntoma

Se produce un error en un trabajo de entrenamiento con el mensaje de error que indica que los datos de entrenamiento no existen, el formato es incorrecto o se produce un error del analizador:

FileNotFoundError: [Errno 2] No such file or directory
  • el formato no es correcto.
ParserError:

Solución

El componente integrado de recuperación de características de compilación tiene una salida, output_data. Los datos de salida son un recurso de datos uri_folder. Siempre tiene esta estructura de carpetas:

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

Los datos de salida siempre están en formato parquet. Actualice el script de entrenamiento para leer de la subcarpeta "data" y leer los datos como parquet.

generate_feature_retrieval_spec() produce un error debido al uso de la especificación del conjunto de características local

Síntoma:

Este código de Python genera una especificación de recuperación de características en una lista determinada de características:

featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)

Si la lista de características contiene características definidas por una especificación de conjunto de características local, se produce un error en generate_feature_retrieval_spec() con este mensaje de error:

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

Solución:

Una especificación de recuperación de características solo se puede generar mediante conjuntos de características registrados en el Almacén de características. Para corregir el problema:

  • Registro de la especificación del conjunto de características local como conjunto de características en el almacén de características
  • Obtención del conjunto de características registrado
  • Crear listas de características de nuevo con solo características de conjuntos de características registrados
  • Generación de la especificación de recuperación de características mediante la nueva lista de características

La consulta get_offline_features() tarda mucho tiempo

Síntoma:

La ejecución de get_offline_features para generar datos de entrenamiento, con algunas características del almacén de características, tarda demasiado en finalizar.

Soluciones:

Compruebe estas configuraciones:

  • Compruebe que cada conjunto de características usado en la consulta, tiene temporal_join_lookback establecido en la especificación del conjunto de características. Establezca su valor en un valor más pequeño.
  • Si el tamaño y la ventana de marca de tiempo de la trama de datos de observación son grandes, configure la sesión del cuaderno (o el trabajo) para aumentar el tamaño (memoria y núcleo) del controlador y ejecutor. Además, aumente el número de ejecutores.

Errores de trabajo de materialización de características

Cuando se produce un error en el trabajo de materialización de características, siga estos pasos para comprobar los detalles del error del trabajo:

  1. Vaya a la página del almacén de características: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Vaya a la pestaña feature set, seleccione el conjunto de características adecuado y vaya a la Página de detalles del conjunto de características.
  3. Desde la página de detalles del conjunto de características, seleccione la pestaña Materialization jobs y después el trabajo con errores para abrirlo en la vista de detalles del trabajo.
  4. En la vista de detalles del trabajo, en la tarjeta Properties, revise el estado del trabajo y el mensaje de error.
  5. También puede ir a la pestaña Outputs + logs y buscar el archivo stdout desde el archivo logs\azureml\driver\stdout.

Después de aplicar una corrección, puede desencadenar manualmente un trabajo de materialización de reposición para comprobar si la corrección funciona.

Configuración de almacén sin conexión no válida

Síntoma

Se produce un error en un trabajo de materialización con este mensaje de error en el archivo logs/azureml/driver/stdout:

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

Solución

Use el SDK para comprobar el destino del almacenamiento sin conexión definido en el almacén de características:


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

También puede comprobar el destino del almacenamiento sin conexión en la página de información general de la interfaz de usuario del almacén de características. Compruebe que tanto el almacenamiento como el contenedor existen y que el destino tiene este formato:

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

La identidad de materialización no tiene el permiso de RBAC adecuado en el almacén de características

Síntoma:

Se produce un error en el trabajo de materialización con este mensaje de error en el archivo 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

Solución:

Asigne el rol Azure Machine Learning Data Scientist a la identidad de materialización (una identidad administrada asignada por el usuario) del almacén de características en el almacén de características.

Azure Machine Learning Data Scientist es un rol recomendado. Puede crear un rol personalizado propio con estas acciones:

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

Para más información, visite el recurso Permisos necesarios para el rol feature store materialization managed identity.

La identidad de materialización no tiene el permiso de RBAC adecuado para leer desde el almacenamiento

Síntoma

Se produce un error en el trabajo de materialización con este mensaje de error en el archivo 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)

Solución:

Asigne el rol Storage Blob Data Reader, del almacenamiento de origen, a la identidad de materialización (una identidad administrada asignada por el usuario) del almacén de características.

Storage Blob Data Reader es el requisito de acceso mínimo recomendado. También puede asignar roles con más privilegios, como Storage Blob Data Contributor o Storage Blob Data Owner.

Para más información sobre la configuración de RBAC, visite el recurso Permisos necesarios para el rol feature store materialization managed identity.

La identidad de materialización no tiene el permiso RBAC adecuado para escribir datos en el almacén sin conexión

Síntoma

Se produce un error en el trabajo de materialización con este mensaje de error en el archivo 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

Solución

Asigne el rol Storage Blob Data Reader del almacenamiento de origen a la identidad de materialización (una identidad administrada asignada por el usuario) del almacén de características.

Storage Blob Data Contributor es el requisito de acceso mínimo recomendado. También puede asignar roles con más privilegios, como Storage Blob Data Owner.

Para más información sobre la configuración de RBAC, visite el recurso Permisos necesarios para el rol feature store materialization managed identity.

El streaming de la salida del trabajo a un cuaderno genera un error

Síntoma:

Cuando se usa el cliente CRUD del almacén de características para transmitir los resultados del trabajo de materialización al cuaderno mediante fs_client.jobs.stream("<job_id>"), se produce un error en la llamada del SDK

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.

Solución:

Cuando se crea el trabajo de materialización (por ejemplo, mediante una llamada de reposición) el trabajo puede tardar unos segundos en inicializarse correctamente. Vuelva a ejecutar el comando jobs.stream() unos segundos después. De este modo, se debería resolver el problema.

Configuración de Spark no válida

Síntoma:

Se produce un error en un trabajo de materialización con este mensaje de error:

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

}

Solución:

Actualice el materialization_settings.spark_configuration{} del conjunto de características. Asegúrese de que estos parámetros usan cantidades de tamaño de memoria y un número total de valores principales, ambos menores de lo que el tipo de instancia, como se define en materialization_settings.resource, proporciona:

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

Por ejemplo, en el tipo de instancia standard_e8s_v3, esta configuración de Spark es una de las opciones válidas:


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)

Pasos siguientes