Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ:
Расширение машинного обучения Azure CLI версии 2 (current)
Python SDK azure-ai-ml версии 2 (current)
Вам не нужно создавать вычислительные ресурсы и управлять ими для обучения модели масштабируемым способом. Вместо этого можно отправить задание в тип целевого объекта вычислений, называемый бессерверным вычислением. Бессерверные вычисления — самый простой способ выполнения заданий обучения на Машинное обучение Azure. Бессерверные вычисления — это полностью управляемые вычислительные ресурсы по запросу. Машинное обучение Azure создает, масштабирует и управляет вычислительными ресурсами. При использовании бессерверных вычислений для обучения моделей можно сосредоточиться на создании моделей машинного обучения, а не о вычислительной инфраструктуре или его настройке.
Вы можете указать ресурсы, необходимые для задания. Машинное обучение Azure управляет вычислительной инфраструктурой и обеспечивает управляемую сетевую изоляцию, что снижает нагрузку на вас.
Предприятия также могут сократить затраты, указав оптимальные ресурсы для каждого задания. ИТ-администраторы по-прежнему могут применять контроль, указав базовую квоту на уровне подписки и рабочей области и применяя политики Azure.
Бессерверные вычисления можно использовать для точной настройки моделей в каталоге моделей. Его можно использовать для выполнения всех типов заданий с помощью Студии машинного обучения Azure, пакета SDK для Python и Azure CLI. Вы также можете использовать бессерверные вычисления для создания образов окружения и сценариев панели мониторинга ответственного использования ИИ. Бессерверные задания используют ту же квоту, что и квота вычислений Машинное обучение Azure. Вы можете выбрать стандартный (выделенный) уровень или точечные (низкоприоритетные) виртуальные машины. Управляемое удостоверение и удостоверение пользователя поддерживаются для бессерверных заданий. Модель выставления счетов аналогична модели вычислений Машинного обучения Azure.
Предпосылки
Подписка Azure. Если у вас нет учетной записи, создайте бесплатную учетную запись.
Azure CLI с расширением
mlили Azure Machine Learning Python SDK v2:pip install azure-ai-ml azure-identity
- Требования к роли: для отправки заданий требуется по крайней мере роль Участник или роль Специалист по Azure ML в рабочей области.
Отправка первого бессерверного задания
В следующем примере показано минимальное задание команды, которое выполняется на бессерверных вычислениях. При опущении compute параметра задание автоматически использует бессерверные вычисления.
from azure.ai.ml import command, MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
# Initialize the ML client
try:
credential = DefaultAzureCredential()
credential.get_token("https://management.azure.com/.default")
except Exception:
credential = InteractiveBrowserCredential()
ml_client = MLClient(
credential=credential,
subscription_id="<Azure-subscription-ID>",
resource_group_name="<Azure-resource-group>",
workspace_name="<Azure-Machine-Learning-workspace>",
)
# Create a simple command job - omitting 'compute' uses serverless
job = command(
command="echo 'hello world'",
environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
)
# Submit the job
returned_job = ml_client.create_or_update(job)
print(f"Job submitted: {returned_job.name}")
Ожидаемые выходные данные: Задание создается и возвращает объект задания с состоянием NotStarted или Starting. Отслеживайте прогресс в Azure Machine Learning Studio или посредством вызова ml_client.jobs.get(returned_job.name).
Reference:command function | MLClient
Преимущества бессерверных вычислений
- Машинное обучение Azure управляет созданием, настройкой, масштабированием, удалением и исправлением вычислительной инфраструктуры для снижения затрат на управление.
- Вам не нужно узнать о вычислениях, различных типах вычислений или связанных свойствах.
- Вам не нужно многократно создавать кластеры для каждого нужного размера виртуальной машины, используя одинаковые параметры и репликацию для каждой рабочей области.
- Вы можете оптимизировать затраты, указав точные ресурсы, необходимые каждому заданию во время выполнения для типа экземпляра (размер виртуальной машины) и количества экземпляров. Вы также можете отслеживать метрики использования задания, чтобы оптимизировать ресурсы, необходимые для задания.
- Для выполнения задания требуется меньше шагов.
- Чтобы упростить отправку заданий, можно полностью пропустить ресурсы. Машинное обучение Azure по умолчанию использует количество экземпляров и выбирает тип экземпляра, учитывая такие факторы, как квота, стоимость, производительность и размер диска.
- В некоторых сценариях время ожидания до запуска заданий сокращается.
- Поддерживается использование удостоверений пользователей и управляемых удостоверений, назначаемых пользователями рабочей области, для отправки заданий.
- С помощью изоляция управляемой сети можно оптимизировать конфигурацию сетевой изоляции и автоматизировать ее. Кроме того, поддерживаются виртуальные сети клиентов.
- Административный контроль доступен с помощью квот и политик Azure.
Использование бессерверных вычислений
При создании собственного вычислительного кластера вы используете его имя в задании команды. Например:
compute="cpu-cluster". С бессерверным вы можете пропустить создание вычислительного кластера и опуститьcomputeпараметр, чтобы вместо этого использовать бессерверные вычисления. Еслиcomputeзадание не указано, задание выполняется на бессерверных вычислениях. Не указывайте имя вычислений в заданиях Azure CLI или пакете SDK для Python для использования бессерверных вычислений в следующих типах заданий, а также при необходимости предоставьте ресурсы, необходимые для количества экземпляров и типа экземпляров:- Задания команд, включая интерактивные задания и распределенное обучение
- Задания AutoML
- Очистка заданий
- Параллельные задания
Для заданий конвейера с помощью Azure CLI используйте
default_compute: azureml:serverlessдля вычислений на уровне конвейера по умолчанию. Для заданий конвейера с помощью пакета SDK для Python используйтеdefault_compute="serverless". Пример задания конвейера.При отправке задания обучения в студии выберите бессерверный тип вычислений.
При использовании конструктора машинного обучения Azure выберите бессерверные вычисления по умолчанию.
Замечания, связанные с быстродействием
Бессерверные вычисления могут повысить скорость обучения следующим образом:
Избегайте сбоев квоты. При создании собственного вычислительного кластера вы несете ответственность за определение размера виртуальной машины и количества узлов. При выполнении задания, если у вас нет достаточной квоты для кластера, задание завершается сбоем. Бессерверные вычисления используют сведения о квоте, чтобы выбрать соответствующий размер виртуальной машины по умолчанию.
Оптимизация уменьшения масштаба. При уменьшении масштаба вычислительного кластера новое задание должен дождаться уменьшения масштаба кластера, а затем увеличить масштаб до запуска задания. При бессерверных вычислениях вам не нужно ожидать уменьшения масштаба. Задание может начать работу на другом кластере или узле (если у вас есть квота).
Оптимизация с занятой кластером. Когда задание выполняется в вычислительном кластере и отправляется другое задание, оно помещается в очередь за текущим заданием. При использовании бессерверных вычислений задание может начать работу на другом узле или кластере (если у вас есть квота).
Квота
При отправке задания вам все еще нужно иметь достаточную квоту вычислительных ресурсов Azure Machine Learning для выполнения задания, включая квоты на уровне рабочей области и подписки. Размер виртуальной машины по умолчанию для бессерверных заданий выбирается на основе этой квоты. Если указать собственный размер или семейство виртуальных машин:
- Если у вас есть квота для размера или семейства виртуальных машин, но недостаточно квоты для количества экземпляров, появится ошибка. Ошибка рекомендует уменьшить количество экземпляров до допустимого числа на основе квоты, запросить увеличение квоты для семейства виртуальных машин или изменить размер виртуальной машины.
- Если у вас нет квоты для указанного размера виртуальной машины, появится ошибка. В сообщении об ошибке рекомендуется выбрать другой размер виртуальной машины, на который у вас есть квота, или запросить квоту для семейства виртуальных машин.
- Если для выполнения бессерверного задания достаточно квоты для семейства виртуальных машин, но другие задания используют квоту, вы получите сообщение о том, что задание должно ждать в очереди, пока квота не будет доступна.
При просмотре сведений об использовании и квотах на портале Azure, вы видите название Serverless для всех квот, которые были израсходованы бессерверными заданиями.
Поддержка идентификаций и сквозная передача учетных данных
Бессерверные вычисления поддерживают два варианта идентификации для доступа к хранилищу и другим ресурсам:
- Сквозная передача учетных данных пользователя: использует токен Microsoft Entra ID. Лучше всего подходит для интерактивной разработки и тестирования.
- Назначаемое пользователем управляемое удостоверение: использует управляемое удостоверение рабочей области. Лучше всего подходит для рабочих сценариев и автоматизации.
Сквозная передача учетных данных пользователя: бессерверные вычисления полностью поддерживают сквозную передачу учетных данных пользователя. Маркер пользователя, отправляющего задание, используется для доступа к хранилищу. Эти учетные данные относятся к идентификатору Microsoft Entra.
Бессерверные вычисления не поддерживают назначаемое системой удостоверение.
from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace. from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential # Authentication package. from azure.ai.ml.entities import UserIdentityConfiguration try: credential = DefaultAzureCredential() credential.get_token("https://management.azure.com/.default") except Exception: credential = InteractiveBrowserCredential() # 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)Reference:UserIdentityConfiguration | функция команды
Назначаемое пользователем управляемое удостоверение: если у вас есть рабочая область, настроенная с управляемым удостоверением, назначаемого пользователем, можно использовать это удостоверение с бессерверным заданием для доступа к хранилищу. Сведения о доступе к секретам см. в разделе "Использование секретов учетных данных проверки подлинности" в заданиях машинного обучения 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, InteractiveBrowserCredential # Authentication package. from azure.ai.ml.entities import ManagedIdentityConfiguration try: credential = DefaultAzureCredential() credential.get_token("https://management.azure.com/.default") except Exception: credential = InteractiveBrowserCredential() # 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)
Reference:ManagedIdentityConfiguration
Настройка свойств для заданий команд
Если целевой объект вычислений не указан для заданий команд, перебора параметров и AutoML, вычислительные ресурсы по умолчанию выбираются в пользу бессерверных вычислений. Ниже приведен пример:
from azure.ai.ml import command
from azure.ai.ml import MLClient # Handle to the workspace.
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential # Authentication package.
try:
credential = DefaultAzureCredential()
credential.get_token("https://management.azure.com/.default")
except Exception:
credential = InteractiveBrowserCredential()
# 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для выбора определенной виртуальной машины. Используйте этот параметр, если требуется определенный размер ЦП или GPUИспользуется
instance_countдля указания количества узлов.from azure.ai.ml import command from azure.ai.ml import MLClient # Handle to the workspace. from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential # Authentication package. from azure.ai.ml.entities import JobResourceConfiguration try: credential = DefaultAzureCredential() credential.get_token("https://management.azure.com/.default") except Exception: credential = InteractiveBrowserCredential() # 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)Reference:JobResourceConfiguration
Чтобы изменить уровень заданий, используйте
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, InteractiveBrowserCredential # Authentication package. try: credential = DefaultAzureCredential() credential.get_token("https://management.azure.com/.default") except Exception: credential = InteractiveBrowserCredential() # 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, InteractiveBrowserCredential # Authentication package.
from azure.ai.ml.entities import JobResourceConfiguration
from azure.ai.ml.entities import UserIdentityConfiguration
try:
credential = DefaultAzureCredential()
credential.get_token("https://management.azure.com/.default")
except Exception:
credential = InteractiveBrowserCredential()
# 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 = JobResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=1)
# Submit the command job.
ml_client.create_or_update(job)
Ссылка:JobResourceConfiguration | UserIdentityConfiguration | функция команды
Ниже приведены два дополнительных примера использования бессерверных вычислений для обучения:
Задание AutoML
Не нужно указывать вычисления для заданий AutoML. При необходимости можно указать ресурсы. Если число экземпляров не указано, оно по умолчанию основано на параметрах max_concurrent_trials и max_nodes. Если вы отправляете классификацию образов AutoML или задачу NLP без указания типа экземпляра, размер виртуальной машины GPU автоматически выбирается. Задания AutoML можно отправлять с помощью clIs, пакета SDK для Python или студии.
Если вы хотите указать тип или число экземпляров, используйте 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"Вы также можете задать бессерверные вычисления в качестве вычислений по умолчанию в конструкторе.
Настройка заданий бессерверного конвейера с управляемым удостоверением, назначаемым пользователем
При использовании бессерверных вычислений в заданиях конвейера рекомендуется задать удостоверение пользователя на отдельном уровне шага, который будет выполняться на вычислительном уровне, а не на корневом уровне конвейера. (Хотя параметр удостоверения поддерживается как на корневом конвейере, так и на уровне шагов, параметр уровня шага имеет приоритет, если оба заданы. Однако для конвейеров, содержащих компоненты конвейера, необходимо задать удостоверение на отдельных шагах, которые будут выполняться. Идентификатор, заданный на уровне корневого конвейера или компонента конвейера, не будет функционировать. Поэтому мы рекомендуем задать удостоверение на отдельном уровне шага для простоты.)
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": "managed"}
return {"train_output": train_job.outputs}
pipeline_job = my_pipeline()
# Configure the pipeline to use serverless compute.
pipeline_job.settings.default_compute = "serverless"
Связанный контент
Дополнительные примеры обучения с бессерверными вычислениями: