Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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é
nodeSelectorpole mělo být podmnožinou pole zadanéhonodeSelectorrozšířením. - Pokud použijete typ instance s
nodeSelector, úloha se spustí na libovolném uzlu, který odpovídá poli zadanémunodeSelectorrozšířením i poli zadanémunodeSelectortypem instance. - Pokud použijete typ instance bez
nodeSelectorpole, úloha se spustí na libovolném uzlu, který odpovídá poli zadanémunodeSelectorrozšíř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:
-
defaultinstancetypese nezobrazuje jako vlastní prostředek v clusteru, když spustíte příkazInstanceType, ale zobrazuje se ve všech klientech (uživatelské rozhraní, Azure CLI, SDK). - Můžete přepsat
defaultinstancetypedefinová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
700ma1500Mipaměti podům. - Přiřaďte podům limity prostředků:
1pro CPU,2Gipro paměť a1pro 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
resourcemusí 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
defaultinstancetypek ověření oddíluresources. - Pokud nedefinujete oddíl
resources, systém použije typ instance k vytvoření nasazení.