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 Tanulás koncepciók, amelyek lehetővé teszik bizonyos 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 Tanulás kiterjesztéssel van telepítve. Az Azure Machine Tanulás bővítmény két eleme jelöli 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 Tanulás 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 megadott nodeSelector mező részhalmazának kell lennie.
  • Ha egy példánytípust nodeSelectorhasznál, a számítási feladat minden olyan csomóponton fut, amely megfelel a bővítmény által megadott nodeSelector mezőnek és a példánytípus által megadott nodeSelector 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 megadott nodeSelector mezőnek.

Alapértelmezett példánytípus létrehozása

Alapértelmezés szerint a rendszer meghív egy példánytípustdefaultinstancetype, amikor Kubernetes-fürtöt csatol egy Azure Machine Tanulás-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:

  • defaultinstancetypea parancs kubectl get instancetypefuttatásakor nem jelenik meg egyéni erőforrásként InstanceType 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: mylabelvaluerendelkező 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 és 1 az NVIDIA GPU erőforráskorlátjaihoz 1 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 Szükséges 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 Szükséges 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 Szükséges 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 Szükséges 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 Tanulás-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:
Szükséges 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:
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:
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:
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áljadefaultinstancetype.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.

Következő lépések