Vytváření a správa typů instancí pro efektivní využití výpočetních prostředků

Typy instancí jsou koncept Azure Machine Learning, který slouží k cílení na konkrétní typy výpočetních uzlů pro trénování a odvozování úloh. Například ve virtuálním počítači Azure je STANDARD_D2_V3typ instance . V tomto článku se dozvíte, jak vytvářet a spravovat typy instancí pro vaše požadavky na výpočty.

V clusterech Kubernetes představuje rozšíření Azure Machine Learning typy instancí jako vlastní definici prostředků (CRD), kterou instaluje. Dva prvky rozšíření Azure Machine Learning představují typy instancí:

  • nodeSelector: Pomocí nodeSelector určete, na kterém uzlu se má pod spustit. Uzel musí mít odpovídající popisek.
  • resources: V části prostředky nastavte výpočetní prostředky (procesor, paměť a GPU NVIDIA) pro pod.

Pokud při nasazování rozšíření Azure Machine Learning zadáte pole nodeSelector, použije se nodeSelector pole pro všechny typy instancí. Tato konfigurace znamená:

  • Pro každý typ instance, který vytvoříte, by zadané nodeSelector pole mělo být podmnožinou pole zadaného nodeSelector rozšířením.
  • Pokud použijete typ instance s nodeSelector, úloha se spustí na libovolném uzlu, který odpovídá poli zadanému nodeSelector rozšířením i poli zadanému nodeSelector typem instance.
  • Pokud použijete typ instance bez nodeSelector pole, úloha se spustí na libovolném uzlu, který odpovídá poli zadanému nodeSelector rozšířením.

Vytvoření výchozího typu instance

Když ke Azure Machine Learning pracovnímu prostoru připojíte cluster Kubernetes, služba ve výchozím nastavení vytvoří typ instance s názvemdefaultinstancetype. Tady je definice:

resources:
  requests:
    cpu: "100m"
    memory: "2Gi"
  limits:
    cpu: "2"
    memory: "2Gi"
    nvidia.com/gpu: null

Pokud pole nepoužijete nodeSelector , můžete ho naplánovat na libovolném uzlu. Podům úloh se přiřadí výchozí prostředky s 0,1 jádry procesoru, 2 GiB paměti a 0 GPU pro požadavek. Prostředky, které pody úlohy používají, jsou omezené na 2 jádra procesoru a 2 GiB paměti.

Výchozí typ instance záměrně používá minimální prostředky. Pokud chcete zajistit, aby všechny úlohy strojového učení běžely s příslušnými prostředky (například prostředky GPU), vytvořte vlastní typy instancí.

Mějte na paměti následující body týkající se výchozího typu instance:

  • defaultinstancetype se nezobrazuje jako vlastní prostředek v clusteru, když spustíte příkaz InstanceType, ale zobrazuje se ve všech klientech (uživatelské rozhraní, Azure CLI, SDK).
  • Můžete přepsat defaultinstancetype definováním vlastního typu instance se stejným názvem.

Vytvoření vlastního typu instance

Pokud chcete vytvořit nový typ instance, vytvořte nový vlastní prostředek pro typ instance CRD. Příklady:

kubectl apply -f my_instance_type.yaml

Tady je obsah souboru 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"

Předchozí kód vytvoří typ instance s následujícím chováním:

  • Plánujte pody pouze na uzlech, které mají štítek mylabel: mylabelvalue.
  • Přiřaďte požadavky na prostředky procesoru 700m a 1500Mi paměti podům.
  • Přiřaďte podům limity prostředků: 1 pro CPU, 2Gi pro paměť a 1 pro NVIDIA GPU.

Vytvoření typu vlastní instance musí splňovat následující parametry a pravidla definice, jinak selže:

Parameter Požadované nebo volitelné Description
name Required Řetězcové hodnoty, které musí být v clusteru jedinečné.
CPU request Required Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Můžete zadat procesor v milicores; například 100m. Můžete ho také zadat jako úplná čísla. Například "1" je ekvivalentní s 1000m.
Memory request Required Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Paměť můžete zadat jako celé číslo + příponu; Například 1024Mi pro 1 024 mebibajtů (MiB).
CPU limit Required Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Můžete zadat procesor v milicores; například 100m. Můžete ho také zadat jako úplná čísla. Například "1" je ekvivalentní s 1000m.
Memory limit Required Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Paměť můžete zadat jako celé číslo + příponu; Například 1024Mi pro 1024 MiB.
GPU Optional Celočíselné hodnoty, které můžete zadat pouze v oddílu limits .
Další informace najdete v dokumentaci k Kubernetes.
nodeSelector Optional Mapa řetězcových klíčů a hodnot

