Устранение неполадок хранилище управляемых функций
Из этой статьи вы узнаете, как устранить распространенные проблемы, которые могут возникнуть с хранилище управляемых функций в Машинное обучение Azure.
Проблемы, обнаруженные при создании и обновлении хранилища компонентов
При создании или обновлении хранилища компонентов могут возникнуть следующие проблемы:
- Ошибка регулирования ARM
- Проблема с идентификатором ARM идентификатора дублированного удостоверения материализации
- Ошибки разрешений RBAC
- Старые версии
azure-mgmt-authorization
пакета не работаютAzureMLOnBehalfOfCredential
Ошибка регулирования 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
.
Ошибки создания спецификаций набора компонентов
- Недопустимая схема в спецификации набора компонентов
- Не удается найти класс преобразования
- FileNotFoundError в папке кода
Недопустимая схема в спецификации набора компонентов
Прежде чем зарегистрировать набор компонентов в хранилище компонентов, определите спецификацию набора компонентов локально и выполните его <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()
вызов и следующее задание материализации должны завершиться успешно.
Ошибки получения функций и запросов
- Ошибки разрешения спецификаций извлечения компонентов
- Файл feature_retrieval_spec.yaml не найден при использовании модели в качестве входных данных для задания извлечения признаков
- Данные наблюдения не присоединяются к значениям признаков
- У пользователя или управляемого удостоверения нет соответствующего разрешения RBAC в хранилище компонентов
- У пользователя или управляемого удостоверения нет RBAC-разрешения на чтение из исходного хранилища или автономного хранилища.
- Задание обучения не считывает данные, созданные компонентом извлечения компонентов сборки
generate_feature_retrieval_spec()
сбой из-за использования спецификации локального набора компонентов- Запрос
get_offline_features()
занимает много времени
Если задание извлечения признаков завершается сбоем, проверьте сведения об ошибке. Перейдите на страницу сведений о выполнении, выберите вкладку "Выходные данные и журналы" и проверьте файл 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
Решение.
Если задание извлечения компонентов использует управляемое удостоверение, назначьте
AzureML Data Scientist
роль в хранилище компонентов идентификатору.Если проблема возникает, когда
- Пользователь запускает код в записной книжке 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
, установлен в спецификации набора компонентов. Задайте для его значения меньшее значение. - Если размер и метка времени в кадре данных наблюдения большие, настройте сеанс записной книжки (или задание), чтобы увеличить размер (память и ядро) драйвера и исполнителя. Кроме того, увеличьте количество исполнителей.
Ошибки задания материализации компонентов
- Недопустимая конфигурация автономного хранилища
- Идентификатор материализации не имеет соответствующего разрешения RBAC в хранилище компонентов
- Удостоверение Материализации не имеет надлежащего разрешения RBAC для чтения из хранилища
- Удостоверение материализации не имеет разрешения RBAC на запись данных в автономное хранилище.
- Результаты выполнения задания потоковой передачи в записную книжку приводят к сбою
- Недопустимая конфигурация Spark
Если задание материализации признаков завершается сбоем, выполните следующие действия, чтобы проверить сведения о сбое задания:
- Перейдите на страницу хранилища признаков: https://ml.azure.com/featureStore/{your-feature-store-name}.
- Перейдите
feature set
на вкладку, выберите соответствующий набор компонентов и перейдите на страницу сведений о наборе компонентов. - На странице сведений о наборе компонентов выберите
Materialization jobs
вкладку, а затем выберите неудалось задание, чтобы открыть его в представлении сведений о задании. - В представлении сведений о задании под карточкой просмотрите состояние задания и сообщение об ошибке
Properties
. - Вы также можете перейти на вкладку
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)