Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ:
Расширение машинного обучения Azure CLI версии 2 (current)
Python SDK azure-ai-ml версии 2 (current)
Вам больше не нужно создавать вычислительные ресурсы и управлять ими для обучения модели масштабируемым способом. Вместо этого задание можно отправить в новый тип целевого объекта вычислений, который называется бессерверным вычислением. Бессерверные вычисления — самый простой способ выполнения заданий обучения на Машинное обучение Azure. Бессерверные вычисления — это полностью управляемые вычислительные ресурсы по запросу. Машинное обучение Azure создает, масштабирует и управляет вычислительными ресурсами. Благодаря обучению моделей с бессерверными вычислениями специалисты машинного обучения могут сосредоточиться на их опыте в создании моделей машинного обучения, а не знать о вычислительной инфраструктуре или его настройке.
Специалисты по машинному обучению могут указать ресурсы, необходимые для работы. Машинное обучение Azure управляет вычислительной инфраструктурой и обеспечивает управляемую сетевую изоляцию, что снижает нагрузку на вас.
Предприятия также могут сократить затраты, указав оптимальные ресурсы для каждого задания. ИТ-администраторы по-прежнему могут применять контроль, указав базовую квоту на уровне подписки и рабочей области и применяя политики Azure.
Бессерверные вычисления можно использовать для точной настройки моделей в каталоге моделей. Бессерверные вычисления можно использовать для выполнения всех типов заданий из студии машинного обучения Azure, пакета SDK и интерфейса командной строки. Бессерверные вычисления также можно использовать для создания образов среды и сценариев ответственной панели мониторинга ИИ. Бессерверные задания используют ту же квоту, что и квота вычислений Машинное обучение Azure. Вы можете выбрать стандартный (выделенный) уровень или точечные (низкоприоритетные) виртуальные машины. Управляемое удостоверение и удостоверение пользователя поддерживаются для бессерверных заданий. Модель выставления счетов аналогична вычислению Машинного обучения Azure.
Преимущества бессерверных вычислений
- Машинное обучение Azure управляет созданием, настройкой, масштабированием, удалением и исправлением вычислительной инфраструктуры, снижением затрат на управление
- Вам не нужно узнать о вычислениях, различных типах вычислений и связанных свойствах.
- Не нужно многократно создавать кластеры для каждого размера виртуальной машины, используя одинаковые параметры и репликацию для каждой рабочей области.
- Вы можете оптимизировать затраты, указав точные ресурсы, необходимые каждому заданию во время выполнения с точки зрения типа экземпляра (размер виртуальной машины) и количества экземпляров. Вы можете отслеживать метрики использования задания для оптимизации ресурсов, необходимых для задания.
- Сокращение шагов, необходимых для запуска задания
- Чтобы упростить отправку заданий, можно полностью пропустить ресурсы. Служба "Машинное обучение Azure" по умолчанию определяет количество экземпляров и выбирает тип экземпляра (размер виртуальной машины) на основе таких факторов, как квота, стоимость, производительность и размер диска.
- Меньше времени ожидания перед началом выполнения заданий в некоторых случаях
- Удостоверение пользователя и управляемое удостоверение, назначаемое пользователем в рабочей области, поддерживаются для отправки заданий
- С помощью изоляция управляемой сети можно оптимизировать конфигурацию сетевой изоляции и автоматизировать ее. Виртуальная сеть клиента также поддерживается
- Административный контроль с помощью квот и политик Azure
Использование бессерверных вычислений
При создании собственного вычислительного кластера в задании команды используется его имя, например
compute="cpu-cluster". С бессерверным вы можете пропустить создание вычислительного кластера и опуститьcomputeпараметр, чтобы вместо этого использовать бессерверные вычисления. Еслиcomputeзадание не указано, задание выполняется на бессерверных вычислениях. Опустите имя вычислений в заданиях CLI или SDK для использования бессерверных вычислений в следующих типах заданий и при необходимости предоставьте ресурсы, необходимые для количества экземпляров и типа экземпляров:- Задания команд, включая интерактивные задания и распределенное обучение
- Задания AutoML
- Очистка заданий
- Параллельные задания
Для заданий конвейера с помощью интерфейса командной строки используется
default_compute: azureml:serverlessдля вычислений уровня конвейера по умолчанию. Для заданий конвейера с помощью SDKdefault_compute="serverless". Пример задания конвейера.При отправке задания обучения в студии (предварительная версия) выберите бессерверный тип вычислений.
При использовании конструктора Машинное обучение Azure выберите бессерверные вычисления по умолчанию.
Замечания, связанные с быстродействием
Бессерверные вычисления помогают ускорить обучение следующим образом:
Недостаточно квоты. При создании собственного вычислительного кластера вы несете ответственность за определение размера виртуальной машины и количества узлов для создания. Когда задание выполняется, если у вас нет достаточной квоты для кластера, задание завершается ошибкой. Бессерверные вычисления используют сведения о квоте, чтобы выбрать соответствующий размер виртуальной машины по умолчанию.
Оптимизация уменьшения масштаба: При уменьшении масштаба вычислительного кластера новое задание должно ожидать, пока произойдет масштабирование, а затем увеличить масштаб до запуска задания. При использовании бессерверных вычислений вам не нужно ожидать уменьшения масштаба, и задание может начать работу на другом кластере или узле (если у вас есть квота).
Оптимизация занятого кластера: Когда задание выполняется в вычислительном кластере и отправляется другое задание, задание помещается в очередь за текущим запущенным заданием. При использовании бессерверных вычислений вы получите другой узел или другой кластер для запуска задания (если у вас есть квота).
Квота
При отправке задания вам по-прежнему потребуется достаточно Машинное обучение Azure квоту вычислений для продолжения (квоты уровня рабочей области и подписки). Размер виртуальной машины по умолчанию для бессерверных заданий выбирается на основе этой квоты. Если указать собственный размер или семейство виртуальных машин:
- Если у вас есть квота для размера или семейства виртуальных машин, но недостаточно квоты для количества экземпляров, вы увидите ошибку. Эта ошибка рекомендует уменьшить количество экземпляров до допустимого числа в зависимости от квоты или запросить увеличение квоты для этого семейства виртуальных машин или изменение размера виртуальной машины.
- Если у вас нет квоты для указанного размера виртуальной машины, появится ошибка. Ошибка рекомендует выбрать другой размер виртуальной машины, для которого у вас есть квота, или запросить увеличение квоты для этого семейства виртуальных машин.
- Если для выполнения бессерверного задания достаточно квоты для семейства виртуальных машин, но другие задания используют квоту, вы получите сообщение о том, что задание должно ждать в очереди до тех пор, пока квота не будет доступна.
При просмотре использования и квоты в портал Azure отображается имя "Бессерверное" для просмотра всех квот, потребляемых бессерверными заданиями.
Поддержка удостоверений и передача учетных данных
Передача учетных данных пользователя: бессерверные вычисления полностью поддерживают возможность передачи учетных данных пользователя. Маркер пользователя, отправляющего задание, используется для доступа к хранилищу. Эти учетные данные относятся к идентификатору Microsoft Entra.
from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package from azure.ai.ml.entities import ResourceConfiguration from azure.ai.ml.entities import UserIdentityConfiguration credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", identity=UserIdentityConfiguration(), ) # submit the command job ml_client.create_or_update(job)Назначаемое пользователем управляемое удостоверение: если у вас есть рабочая область, настроенная с управляемым удостоверением, назначаемого пользователем, можно использовать это удостоверение с бессерверным заданием для доступа к хранилищу. Сведения о доступе к секретам см. в разделе "Использование секретов учетных данных проверки подлинности" в заданиях Машинное обучение Azure.
Проверьте конфигурацию идентификации рабочего пространства.
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential subscription_id = "<your-subscription-id>" resource_group = "<your-resource-group>" workspace = "<your-workspace-name>" ml_client = MLClient( DefaultAzureCredential(), subscription_id, resource_group, workspace ) # Get workspace details ws = ml_client.workspaces.get(name=workspace) print(ws)Найдите идентичности пользователя в результатах. Если он отсутствует, создайте рабочую область с управляемым удостоверением, назначаемым пользователем, выполнив инструкции по настройке проверки подлинности между Машинным обучением Azure и другими службами.
Используйте управляемое удостоверение, назначенное пользователем, в вашей задаче.
from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package from azure.ai.ml.entities import ResourceConfiguration from azure.ai.ml.entities import ManagedIdentityConfiguration credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", identity= ManagedIdentityConfiguration(client_id="<workspace-uami-client-id>"), ) # submit the command job ml_client.create_or_update(job)
Настройка свойств для заданий команд
Если целевой объект вычислений не указан для заданий команд, сверстки и AutoML, то по умолчанию используется бессерверное вычисление. Например, для этого задания команды:
from azure.ai.ml import command
from azure.ai.ml import command
from azure.ai.ml import MLClient # Handle to the workspace
from azure.identity import DefaultAzureCredential # Authentication package
credential = DefaultAzureCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
ml_client = MLClient(
credential=credential,
subscription_id="<Azure subscription id>",
resource_group_name="<Azure resource group>",
workspace_name="<Azure Machine Learning Workspace>",
)
job = command(
command="echo 'hello world'",
environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
)
# submit the command job
ml_client.create_or_update(job)
Вычисление по умолчанию использует бессерверные вычисления с помощью следующих значений:
- Один узел для этого задания. Число узлов по умолчанию основано на типе задания. См. следующие разделы для других типов заданий.
- Виртуальная машина ЦП, определяемая на основе квоты, производительности, затрат и размера диска.
- Выделенные виртуальные машины
- Расположение рабочей области
Эти значения по умолчанию можно переопределить. Если вы хотите указать тип виртуальной машины или количество узлов для бессерверных вычислений, добавьте resources в задание:
instance_typeвыберите определенную виртуальную машину. Используйте этот параметр, если требуется определенный размер виртуальной машины ЦП или GPUinstance_count, чтобы указать количество узлов.from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package from azure.ai.ml.entities import JobResourceConfiguration credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", resources = JobResourceConfiguration(instance_type="Standard_NC24", instance_count=4) ) # submit the command job ml_client.create_or_update(job)Чтобы изменить уровень заданий, используйте
queue_settingsвыбор между выделенными виртуальными машинами (job_tier: Standard) и низким приоритетом (job_tier: Spot).from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace from azure.identity import DefaultAzureCredential # Authentication package credential = DefaultAzureCredential() # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com ml_client = MLClient( credential=credential, subscription_id="<Azure subscription id>", resource_group_name="<Azure resource group>", workspace_name="<Azure Machine Learning Workspace>", ) job = command( command="echo 'hello world'", environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest", queue_settings={ "job_tier": "spot" } ) # submit the command job ml_client.create_or_update(job)
Пример для всех полей с заданиями команд
Ниже приведен пример всех полей, указанных в том числе удостоверение, используемое заданием. Нет необходимости указывать параметры виртуальной сети в качестве уровня рабочей области изоляция управляемой сети автоматически используется.
from azure.ai.ml import command
from azure.ai.ml import MLClient # Handle to the workspace
from azure.identity import DefaultAzureCredential # Authentication package
from azure.ai.ml.entities import ResourceConfiguration
from azure.ai.ml.entities import UserIdentityConfiguration
credential = DefaultAzureCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com
ml_client = MLClient(
credential=credential,
subscription_id="<Azure subscription id>",
resource_group_name="<Azure resource group>",
workspace_name="<Azure Machine Learning Workspace>",
)
job = command(
command="echo 'hello world'",
environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
identity=UserIdentityConfiguration(),
queue_settings={
"job_tier": "Standard"
}
)
job.resources = ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=1)
# submit the command job
ml_client.create_or_update(job)
Дополнительные примеры обучения с бессерверными вычислениями:
- Быстрое начало
- Train Model (Обучение модели);
Задание AutoML
Нет необходимости указывать вычислительные ресурсы для заданий AutoML. При необходимости можно указать ресурсы. Если число экземпляров не указано, по умолчанию используется max_concurrent_trials и параметры max_nodes. Если вы отправляете классификацию образов AutoML или задачу NLP без типа экземпляра, размер виртуальной машины GPU автоматически выбирается. Задания AutoML можно отправлять с помощью интерфейсов CLIs, SDK или Studio. Чтобы отправить задания AutoML с бессерверными вычислениями в студии, сначала включите функцию отправка задания обучения в студии (предварительная версия) на панели предварительной версии.
Если вы хотите указать тип или число экземпляров, используйте ResourceConfiguration класс.
# Create the AutoML classification job with the related factory-function.
from azure.ai.ml.entities import ResourceConfiguration
classification_job = automl.classification(
experiment_name=exp_name,
training_data=my_training_data_input,
target_column_name="y",
primary_metric="accuracy",
n_cross_validations=5,
enable_model_explainability=True,
tags={"my_custom_tag": "My custom value"},
)
# Limits are all optional
classification_job.set_limits(
timeout_minutes=600,
trial_timeout_minutes=20,
max_trials=max_trials,
# max_concurrent_trials = 4,
# max_cores_per_trial: -1,
enable_early_termination=True,
)
# Training properties are optional
classification_job.set_training(
blocked_training_algorithms=[ClassificationModels.LOGISTIC_REGRESSION],
enable_onnx_compatible_models=True,
)
# Serverless compute resources used to run the job
classification_job.resources =
ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=6)
Задание конвейера
Для задания конвейера укажите "serverless" тип вычислений по умолчанию для использования бессерверных вычислений.
# Construct pipeline
@pipeline()
def pipeline_with_components_from_yaml(
training_input,
test_input,
training_max_epochs=20,
training_learning_rate=1.8,
learning_rate_schedule="time-based",
):
"""E2E dummy train-score-eval pipeline with components defined via yaml."""
# Call component obj as function: apply given inputs & parameters to create a node in pipeline
train_with_sample_data = train_model(
training_data=training_input,
max_epochs=training_max_epochs,
learning_rate=training_learning_rate,
learning_rate_schedule=learning_rate_schedule,
)
score_with_sample_data = score_data(
model_input=train_with_sample_data.outputs.model_output, test_data=test_input
)
score_with_sample_data.outputs.score_output.mode = "upload"
eval_with_sample_data = eval_model(
scoring_result=score_with_sample_data.outputs.score_output
)
# Return: pipeline outputs
return {
"trained_model": train_with_sample_data.outputs.model_output,
"scored_data": score_with_sample_data.outputs.score_output,
"evaluation_report": eval_with_sample_data.outputs.eval_output,
}
pipeline_job = pipeline_with_components_from_yaml(
training_input=Input(type="uri_folder", path=parent_dir + "/data/"),
test_input=Input(type="uri_folder", path=parent_dir + "/data/"),
training_max_epochs=20,
training_learning_rate=1.8,
learning_rate_schedule="time-based",
)
# set pipeline to use serverless compute
pipeline_job.settings.default_compute = "serverless"Вы также можете задать бессерверные вычисления в качестве вычислений по умолчанию в конструкторе.
Настройка заданий бессерверного конвейера с помощью управляемого удостоверения User-Assigned
При использовании бессерверных вычислений в заданиях конвейера рекомендуется задать удостоверение пользователя на отдельном уровне шага, который будет выполняться на вычислительном уровне, а не на корневом уровне конвейера. (Хотя параметр удостоверения поддерживается как на корневом конвейере, так и на уровне шагов, параметр уровня шага имеет приоритет, если оба заданы. Однако для конвейеров, содержащих компоненты конвейера, необходимо задать удостоверение на отдельных шагах, которые будут выполняться. Идентификатор, заданный на уровне корневого конвейера или компонента конвейера, не будет функционировать. Поэтому мы рекомендуем задать удостоверение на отдельном уровне шага для простоты.)
def my_pipeline():
train_job = train_component(
training_data=Input(type="uri_folder", path="./data")
)
# Set managed identity for the job
train_job.identity = {"type": "user_identity"}
return {"train_output": train_job.outputs}
pipeline_job = my_pipeline()
# set pipeline to use serverless compute
pipeline_job.settings.default_compute = "serverless"
Следующие шаги
Дополнительные примеры обучения с бессерверными вычислениями:
- Быстрое начало
- Train Model (Обучение модели);