Поделиться через


Устранение неполадок хранилище управляемых функций

Из этой статьи вы узнаете, как устранить распространенные проблемы, которые могут возникнуть с хранилище управляемых функций в Машинное обучение Azure.

Проблемы, обнаруженные при создании и обновлении хранилища компонентов

При создании или обновлении хранилища компонентов могут возникнуть следующие проблемы:

Ошибка регулирования ARM

Симптом

Создание или обновление хранилища компонентов завершается ошибкой. Ошибка может выглядеть следующим образом:

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

Решение

Выполните операцию создания и обновления хранилища компонентов позже. Развертывание выполняется в нескольких шагах, поэтому вторая попытка может завершиться ошибкой, так как некоторые ресурсы уже существуют. Удалите эти ресурсы и возобновите задание.

Проблема с идентификатором ARM с повторяющимся удостоверением материализации

После обновления хранилища компонентов, чтобы включить материализацию в первый раз, некоторые последующие обновления в хранилище компонентов могут привести к этой ошибке.

Симптом

Когда хранилище компонентов обновляется с помощью пакета SDK/CLI, обновление завершается ошибкой с сообщением об ошибке:

Ошибка.

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

Решение

Проблема включает идентификатор ARM формата идентификатора materialization_identity ARM.

В пользовательском интерфейсе Azure или пакете SDK идентификатор ARM управляемого удостоверения, назначаемого пользователем, использует нижний регистр resourcegroups. Дополнительные сведения см. в этом примере:

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

Когда хранилище функций использует управляемое удостоверение, назначаемое пользователем, в качестве materialization_identity идентификатор ARM нормализуется и сохраняется.resourceGroups Дополнительные сведения см. в этом примере:

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

В запросе на обновление можно использовать назначаемое пользователем удостоверение, соответствующее удостоверению материализации, для обновления хранилища компонентов. При использовании идентификатора ARM в формате (A) при использовании управляемого удостоверения для этой цели обновление завершается ошибкой и возвращается предыдущее сообщение об ошибке.

Чтобы устранить проблему, замените строку resourcegroups resourceGroups на идентификатор ARM управляемого удостоверения, назначаемого пользователем. Затем снова запустите обновление хранилища компонентов.

Ошибки разрешений RBAC

Чтобы создать хранилище функций, пользователю нужны Contributor роли и User Access Administrator роли. Пользовательская роль, которая охватывает тот же набор ролей действий, будет работать. Кроме того, будет работать супер набор этих двух ролей действий.

Симптом

Если у пользователя нет необходимых ролей, развертывание завершается сбоем. Ответ на ошибку может выглядеть следующим образом:

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

Решение

Contributor Предоставьте пользователю и User Access Administrator роли в группе ресурсов, в которой создается хранилище компонентов. Затем указать пользователю снова запустить развертывание.

Дополнительные сведения см. в разрешениях, необходимых для feature store materialization managed identity ресурса роли .

Старые версии пакета авторизации azure-mgmt-authorization не работают с AzureMLOnBehalfOfCredential

Симптом

В репозитории azureml-examples при использовании скрипта, предоставленного setup_storage_uai в папке featurestore_sample , скрипт завершается ошибкой с этим сообщением об ошибке:

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

Решение.

Проверьте версию установленного azure-mgmt-authorization пакета и убедитесь, что вы используете последнюю версию, по крайней мере 3.0.0 или более поздней. Более старая версия , например 0.61.0, не работает AzureMLOnBehalfOfCredential.

Ошибки создания спецификаций набора компонентов

Недопустимая схема в спецификации набора компонентов

Прежде чем зарегистрировать набор компонентов в хранилище компонентов, определите спецификацию набора компонентов локально и выполните его <feature_set_spec>.to_spark_dataframe() для проверки.

Симптом

При запуске <feature_set_spec>.to_spark_dataframe()пользователя могут возникать различные сбои проверки схемы, если схема кадра данных набора компонентов не соответствует определению спецификации набора компонентов.

