Criar e gerir tipos de instância para uma utilização eficiente dos recursos computacional

Quais são os tipos de casos?

Os tipos de instância são um conceito de aprendizagem automática Azure que permite direcionar certos tipos de nós de computação para treino e inferências de cargas de trabalho. Para um Azure VM, um exemplo para um tipo de exemplo é STANDARD_D2_V3.

Nos clusters Kubernetes, os tipos de instância são representados numa definição de recurso personalizado (CRD) que é instalada com a extensão AzureML. Os tipos de instância são representados por dois elementos na extensão AzureML: nodeSelector e recursos.

Em resumo, permite nodeSelector especificar em que nó uma vagem deve funcionar. O nó deve ter uma etiqueta correspondente. resources Na secção, pode definir os recursos de cálculo (CPU, memória e GPU NVIDIA) para o pod.

Tipo de instância padrão

Por padrão, é criada uma defaultinstancetype definição com a seguinte definição quando se liga o cluster Kuberenetes ao espaço de trabalho AzureML:

  • Não nodeSelector é aplicado, o que significa que a cápsula pode ser agendada em qualquer nó.
  • As cápsulas da carga de trabalho são atribuídas recursos predefinidos com 0,6 núcleos cpu, memória 1536Mi e 0 GPU:
resources:
  requests:
    cpu: "0.6"
    memory: "1536Mi"
  limits:
    cpu: "0.6"
    memory: "1536Mi"
    nvidia.com/gpu: null

Nota

  • O tipo de instância padrão usa propositadamente poucos recursos. Para garantir que todas as cargas de trabalho ML são executadas com recursos adequados, por exemplo, recursos GPU, é altamente recomendado criar tipos de instâncias personalizadas.
  • defaultinstancetype não aparecerá como um recurso personalizado InstanceType no cluster ao executar o comando kubectl get instancetype, mas aparecerá em todos os clientes (UI, CLI, SDK).
  • defaultinstancetype pode ser ultrapassado com uma definição de tipo de instância personalizada com o mesmo nome que defaultinstancetype (ver Criar secção de tipos de instância personalizados )

Criar tipos de instâncias personalizadas

Para criar um novo tipo de instância, crie um novo recurso personalizado para o tipo de DD de exemplo. Por exemplo:

kubectl apply -f my_instance_type.yaml

Com 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"

Os seguintes passos criarão um tipo de instância com o comportamento rotulado:

  • As cápsulas só serão programadas em nós com etiqueta mylabel: mylabelvalue.
  • Serão atribuídos pedidos de recursos de 700m CPU e 1500Mi memória.
  • Serão atribuídos limites de recursos de 1 CPU, 2Gi memória e 1 GPU da NVIDIA.

Nota

  • Os recursos da NVIDIA GPU são especificados apenas na limits secção como valores inteiros. Para mais informações, consulte a documentação de Kubernetes.
  • CPU e recursos de memória são valores de cadeia.
  • A CPU pode ser especificada em millicores, por exemplo 100m, ou em números completos, por exemplo "1" é equivalente a 1000m.
  • A memória pode ser especificada como um número completo + sufixo, por exemplo 1024Mi para 1024 MiB.

Também é possível criar vários tipos de instância ao mesmo tempo:

kubectl apply -f my_instance_type_list.yaml

Com 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"

O exemplo acima cria dois tipos de instância: cpusmall e defaultinstancetype. Esta defaultinstancetype definição irá sobrepor-se à definição criada quando o defaultinstancetype cluster Kubernetes foi ligado ao espaço de trabalho AzureML.

Se uma carga de trabalho de formação ou inferência for submetida sem um tipo de instância, utiliza o defaultinstancetype. Para especificar um tipo de instância padrão para um cluster Kubernetes, crie um tipo de instância com nome defaultinstancetype. Será automaticamente reconhecido como o padrão.

Selecione tipo de instância para submeter trabalho de formação

Para selecionar um tipo de instância para um trabalho de formação utilizando O CLI (V2), especifique o seu nome como parte da resources secção de propriedades no trabalho YAML. Por exemplo:

command: python -c "print('Hello world!')"
environment:
  image: library/python:latest
compute: azureml:<compute_target_name>
resources:
  instance_type: <instance_type_name>

No exemplo acima, substitua-o pelo <compute_target_name> nome do seu alvo de cálculo Kubernetes e <instance_type_name> pelo nome do tipo de instância que pretende selecionar. Se não instance_type houver propriedade especificada, o sistema usará defaultinstancetype para submeter o emprego.

Selecione tipo de instância para implementar modelo

Para selecionar um tipo de instância para uma implementação de modelo usando CLI (V2), especifique o seu nome para instance_type propriedade na implementação YAML. Por exemplo:

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:20210727.v1

No exemplo acima, substitua-o pelo <instance_type_name> nome do tipo de instância que pretende selecionar. Se não instance_type houver uma propriedade especificada, o sistema usará defaultinstancetype para implementar o modelo.

Passos seguintes