Můžete také vytvořit více typů instancí najednou:

kubectl apply -f my_instance_type_list.yaml

Tady je obsah souboru 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"

Předchozí příklad vytvoří dva typy instancí: cpusmall a defaultinstancetype. Tato defaultinstancetype definice přepíše definicidefaultinstancetype, kterou jste vytvořili při připojení clusteru Kubernetes k pracovnímu prostoru Azure Machine Learning.

Pokud odešlete trénovací úlohu nebo úlohu pro inferenci bez typu instance, použije se defaultinstancetype. Pokud chcete zadat výchozí typ instance pro cluster Kubernetes, vytvořte typ instance s názvem defaultinstancetype. Automaticky se rozpozná jako výchozí.

Vyberte typ instance pro odeslání trénovací úlohy.

Pokud chcete vybrat typ instance pro trénovací úlohu pomocí Azure CLI (v2), zadejte jeho název jako součást oddílu resources vlastností v YAML úlohy. Příklady:

$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>

V předchozím příkladu nahraďte <Kubernetes-compute_target_name> názvem cílového výpočetního objektu Kubernetes. Nahraďte <instance type name> názvem typu instance, který chcete vybrat. Pokud nezadáte vlastnost instance_type, systém použije defaultinstancetype k odeslání úlohy.

Výběr typu instance pro nasazení modelu

Pokud chcete vybrat typ instance pro nasazení modelu pomocí Azure CLI (v2), zadejte jeho název vlastnosti instance_type v YAML nasazení. Příklady:

$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

V předchozím příkladu nahraďte <instance type name> názvem typu instance, který chcete vybrat. Pokud nezadáte instance_type vlastnost, systém použije defaultinstancetype k nasazení modelu.

Important

V případě nasazení modelu MLflow požadavek na prostředky vyžaduje alespoň 2 jádra procesoru a 4 GB paměti. V opačném případě se nasazení nezdaří.

Ověření sekce prostředků

resources V této části můžete definovat požadavek na prostředky a omezení pro nasazení modelu. Příklady:

$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>

Při použití oddílu resources musí platná definice prostředku splňovat následující pravidla. Neplatná definice prostředku způsobí selhání nasazení modelu.

Parameter Požadované nebo volitelné Description
requests:
cpu:
Required Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Můžete zadat procesor v milicores; například 100m. Můžete ho také zadat v úplných číslech. Například "1" je ekvivalentní s 1000m.
requests:
memory:
Required Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Paměť můžete zadat jako celé číslo + příponu; Například 1024Mi pro 1024 MiB.
Paměť nemůže být menší než 1 MB.
limits:
cpu:
Optional
(vyžaduje se pouze v případě, že potřebujete GPU)
Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Můžete zadat procesor v milicores; například 100m. Můžete ho také zadat v úplných číslech. Například "1" je ekvivalentní s 1000m.
limits:
memory:
Optional
(vyžaduje se pouze v případě, že potřebujete GPU)
Řetězcové hodnoty, které nemohou být nulové nebo prázdné.
Paměť můžete zadat jako celé číslo + příponu; Například 1024Mi pro 1 024 MiB.
limits:
nvidia.com/gpu:
Optional
(vyžaduje se pouze v případě, že potřebujete GPU)
Celočíselné hodnoty, které nemohou být prázdné a dají se zadat pouze v oddílu limits .
Další informace najdete v dokumentaci k Kubernetes.
Pokud vyžadujete pouze procesor, můžete vynechat celý limits oddíl.

Pro nasazení modelu se vyžaduje typ instance. Pokud definujete resources oddíl, ověří se proti typu instance podle následujících pravidel:

  • Při použití platné definice oddílu resource musí být limity prostředků nižší než limity typu instance. V opačném případě nasazení selže.
  • Pokud nedefinujete typ instance, systém použije defaultinstancetype k ověření oddílu resources .
  • Pokud nedefinujete oddíl resources, systém použije typ instance k vytvoření nasazení.

Další kroky