Например:

  • Сообщение об ошибке: azure.ai.ml.exceptions.ValidationException: Schema check errors, timestamp column: timestamp is not in output dataframe
  • Сообщение об ошибке: Exception: Schema check errors, no index column: accountID in output dataframe
  • Сообщение об ошибке: ValidationException: Schema check errors, feature column: transaction_7d_count has data type: ColumnType.long, expected: ColumnType.string

Решение

Проверьте ошибку проверки схемы и обновите определение спецификации набора компонентов соответствующим образом для имен столбцов и типов. Например:

  • source.timestamp_column.name обновите свойство, чтобы правильно определить имена столбцов метки времени
  • index_columns обновите свойство, чтобы правильно определить столбцы индекса
  • features обновите свойство, чтобы правильно определить имена и типы столбцов признаков
  • Если исходные данные компонента имеют тип CSV, убедитесь, что CSV-файлы создаются с заголовками столбцов.

Затем запустите <feature_set_spec>.to_spark_dataframe() еще раз, чтобы проверить, пройдена ли проверка.

Вместо того чтобы вручную вводить значения, если пакет SDK определяет спецификацию набора компонентов, infer_schema этот параметр также рекомендуется в качестве предпочтительного способа автозаполнения features. index columns Не timestamp_column удается выполнить автоматическое заполнение.

Дополнительные сведения см. в ресурсе схемы спецификации набора компонентов.

Не удается найти класс преобразования

Симптом

При запуске <feature_set_spec>.to_spark_dataframe()пользователя возвращается эта ошибка: AttributeError: module '<...>' has no attribute '<...>'

Например:

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

Решение

Класс преобразования признаков, как ожидается, будет иметь его определение в файле Python под корнем папки кода. В папке кода могут быть другие файлы или вложенные папки.

Задайте для свойства feature_transformation_code.transformation_class значение <py file name of the transformation class>.<transformation class name>.

Например, если папка кода выглядит следующим образом.

code/
└️️ my_transformation_class.py

и файл my_transformation_class.py определяет MyFeatureTransformer класс, задайте

feature_transformation_code.transformation_class будущий my_transformation_class.MyFeatureTransformer

FileNotFoundError в папке кода

Симптом

Эта ошибка может произойти, если yamL спецификации набора компонентов создается вручную, и пакет SDK не создает набор компонентов. Команда

runs <feature_set_spec>.to_spark_dataframe()

возвращает ошибку

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

Решение

Проверьте папку кода. Она должна быть вложенной папкой в папке набора спецификаций набора компонентов. В спецификации набора компонентов задайте feature_transformation_code.path относительный путь к папке спецификации набора компонентов. Например:

feature set spec folder/
Код ├️️
├️️ my_transformer.py
└️️ my_orther_folder
└️️ FeatureSetSpec.yaml

В этом примере feature_transformation_code.path свойство в YAML должно быть ./code

Примечание.

При использовании функции create_feature_set_spec для azureml-featurestore создания объекта Python FeatureSetSpec можно использовать любую локальную папку в качестве feature_transformation_code.path значения. При дампах объекта FeatureSetSpec для формирования yaml спецификации набора компонентов в целевой папке путь кода копируется в целевую папку, а feature_transformation_code.path свойство обновляется в yaml спецификации.

Ошибки CRUD набора компонентов

Сбой набора компонентов GET из-за недопустимого компонента FeatureStoreEntity

Симптом

