Példánytípusok létrehozása és kezelése a számítási erőforrások hatékony kihasználásához
A példánytípusok olyan Azure Machine Learning-koncepciók, amelyek lehetővé teszik bizonyos típusú számítási csomópontok célbavételét a betanítási és következtetési számítási feladatokhoz. Egy Azure-beli virtuális gépen például a példány típusa .STANDARD_D2_V3
Ez a cikk bemutatja, hogyan hozhat létre és kezelhet példánytípusokat a számítási követelményeknek megfelelően.
A Kubernetes-fürtökben a példánytípusok egy egyéni erőforrásdefinícióban (CRD) jelennek meg, amely az Azure Machine Learning-bővítménysel van telepítve. Az Azure Machine Learning-bővítmény két eleme képviseli a példánytípusokat:
- A nodeSelector használatával megadhatja, hogy a pod melyik csomóponton fusson. A csomópontnak megfelelő címkével kell rendelkeznie.
- Az erőforrások szakaszban beállíthatja a pod számítási erőforrásait (CPU, memória és NVIDIA GPU).
Ha nodeSelector mezőt ad meg az Azure Machine Learning-bővítmény telepítésekor, a nodeSelector
mező minden példánytípusra érvényes lesz. Ez azt jelenti, hogy:
- Minden létrehozott példánytípus esetében a megadott
nodeSelector
mezőnek a bővítmény által megadottnodeSelector
mező részhalmazának kell lennie. - Ha egy példánytípust
nodeSelector
használ, a számítási feladat minden olyan csomóponton fut, amely megfelel a bővítmény által megadottnodeSelector
mezőnek és a példánytípus által megadottnodeSelector
mezőnek. - Ha mező nélküli
nodeSelector
példánytípust használ, a számítási feladat minden olyan csomóponton fut, amely megfelel a bővítmény által megadottnodeSelector
mezőnek.
Alapértelmezett példánytípus létrehozása
Alapértelmezés szerint egy meghívott defaultinstancetype
példánytípus akkor jön létre, amikor Kubernetes-fürtöt csatol egy Azure Machine Learning-munkaterülethez. A definíció a következő:
resources:
requests:
cpu: "100m"
memory: "2Gi"
limits:
cpu: "2"
memory: "2Gi"
nvidia.com/gpu: null
Ha nem alkalmaz nodeSelector
mezőt, a pod bármely csomóponton ütemezhető. A számítási feladat podjai 0,1 processzormaggal, 2 GB memóriával és 0 GPU-val vannak hozzárendelve a kéréshez. A számítási feladat podjai által használt erőforrások legfeljebb 2 processzormagra és 8 GB memóriára korlátozódnak.
Az alapértelmezett példánytípus szándékosan kevés erőforrást használ. Annak érdekében, hogy minden gépi tanulási számítási feladat megfelelő erőforrásokkal (például GPU-erőforrással) fusson, javasoljuk, hogy hozzon létre egyéni példánytípusokat.
Tartsa szem előtt az alapértelmezett példánytípusra vonatkozó alábbi pontokat:
defaultinstancetype
a parancskubectl get instancetype
futtatásakor nem jelenik meg egyéni erőforráskéntInstanceType
a fürtben, de minden ügyfélnél (felhasználói felület, Azure CLI, SDK) megjelenik.defaultinstancetype
az azonos nevű egyéni példánytípus definíciójával felül lehet bírálni.
Egyéni példánytípus létrehozása
Új példánytípus létrehozásához hozzon létre egy új egyéni erőforrást a CRD típusú példányhoz. Példa:
kubectl apply -f my_instance_type.yaml
A my_instance_type.yaml tartalma:
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"
Az előző kód létrehoz egy példánytípust a címkézett viselkedéssel:
- A podok csak a címkével
mylabel: mylabelvalue
rendelkező csomópontokon vannak ütemezve. - A podok a PROCESSZOR és
1500Mi
a memória erőforrás-kérései700m
. - A podok a PROCESSZOR,
2Gi
a memória és1
az NVIDIA GPU erőforráskorlátjaihoz1
vannak hozzárendelve.
Az egyéni példánytípusok létrehozásának meg kell felelnie a következő paramétereknek és definíciós szabályoknak, vagy sikertelen:
Paraméter | Kötelező vagy választható | Leírás |
---|---|---|
name |
Kötelező | Sztringértékek, amelyeknek egyedinek kell lenniük egy fürtben. |
CPU request |
Kötelező | Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A processzort ezredmásodpercben is megadhatja; például 100m . Megadhatja teljes számként is. Például a "1" egyenértékű a következővel: 1000m . |
Memory request |
Kötelező | Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A memóriát megadhatja teljes számként + utótagként; például 1024Mi 1024 bájt (MiB). |
CPU limit |
Kötelező | Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A processzort ezredmásodpercben is megadhatja; például 100m . Megadhatja teljes számként is. Például a "1" egyenértékű a következővel: 1000m . |
Memory limit |
Kötelező | Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A memóriát megadhatja teljes számként + utótagként; például 1024Mi az 1024 MiB-hez. |
GPU |
Választható | Egész számértékek, amelyek csak a limits szakaszban adhatók meg. További információkért tekintse meg a Kubernetes dokumentációját. |
nodeSelector |
Választható | Sztringkulcsok és értékek térképe. |
Egyszerre több példánytípust is létrehozhat:
kubectl apply -f my_instance_type_list.yaml
A my_instance_type_list.yaml tartalma:
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"
Az előző példa két példánytípust hoz létre: cpusmall
és defaultinstancetype
. Ez a defaultinstancetype
definíció felülbírálja azt a defaultinstancetype
definíciót, amely akkor jött létre, amikor a Kubernetes-fürtöt az Azure Machine Learning-munkaterülethez csatolta.
Ha a betanítási vagy következtetési számítási feladatot példánytípus nélkül küldi el, az azt használja defaultinstancetype
. Egy Kubernetes-fürt alapértelmezett példánytípusának megadásához hozzon létre egy példánytípust a névvel defaultinstancetype
. A rendszer automatikusan felismeri az alapértelmezett értéket.
Példánytípus kiválasztása betanítási feladat elküldéséhez
Ha ki szeretne választani egy példánytípust egy betanítási feladathoz az Azure CLI (v2) használatával, adja meg a nevét a resources
YAML feladat tulajdonságok szakaszának részeként. Példa:
command: python -c "print('Hello world!')"
environment:
image: library/python:latest
compute: azureml:<Kubernetes-compute_target_name>
resources:
instance_type: <instance type name>
Az előző példában cserélje le <Kubernetes-compute_target_name>
a Kubernetes számítási cél nevét. Cserélje le <instance type name>
a kijelölni kívánt példánytípus nevét. Ha nem ad meg tulajdonságot instance_type
, a rendszer a feladat elküldésére használja defaultinstancetype
.
Modell üzembe helyezéséhez válasszon egy példánytípust
Ha az Azure CLI (v2) használatával szeretne példánytípust választani egy modelltelepítéshez, adja meg a tulajdonság nevét az instance_type
üzembe helyezési YAML-ben. Példa:
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
Az előző példában cserélje le <instance type name>
a kijelölni kívánt példánytípus nevét. Ha nem ad meg tulajdonságot instance_type
, a rendszer a modell üzembe helyezését használja defaultinstancetype
.
Fontos
Az MLflow-modell üzembe helyezéséhez az erőforrás-kérelem legalább 2 processzormagot és 4 GB memóriát igényel. Ellenkező esetben az üzembe helyezés sikertelen lesz.
Erőforrásszakasz ellenőrzése
A szakasz segítségével resources
meghatározhatja a modelltelepítések erőforrás-kérését és korlátját. Példa:
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>
Ha a szakaszt resources
használja, egy érvényes erőforrásdefiníciónak meg kell felelnie az alábbi szabályoknak. Érvénytelen erőforrásdefiníció esetén a modell üzembe helyezése meghiúsul.
Paraméter | Kötelező vagy választható | Leírás |
---|---|---|
requests: cpu: |
Kötelező | Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A processzort ezredmásodpercben is megadhatja; például 100m . A teljes számokat is megadhatja. Például a "1" egyenértékű a következővel: 1000m . |
requests: memory: |
Kötelező | Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A memóriát megadhatja teljes számként + utótagként; például 1024Mi az 1024 MiB-hez. A memória nem lehet kisebb 1 MB-nál. |
limits: cpu: |
Szabadon választható (csak akkor szükséges, ha GPU-ra van szüksége) |
Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A processzort ezredmásodpercben is megadhatja; például 100m . A teljes számokat is megadhatja. Például a "1" egyenértékű a következővel: 1000m . |
limits: memory: |
Szabadon választható (csak akkor szükséges, ha GPU-ra van szüksége) |
Sztringértékek, amelyek nem lehetnek nulla vagy üresek. A memóriát megadhatja teljes számként + utótagként; például 1024Mi 1024 MiB esetén. |
limits: nvidia.com/gpu: |
Szabadon választható (csak akkor szükséges, ha GPU-ra van szüksége) |
Egész számértékek, amelyek nem lehetnek üresek, és csak a limits szakaszban adhatók meg. További információkért tekintse meg a Kubernetes dokumentációját. Ha csak cpu-t igényel, kihagyhatja a teljes limits szakaszt. |
A modell üzembe helyezéséhez a példány típusa szükséges . Ha definiálta a resources
szakaszt, és a példánytípus alapján lesz érvényesítve, a szabályok a következők:
- Érvényes
resource
szakaszdefinícióval az erőforráskorlátnak kisebbnek kell lennie a példánytípus korlátainál. Ellenkező esetben az üzembe helyezés sikertelen lesz. - Ha nem határoz meg példánytípust, a rendszer a szakaszon végzett ellenőrzéshez használja
defaultinstancetype
.resources
- Ha nem definiálja a szakaszt
resources
, a rendszer a példánytípust használja az üzembe helyezés létrehozásához.