Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Типы экземпляров — это понятие в Машинное обучение Azure, которое используется для указания определённых типов вычислительных узлов для рабочих нагрузок обучения и инференса. Например, в виртуальной машине Azure тип экземпляра имеет тип STANDARD_D2_V3. В этой статье показано, как создавать типы экземпляров для вычислений и управлять ими.
В кластерах Kubernetes расширение Машинное обучение Azure представляет типы экземпляров в виде настраиваемого определения ресурсов (CRD), который он устанавливает. Два элемента в расширении Машинного обучения Azure представляют типы экземпляров:
- nodeSelector: используйте nodeSelector , чтобы указать, на каком узле должен выполняться модуль pod. Узел должен иметь соответствующую метку.
- ресурсы. В разделе ресурсов задайте вычислительные ресурсы (ЦП, память и GPU NVIDIA) для модуля pod.
Если при развертывании расширения Машинного обучения Azure указать поле nodeSelector, nodeSelector поле применяется ко всем типам экземпляров. Эта конфигурация означает:
- Для каждого создаваемого типа экземпляра указанное поле
nodeSelectorдолжно быть подмножеством поляnodeSelector, заданного расширением. - Если вы используете тип экземпляра
nodeSelector, рабочая нагрузка выполняется на любом узле, совпадающем как с заданным полем расширенияnodeSelector, так и с заданным полем типа экземпляраnodeSelector. - Если вы используете тип экземпляра без поля
nodeSelector, рабочая нагрузка выполняется на любом узле, который соответствует полюnodeSelector, указанному расширением.
Создание типа экземпляра по умолчанию
При присоединении кластера Kubernetes к рабочей области Машинное обучение Azure служба создает тип экземпляра с именем defaultinstancetype по умолчанию. Ниже приведено определение:
resources:
requests:
cpu: "100m"
memory: "2Gi"
limits:
cpu: "2"
memory: "2Gi"
nvidia.com/gpu: null
Если не указано nodeSelectorполе, под может быть назначен на любом узле. Поды рабочей нагрузки по умолчанию получают 0,1 ядра ЦП, 2 ГиБ памяти и 0 GPU в качестве запрашиваемых ресурсов. Ресурсы, используемые подами рабочей нагрузки, ограничены 2 ядрами ЦП и 2 ГиБ памяти.
Тип экземпляра по умолчанию специально использует минимальные ресурсы. Чтобы обеспечить выполнение всех рабочих нагрузок машинного обучения с соответствующими ресурсами (например, ресурсами GPU), создайте типы пользовательских экземпляров.
Помните следующие моменты о типе экземпляра по умолчанию:
-
defaultinstancetypeне отображается какInstanceTypeпользовательский ресурс в кластере при выполнении командыkubectl get instancetype, но он отображается во всех клиентах (пользовательский интерфейс, Azure CLI, SDK). - Можно переопределить
defaultinstancetype, определив тип пользовательского экземпляра с тем же именем.
Создайте настраиваемый тип экземпляра
Чтобы создать новый тип экземпляра, создайте новый настраиваемый ресурс для типа экземпляра CRD. Рассмотрим пример.
kubectl apply -f my_instance_type.yaml
Ниже приведено содержимое my_instance_type.yaml:
apiVersion: amlarc.azureml.com/v1alpha1
kind: InstanceType
metadata:
name: myinstancetypename
spec:
nodeSelector:
mylabel: mylabelvalue
resources:
limits:
cpu: "1"
nvidia.com/gpu: 1
memory: "2Gi"
requests:
cpu: "700m"
memory: "1500Mi"
Предыдущий код создает тип экземпляра со следующим поведением:
- Планируйте поды только на узлах с меткой
mylabel: mylabelvalue. - Назначьте подам запросы ресурсов
700mдля CPU и1500Miдля памяти. - Назначьте pod'ам лимиты ресурсов:
1для процессора,2Giдля памяти и1для NVIDIA GPU.
Создание типа пользовательского экземпляра должно соответствовать следующим параметрам и правилам определения, иначе не удается:
| Parameter | Обязательно или необязательно | Description |
|---|---|---|
name |
Required | Строковые значения, которые должны быть уникальными в кластере. |
CPU request |
Required | Строковые значения, которые не могут быть нулевыми или пустыми. Вы можете указать ЦП в милликорях; например, 100m. Вы также можете указать его в качестве полных чисел. Например, выражение "1" будет эквивалентно 1000m. |
Memory request |
Required | Строковые значения, которые не могут быть нулевыми или пустыми. Можно указать память в виде полного числа и суффикса; например, 1024Mi для 1024 мебибайт (MiB). |
CPU limit |
Required | Строковые значения, которые не могут быть нулевыми или пустыми. Вы можете указать ЦП в милликорях; например, 100m. Вы также можете указать его в качестве полных чисел. Например, выражение "1" будет эквивалентно 1000m. |
Memory limit |
Required | Строковые значения, которые не могут быть нулевыми или пустыми. Можно указать память в виде полного числа и суффикса; Например, 1024Mi для 1024 МиБ. |
GPU |
Optional | Целые значения, которые можно указать только в limits разделе. Дополнительные сведения см. в документации по Kubernetes. |
nodeSelector |
Optional | Сопоставление строковых ключей и значений. |
Вы также можете создать несколько типов экземпляров одновременно:
kubectl apply -f my_instance_type_list.yaml
Ниже приведено содержимое my_instance_type_list.yaml:
apiVersion: amlarc.azureml.com/v1alpha1
kind: InstanceTypeList
items:
- metadata:
name: cpusmall
spec:
resources:
requests:
cpu: "100m"
memory: "100Mi"
limits:
cpu: "1"
nvidia.com/gpu: 0
memory: "1Gi"
- metadata:
name: defaultinstancetype
spec:
resources:
requests:
cpu: "1"
memory: "1Gi"
limits:
cpu: "1"
nvidia.com/gpu: 0
memory: "1Gi"
В предыдущем примере создаются два типа экземпляров: cpusmall и defaultinstancetype. Это defaultinstancetype определение переопределяет defaultinstancetype определение, созданное при присоединении кластера Kubernetes к рабочей области Машинное обучение Azure.
Если вы отправляете задачу обучения или инференса без указания типа инстанса, используется defaultinstancetype. Чтобы указать тип экземпляра по умолчанию для кластера Kubernetes, создайте тип экземпляра с именем defaultinstancetype. Он автоматически распознается как значение по умолчанию.
Выбор типа экземпляра для отправки задания обучения
Чтобы выбрать тип экземпляра для задания на обучение с помощью Azure CLI (v2), укажите его имя как часть раздела свойств resources в YAML-файле задания. Рассмотрим пример.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
command: python -c "print('Hello world!')"
environment:
image: library/python:latest
compute: azureml:<Kubernetes-compute_target_name>
resources:
instance_type: <instance type name>
В предыдущем примере замените <Kubernetes-compute_target_name> имя целевого объекта вычислений Kubernetes. Замените <instance type name> именем типа экземпляра, который требуется выбрать. Если свойство не указано instance_type , система использует defaultinstancetype для отправки задания.
Выбор типа экземпляра для развертывания модели
Чтобы выбрать тип экземпляра для развертывания модели с помощью Azure CLI (v2), укажите его имя в свойстве instance_type в YAML-файле развертывания. Рассмотрим пример.
$schema: https://azuremlschemas.azureedge.net/latest/kubernetesOnlineDeployment.schema.json
name: blue
app_insights_enabled: true
endpoint_name: <endpoint name>
model:
path: ./model/sklearn_mnist_model.pkl
code_configuration:
code: ./script/
scoring_script: score.py
instance_type: <instance type name>
environment:
conda_file: file:./model/conda.yml
image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest
В предыдущем примере замените <instance type name> на имя типа экземпляра, который требуется выбрать. Если свойство не указано instance_type , система использует defaultinstancetype для развертывания модели.
Important
Для развертывания модели MLflow запрос ресурсов требует не менее 2 ядер ЦП и 4 ГБ памяти. В противном случае развертывание завершается ошибкой.
Проверка раздела ресурсов
Используйте раздел resources, чтобы определить потребление ресурсов и лимит для развертываний модели. Рассмотрим пример.
$schema: https://azuremlschemas.azureedge.net/latest/kubernetesOnlineDeployment.schema.json
name: blue
app_insights_enabled: true
endpoint_name: <endpoint name>
model:
path: ./model/sklearn_mnist_model.pkl
code_configuration:
code: ./script/
scoring_script: score.py
environment:
conda_file: file:./model/conda.yml
image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest
resources:
requests:
cpu: "0.1"
memory: "0.2Gi"
limits:
cpu: "0.2"
#nvidia.com/gpu: 0
memory: "0.5Gi"
instance_type: <instance type name>
При использовании раздела resources определение ресурса должно быть допустимым и соответствовать следующим правилам. Недопустимое определение ресурса приводит к сбою развертывания модели.
| Parameter | Обязательно или необязательно | Description |
|---|---|---|
requests:cpu: |
Required | Строковые значения, которые не могут быть нулевыми или пустыми. Вы можете указать ЦП в милликорях; например, 100m. Вы также можете указать его в полных числах. Например, выражение "1" будет эквивалентно 1000m. |
requests:memory: |
Required | Строковые значения, которые не могут быть нулевыми или пустыми. Можно указать память в виде полного числа и суффикса; Например, 1024Mi для 1024 МиБ. Объем памяти не может превышать 1 МБ. |
limits:cpu: |
Optional (требуется только в том случае, если требуется GPU) |
Строковые значения, которые не могут быть нулевыми или пустыми. Вы можете указать ЦП в милликорях; например, 100m. Вы также можете указать его в полных числах. Например, выражение "1" будет эквивалентно 1000m. |
limits:memory: |
Optional (требуется только в том случае, если требуется GPU) |
Строковые значения, которые не могут быть нулевыми или пустыми. Можно указать память в виде полного числа и суффикса; например, 1024Mi для 1024 МиБ. |
limits:nvidia.com/gpu: |
Optional (требуется только в том случае, если требуется GPU) |
Целые значения, которые не могут быть пустыми и могут быть указаны только в limits разделе. Дополнительные сведения см. в документации по Kubernetes. Если требуется только ЦП, можно опустить весь limits раздел. |
Тип экземпляра требуется для развертывания модели. Если вы определите раздел resources, он проверяется на соответствие типу экземпляра в соответствии со следующими правилами:
- При допустимом
resourceопределении раздела ограничения ресурсов должны быть меньше ограничений типа экземпляра. В противном случае развертывание завершается ошибкой. - Если тип экземпляра не определен, система использует
defaultinstancetypeдля проверки с помощьюresourcesраздела. - Если вы не определите раздел
resources, система использует тип экземпляра для создания развертывания.