При использовании клиента CRUD хранилища компонентов для ПОЛУЧЕНИЯ набора компонентов ( например, fs_client.feature_sets.get(name, version)"" может возникнуть эта ошибка:


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

Эта ошибка также может произойти в задании материализации FeatureStore, где задание завершается ошибкой с той же трассировкой ошибки.

Решение

Запуск сеанса записной книжки с новой версией SDKS

  • Если он использует azure-ai-ml, обновите на azure-ai-ml==1.8.0.
  • Если он использует пакет SDK для хранилища компонентов, обновите его до azureml-featurestore== 0.1.0b2.

В сеансе записной книжки обновите сущность хранилища компонентов, чтобы задать его stage свойство, как показано в этом примере:

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

При определении FeatureStoreEntity задайте свойства, соответствующие свойствам, используемым при создании. Единственное различие заключается в добавлении stage свойства.

После успешного begin_create_or_update() возвращения вызова следующий feature_sets.get() вызов и следующее задание материализации должны завершиться успешно.

Ошибки получения функций и запросов

Если задание извлечения признаков завершается сбоем, проверьте сведения об ошибке. Перейдите на страницу сведений о выполнении, выберите вкладку "Выходные данные и журналы" и проверьте файл logs/azureml/driver/stdout.

Если пользователь запускает get_offline_feature() запрос в записной книжке, выходные данные ячеек отображаются напрямую.

Ошибки разрешения спецификаций извлечения компонентов

Симптом

В запросе или задании функции отображаются следующие ошибки:

  • Недопустимый признак
code: "UserError"
mesasge: "Feature '<some name>' not found in this featureset."
  • Недопустимый универсальный код ресурса (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"
  • Недопустимый набор компонентов:
code: "UserError"
message: "Featureset with name: <name >and version: <version> not found."

Решение

Проверьте содержимое в feature_retrieval_spec.yaml том, что задание использует. Убедитесь, что все имена хранилища компонентов

  • URI-адрес
  • Имя или версия набора компонентов
  • функция

допустимы и существуют в хранилище компонентов.

Чтобы выбрать компоненты из хранилища компонентов и создать файл YAML спецификации признаков, рекомендуется использовать функцию служебной программы.

Этот фрагмент кода использует служебную 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)

Файл feature_retrieval_spec.yaml не найден при использовании модели в качестве входных данных для задания извлечения признаков

Симптом

При использовании зарегистрированной модели в качестве входных данных задания извлечения признаков задание завершается ошибкой:

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

Решение.

Если вы предоставляете модель в качестве входных данных на шаг извлечения признаков, модель ожидает найти файл yamL спецификации извлечения в папке артефактов модели. Задание завершается ошибкой, если этот файл отсутствует.

Чтобы устранить проблему, перед регистрацией модели отправьте feature_retrieval_spec.yaml файл в корневую папку артефакта модели.

Данные наблюдения не присоединяются к значениям признаков

Симптом

Когда пользователи запускают запрос или задание, выходные данные не получают значений признаков. Например, пользователь запускает задание извлечения признаков для получения и transaction_amount_7d_avg получения transaction_amount_3d_avg компонентов с этими результатами:

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

Решение

Получение признаков выполняет запрос на объединение на определенный момент времени. Если результат соединения отображается пустым, попробуйте выполнить следующие возможные решения:

  • temporal_join_lookback Расширьте диапазон в определении спецификации набора компонентов или временно удалите его. Это позволяет присоединиться к точке во времени, чтобы вернуться к прошлому (или бесконечно) до метки времени наблюдения, чтобы найти значения признаков.
  • Если source.source_delay также задано в определении спецификации набора компонентов, убедитесь, что temporal_join_lookback > source.source_delay.

Если ни одно из этих решений не работает, получите набор компонентов из хранилища компонентов и запустите <feature_set>.to_spark_dataframe() вручную, чтобы проверить столбцы индекса признаков и метки времени. Сбой может произойти, так как:

  • Значения индекса в данных наблюдения не существуют в кадре данных набора компонентов.
  • значение функции не имеет значения метки времени до существования метки времени наблюдения.

В таких случаях, если функция включена автономная материализация, может потребоваться заполнить дополнительные данные функций.

У пользователя или управляемого удостоверения нет соответствующего разрешения RBAC в хранилище компонентов

Симптом.

Задание или запрос компонента завершается сбоем с этим сообщением об ошибке в файле 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

Решение.

  1. Если задание извлечения компонентов использует управляемое удостоверение, назначьте AzureML Data Scientist роль в хранилище компонентов идентификатору.

  2. Если проблема возникает, когда

  • Пользователь запускает код в записной книжке Spark Машинное обучение Azure
  • эта записная книжка использует собственное удостоверение пользователя для доступа к службе Машинное обучение Azure

AzureML Data Scientist назначьте роль в хранилище компонентов идентификатору Microsoft Entra пользователя.

Azure Machine Learning Data Scientist — это рекомендуемая роль. Пользователь может создать собственную пользовательскую роль с помощью следующих действий.

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

Дополнительные сведения о настройке RBAC см. в статье "Управление доступом к хранилище управляемых функций ресурсу".

У пользователя или управляемого удостоверения нет RBAC-разрешения на чтение из исходного хранилища или автономного хранилища.

Симптом

Задание или запрос компонента завершается ошибкой со следующим сообщением об ошибке в файле 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)

