Vytváření a správa typů instancí pro efektivní využití výpočetních prostředků
Typy instancí jsou konceptem služby Azure Machine Learning, který umožňuje cílení na určité 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_V3
typ 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 se typy instancí reprezentují ve vlastní definici prostředků (CRD), která je nainstalovaná s rozšířením Azure Machine Learning. Dva prvky rozšíření Azure Machine Learning představují typy instancí:
- Pomocí nodeSelectoru určete, na kterém uzlu se má pod spouštět. Uzel musí mít odpovídající popisek.
- V části prostředky můžete pro pod nastavit výpočetní prostředky (procesor, paměť a NVIDIA GPU).
Pokud při nasazování rozšíření Azure Machine Learning zadáte pole nodeSelector, nodeSelector
použije se pole pro všechny typy instancí. To znamená, že:
- Pro každý typ instance, který vytvoříte, by zadané
nodeSelector
pole mělo být podmnožinou pole zadanéhonodeSelector
rozšířením. - Pokud použijete typ instance s
nodeSelector
, úloha se spustí na libovolném uzlu, který odpovídá poli zadanémunodeSelector
rozšířením i poli zadanémunodeSelector
typem instance. - Pokud použijete typ instance bez
nodeSelector
pole, úloha se spustí na libovolném uzlu, který odpovídá poli zadanémunodeSelector
rozšířením.
Vytvoření výchozího typu instance
Ve výchozím nastavení se při připojení clusteru Kubernetes k pracovnímu prostoru Azure Machine Learning vytvoří typ defaultinstancetype
instance. 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 GB paměti a 0 GPU pro požadavek. Prostředky, které pody úlohy používají, jsou omezené na 2 jádra procesoru a 8 GB paměti.
Výchozí typ instance účelně používá několik prostředků. Pokud chcete zajistit, aby všechny úlohy strojového učení běžely s příslušnými prostředky (například s prostředkem GPU), důrazně doporučujeme vytvořit vlastní typy instancí.
Mějte na paměti následující body týkající se výchozího typu instance:
defaultinstancetype
při spuštění příkazukubectl get instancetype
se v clusteru nezobrazuje jakoInstanceType
vlastní prostředek, ale zobrazuje se ve všech klientech (uživatelské rozhraní, Azure CLI, SDK).defaultinstancetype
lze přepsat definicí vlastního typu instance, který má stejný název.
Vytvoření vlastního typu instance
Pokud chcete vytvořit nový typ instance, vytvořte nový vlastní prostředek pro typ instance CRD. Příklad:
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 popiskem chování:
- Pody jsou naplánovány pouze na uzlech, které mají popisek
mylabel: mylabelvalue
. - Podům se přiřazují požadavky
700m
na prostředky procesoru a1500Mi
paměti. - Pody jsou přiřazené limity prostředků procesoru
1
,2Gi
paměti a1
NVIDIA GPU.
Vytvoření vlastních typů instancí musí splňovat následující parametry a pravidla definice, jinak selže:
Parametr | Požadované nebo volitelné | Popis |
---|---|---|
name |
Povinní účastníci | Řetězcové hodnoty, které musí být v clusteru jedinečné. |
CPU request |
Požaduje se | Řetězcové hodnoty, které nesmí 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 |
Požaduje se | Řetězcové hodnoty, které nesmí 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 |
Požaduje se | Řetězcové hodnoty, které nesmí 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 |
Požaduje se | Řetězcové hodnoty, které nesmí být nulové nebo prázdné. Paměť můžete zadat jako celé číslo + příponu; Například 1024Mi pro 1024 MiB. |
GPU |
Volitelné | Celočíselné hodnoty, které lze zadat pouze v oddílu limits . Další informace najdete v dokumentaci k Kubernetes. |
nodeSelector |
Volitelné | Mapa řetězcových klíčů a hodnot |
Je také možné 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 definici vytvořenou defaultinstancetype
při připojení clusteru Kubernetes k pracovnímu prostoru Azure Machine Learning.
Pokud odešlete trénovací nebo odvozenou úlohu bez typu instance, použije defaultinstancetype
se . 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říklad:
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 instance_type
vlastnost, systém ji odešle defaultinstancetype
.
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říklad:
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.
Důležité
V případě nasazení modelu MLflow požadavek na prostředky vyžaduje alespoň 2 jádra procesoru a 4 GB paměti. Jinak nasazení selže.
Ověření oddílu prostředku
V resources
této části můžete definovat požadavek na prostředky a omezení nasazení modelu. Příklad:
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>
Pokud použijete resources
oddíl, musí platná definice prostředku splňovat následující pravidla. Neplatná definice prostředku způsobí selhání nasazení modelu.
Parametr | Požadované nebo volitelné | Popis |
---|---|---|
requests: cpu: |
Povinní účastníci | Řetězcové hodnoty, které nesmí 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: |
Požaduje se | Řetězcové hodnoty, které nesmí 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: |
Volitelný (vyžaduje se pouze v případě, že potřebujete GPU) |
Řetězcové hodnoty, které nesmí 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: |
Volitelný (vyžaduje se pouze v případě, že potřebujete GPU) |
Řetězcové hodnoty, které nesmí 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: |
Volitelný (vyžaduje se pouze v případě, že potřebujete GPU) |
Celočíselné hodnoty, které nemohou být prázdné a dají se zadat jenom 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 jste definovali resources
oddíl a ověří se proti typu instance, pravidla jsou následující:
- V platné
resource
definici oddílu musí být limity prostředků menší než limity typu instance. Jinak nasazení selže. - Pokud nedefinujete typ instance, systém použije
defaultinstancetype
k ověření oddíluresources
. - Pokud oddíl nedefinujete
resources
, systém k vytvoření nasazení použije typ instance.