Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Instanstyper är ett Azure Machine Learning-koncept som gör det möjligt att rikta in sig på vissa typer av beräkningsnoder för tränings- och slutsatsdragningsarbetsbelastningar. På en virtuell Azure-dator är STANDARD_D2_V3till exempel en instanstyp . I den här artikeln får du lära dig hur du skapar och hanterar instanstyper för dina beräkningskrav.
I Kubernetes-kluster representeras instanstyper i en anpassad resursdefinition (CRD) som är installerad med Azure Machine Learning-tillägget. Två element i Azure Machine Learning-tillägget representerar instanstyperna:
- Använd nodeSelector för att ange vilken nod en podd ska köras på. Noden måste ha en motsvarande etikett.
- I avsnittet resurser kan du ange beräkningsresurserna (CPU, minne och NVIDIA GPU) för podden.
Om du anger ett nodeSelector-fält när du distribuerar Azure Machine Learning-tillägget tillämpas fältet nodeSelector på alla instanstyper. Detta innebär att:
- För varje instanstyp som du skapar ska det angivna nodeSelectorfältet vara en delmängd av det angivnanodeSelectorfältet för tillägget.
- Om du använder en instanstyp med nodeSelectorkörs arbetsbelastningen på alla noder som matchar både det angivnanodeSelectorfältet för tillägg och det angivnanodeSelectorfältet av instanstyp.
- Om du använder en instanstyp utan fält nodeSelectorkörs arbetsbelastningen på alla noder som matchar det angivnanodeSelectorfältet för tillägg.
Skapa en standardinstanstyp
Som standard skapas en instanstyp som heter defaultinstancetype när du kopplar ett Kubernetes-kluster till en Azure Machine Learning-arbetsyta. Här är definitionen:
resources:
  requests:
    cpu: "100m"
    memory: "2Gi"
  limits:
    cpu: "2"
    memory: "2Gi"
    nvidia.com/gpu: null
Om du inte använder ett nodeSelector fält kan podden schemaläggas på valfri nod. Arbetsbelastningens poddar tilldelas standardresurser med 0,1 CPU-kärnor, 2 GB minne och 0 GPU:er för begäran. De resurser som arbetsbelastningens poddar använder är begränsade till 2 CPU-kärnor och 8 GB minne.
Standardinstanstypen använder avsiktligt få resurser. För att säkerställa att alla maskininlärningsarbetsbelastningar körs med lämpliga resurser (till exempel GPU-resurs) rekommenderar vi starkt att du skapar anpassade instanstyper.
Tänk på följande punkter om standardinstanstypen:
- 
              defaultinstancetypevisas inte som enInstanceTypeanpassad resurs i klustret när du kör kommandotkubectl get instancetype, men det visas i alla klienter (UI, Azure CLI, SDK).
- 
              defaultinstancetypekan åsidosättas med definitionen av en anpassad instanstyp som har samma namn.
Skapa en anpassad instanstyp
Skapa en ny instanstyp genom att skapa en ny anpassad resurs för instanstypen CRD. Till exempel:
kubectl apply -f my_instance_type.yaml
Här är innehållet i 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"
Föregående kod skapar en instanstyp med det märkta beteendet:
- Poddar schemaläggs endast på noder som har etiketten mylabel: mylabelvalue.
- Poddar tilldelas resursbegäranden 700mför cpu och1500Miminne.
- Poddar tilldelas resursgränser 1för cpu,2Giminne och1NVIDIA GPU.
Skapande av anpassade instanstyper måste uppfylla följande parametrar och definitionsregler, annars misslyckas det:
Det går också att skapa flera instanstyper samtidigt:
kubectl apply -f my_instance_type_list.yaml
Här är innehållet i 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"
I föregående exempel skapas två instanstyper: cpusmall och defaultinstancetype. Den här defaultinstancetype definitionen åsidosätter definitionen defaultinstancetype som skapades när du kopplade Kubernetes-klustret till Azure Machine Learning-arbetsytan.
Om du skickar en tränings- eller slutsatsarbetsbelastning utan instanstyp använder defaultinstancetypeden . Om du vill ange en standardinstanstyp för ett Kubernetes-kluster skapar du en instanstyp med namnet defaultinstancetype. Den identifieras automatiskt som standard.
Välj en instanstyp för att skicka ett träningsjobb
Om du vill välja en instanstyp för ett träningsjobb med hjälp av Azure CLI (v2) anger du dess namn som en del av egenskapsavsnittet resources i jobbet YAML. Till exempel:
command: python -c "print('Hello world!')"
environment:
  image: library/python:latest
compute: azureml:<Kubernetes-compute_target_name>
resources:
  instance_type: <instance type name>
I föregående exempel ersätter du <Kubernetes-compute_target_name> med namnet på ditt Kubernetes-beräkningsmål. Ersätt <instance type name> med namnet på den instanstyp som du vill välja. Om du inte anger en instance_type egenskap använder defaultinstancetype systemet för att skicka jobbet.
Välj en instanstyp för att distribuera en modell
Om du vill välja en instanstyp för en modelldistribution med hjälp av Azure CLI (v2) anger du dess namn för instance_type egenskapen i distributionens YAML. Till exempel:
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
I föregående exempel ersätter <instance type name> du med namnet på den instanstyp som du vill välja. Om du inte anger en instance_type egenskap använder defaultinstancetype systemet för att distribuera modellen.
Viktigt!
För MLflow-modelldistribution kräver resursbegäran minst 2 CPU-kärnor och 4 GB minne. Annars misslyckas distributionen.
Verifiering av resursavsnitt
Du kan använda avsnittet resources för att definiera resursbegäran och gränsen för dina modelldistributioner. Till exempel:
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>
Om du använder avsnittet resources måste en giltig resursdefinition uppfylla följande regler. En ogiltig resursdefinition gör att modelldistributionen misslyckas.
Instanstypen krävs  för modelldistribution. Om du har definierat avsnittet resources och det verifieras mot instanstypen är reglerna följande:
- Med en giltig resourceavsnittsdefinition måste resursgränserna vara mindre än instanstypens gränser. Annars misslyckas distributionen.
- Om du inte definierar en instanstyp använder defaultinstancetypesystemet för validering med avsnittetresources.
- Om du inte definierar resourcesavsnittet använder systemet instanstypen för att skapa distributionen.