Решение.

  • Если задание извлечения компонентов использует управляемое удостоверение, назначьте Storage Blob Data Reader роль исходного хранилища и автономного хранилища идентификатору.
  • Эта ошибка возникает, когда записная книжка использует удостоверение пользователя для доступа к службе Машинное обучение Azure для выполнения запроса. Чтобы устранить эту ошибку, назначьте Storage Blob Data Reader роль удостоверению пользователя в исходном хранилище и учетной записи хранения в автономном хранилище.

Storage Blob Data Reader — это минимальное рекомендуемое требование для доступа. Пользователи также могут назначать роли , например, Storage Blob Data Contributor или Storage Blob Data Owner с дополнительными привилегиями.

Задание обучения не считывает данные, созданные компонентом извлечения компонентов сборки

Симптом

Задание обучения завершается сбоем с сообщением об ошибке о том, что данные обучения отсутствуют, формат неправильный или ошибка синтаксического анализа:

FileNotFoundError: [Errno 2] No such file or directory
  • формат не является правильным.
ParserError:

Решение

Выходные данные встроенного компонента получения признаков — output_data. Выходные данные являются ресурсом данных uri_folder. Она всегда имеет эту структуру папок:

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

Выходные данные всегда имеют формат parquet. Обновите скрипт обучения, чтобы он считывал данные из вложенной папки "data" в формате Parquet.

generate_feature_retrieval_spec() сбой из-за использования спецификации локального набора компонентов

Симптом.

Этот код Python создает спецификацию извлечения признаков в заданном списке функций:

featurestore.generate_feature_retrieval_spec(feature_retrieval_spec_folder, features)

Если список функций содержит функции, определенные спецификацией локального набора компонентов, generate_feature_retrieval_spec() сбой с этим сообщением об ошибке:

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

Решение.

Спецификацию извлечения признаков можно создать только с помощью наборов компонентов, зарегистрированных в Магазине компонентов. Чтобы решить эту проблему, выполните следующие действия.

  • Регистрация спецификации локального набора компонентов в качестве набора компонентов в хранилище компонентов
  • Получение зарегистрированного набора компонентов
  • Создание списков функций снова с помощью только функций из зарегистрированных наборов компонентов
  • Создание спецификации извлечения компонентов с помощью списка новых функций

Запрос get_offline_features() занимает много времени

Симптом.

Выполнение get_offline_features для создания обучающих данных с помощью нескольких функций из хранилища компонентов занимает слишком много времени.

Решения:

Проверьте следующие конфигурации:

  • Убедитесь, что каждый набор компонентов, используемый в запросе temporal_join_lookback , установлен в спецификации набора компонентов. Задайте для его значения меньшее значение.
  • Если размер и метка времени в кадре данных наблюдения большие, настройте сеанс записной книжки (или задание), чтобы увеличить размер (память и ядро) драйвера и исполнителя. Кроме того, увеличьте количество исполнителей.

Ошибки задания материализации компонентов

