Обучение модели для бессерверных вычислений

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

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

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

Предприятия также могут сократить затраты, указав оптимальные ресурсы для каждого задания. ИТ-Администратор по-прежнему могут применять контроль, указывая квоту ядер на уровне подписки и рабочей области и применяя политики Azure.

Бессерверные вычисления можно использовать для точной настройки моделей в каталоге моделей, таких как LLAMA 2. Бессерверные вычисления можно использовать для выполнения всех типов заданий из Студия машинного обучения Azure, пакета SDK и интерфейса командной строки. Бессерверные вычисления также можно использовать для создания образов среды и сценариев ответственной панели мониторинга ИИ. Бессерверные задания используют ту же квоту, что и квота вычислений Машинное обучение Azure. Вы можете выбрать стандартный (выделенный) уровень или точечные (низкоприоритетные) виртуальные машины. Управляемое удостоверение и удостоверение пользователя поддерживаются для бессерверных заданий. Модель выставления счетов аналогична Машинное обучение Azure вычислениям.

Преимущества бессерверных вычислений

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

Использование бессерверных вычислений

  • Вы можете точно настроить базовые модели, такие как LLAMA 2, с помощью записных книжек, как показано ниже:

  • При создании собственного вычислительного кластера в задании команды используется его имя, например compute="cpu-cluster". С бессерверным вы можете пропустить создание вычислительного кластера и опустить compute параметр, чтобы вместо этого использовать бессерверные вычисления. Если compute задание не указано, задание выполняется на бессерверных вычислениях. Опустите имя вычислений в заданиях CLI или SDK для использования бессерверных вычислений в следующих типах заданий и при необходимости предоставьте ресурсы, необходимые для количества экземпляров и типа экземпляров:

    • Задания команд, включая интерактивные задания и распределенное обучение
    • Задания AutoML
    • Очистка заданий
    • Параллельные задания
  • Для заданий конвейера с помощью интерфейса командной строки используется default_compute: azureml:serverless для вычислений уровня конвейера по умолчанию. Для заданий конвейеров с помощью default_compute="serverless"пакета SDK. Пример задания конвейера.

  • При отправке задания обучения в студии (предварительная версия) выберите бессерверный тип вычислений.

  • При использовании конструктора Машинное обучение 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-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
            identity=UserIdentityConfiguration(),
    )
    # 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 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-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
            identity= ManagedIdentityConfiguration(),
    )
    # submit the command job
    ml_client.create_or_update(job)
    
    

Сведения о присоединении управляемого удостоверения, назначаемого пользователем, см. в разделе "Присоединение управляемого удостоверения, назначаемого пользователем".

Настройка свойств для заданий команд

Если целевой объект вычислений не указан для заданий команды, очистки и автоМЛ, то вычисления по умолчанию не заданы для бессерверных вычислений. Например, для этого задания команды:

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-sklearn-1.0-ubuntu20.04-py38-cpu@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 # 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-sklearn-1.0-ubuntu20.04-py38-cpu@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) и низким приоритетом(jobtier: 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-sklearn-1.0-ubuntu20.04-py38-cpu@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-sklearn-1.0-ubuntu20.04-py38-cpu@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)

Просмотрите дополнительные примеры обучения с бессерверными вычислениями по адресу:-

Задание 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"

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

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

Просмотрите дополнительные примеры обучения с бессерверными вычислениями по адресу:-