Если задание материализации признаков завершается сбоем, выполните следующие действия, чтобы проверить сведения о сбое задания:

  1. Перейдите на страницу хранилища признаков: https://ml.azure.com/featureStore/{your-feature-store-name}.
  2. Перейдите feature set на вкладку, выберите соответствующий набор компонентов и перейдите на страницу сведений о наборе компонентов.
  3. На странице сведений о наборе компонентов выберите Materialization jobs вкладку, а затем выберите неудалось задание, чтобы открыть его в представлении сведений о задании.
  4. В представлении сведений о задании под карточкой просмотрите состояние задания и сообщение об ошибке Properties .
  5. Вы также можете перейти на вкладку Outputs + logs , а затем найти stdout файл из logs\azureml\driver\stdout файла.

После применения исправления можно вручную активировать задание материализации обратной заполнения, чтобы убедиться, что исправление работает.

Недопустимая конфигурация автономного хранилища

Симптом

Задание материализации завершается сбоем с этим сообщением об ошибке 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

Решение

Используйте пакет SDK для проверки целевого объекта автономного хранилища, определенного в хранилище компонентов:


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

Вы также можете проверить целевой объект автономного хранилища на странице обзора пользовательского интерфейса хранилища компонентов. Убедитесь, что хранилище и контейнер существуют, а целевой объект имеет следующий формат:

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

Идентификатор материализации не имеет надлежащего разрешения RBAC в хранилище компонентов

Симптом.

Задание материализации завершается сбоем с этим сообщением об ошибке в файле 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

Решение.

Назначьте роль Azure Machine Learning Data Scientist в хранилище признаков идентификатору материализации (управляемому удостоверению, назначаемому пользователем) хранилища признаков.

Azure Machine Learning Data Scientist — это рекомендуемая роль. Вы можете создать собственную пользовательскую роль с помощью следующих действий:

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

Дополнительные сведения см. в разрешениях, необходимых для feature store materialization managed identity ресурса роли .

Удостоверение материализации не имеет надлежащего разрешения RBAC для чтения из хранилища

Симптом

Задание материализации завершается сбоем с этим сообщением об ошибке в файле 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)

Решение.

Storage Blob Data Reader Назначьте роль в исходном хранилище идентификатору материализации (управляемому удостоверению, назначаемом пользователем) хранилища компонентов.

Storage Blob Data Reader — это минимальное рекомендуемое требование для доступа. Вы также можете назначать роли с дополнительными привилегиями, например Storage Blob Data Contributor или Storage Blob Data Owner.

Дополнительные сведения о конфигурации RBAC см . в разрешениях, необходимых для feature store materialization managed identity ресурса роли .

Удостоверение Материализации не имеет надлежащего разрешения RBAC на запись данных в автономное хранилище

Симптом

Задание материализации завершается сбоем с этим сообщением об ошибке в файле 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

Решение

Storage Blob Data Reader Назначьте роль исходного хранилища идентификатору материализации (управляемому удостоверению, назначаемого пользователем) хранилища компонентов.

Storage Blob Data Contributor — это минимальное рекомендуемое требование для доступа. Вы также можете назначать роли с дополнительными привилегиями, например Storage Blob Data Owner.

Дополнительные сведения о конфигурации RBAC см . в разрешениях, необходимых для feature store materialization managed identity ресурса роли .

Выходные данные задания потоковой передачи в записную книжку приводят к сбою

Симптом.

При использовании клиента CRUD хранилища компонентов для потоковой передачи результатов задания материализации в записную книжку с помощью fs_client.jobs.stream("<job_id>")вызова ПАКЕТА 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.

Решение.

При создании задания материализации (например, при обратном вызове) может потребоваться несколько секунд для правильной инициализации задания. jobs.stream() Выполните команду несколько секунд спустя. Возможно, это позволит решить проблему.

Недопустимая конфигурация Spark

Симптом.

Задание материализации завершается сбоем с этим сообщением об ошибке:

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

}

Решение.

materialization_settings.spark_configuration{} Обновите набор компонентов. Убедитесь, что эти параметры используют как объемы памяти, так и общее количество основных значений, которые меньше типа экземпляра, как определено materialization_settings.resource, предоставляет:

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

Например, для типа экземпляра standard_e8s_v3 эта конфигурация Spark является одним из допустимых параметров:


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)

Следующие шаги