Kommentar
Å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 begrepp som du använder för att rikta in dig på specifika typer av beräkningsnoder för tränings- och slutsatsdragningsarbetsbelastningar. På en virtuell Azure-dator är STANDARD_D2_V3till exempel en instanstyp . Den här artikeln visar hur du skapar och hanterar instanstyper för dina beräkningskrav.
I Kubernetes-kluster representerar Azure Machine Learning-tillägget instanstyper som en anpassad resursdefinition (CRD) som installeras. Två element i Azure Machine Learning-tillägget representerar instanstyper:
- nodeSelector: Använd nodeSelector för att ange vilken nod en podd ska köras på. Noden måste ha en motsvarande etikett.
- resurser: I avsnittet resurser anger du 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 gäller fältet nodeSelector för alla instanstyper. Den här konfigurationen innebär:
- 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å vilken nod som helst som matchar både det tilläggsspecificeradenodeSelectorfältet och det instanstypsspecificeradenodeSelectorfältet. - Om du använder en instanstyp utan fältet
nodeSelectorkörs arbetsbelastningen på vilken nod som helst som matchar det tilläggsspecifikanodeSelector-fältet.
Skapa en standardinstanstyp
När du kopplar ett Kubernetes-kluster till en Azure Machine Learning arbetsyta skapar tjänsten en instanstyp med namnet defaultinstancetype som standard. 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ärna, 2 GiB i minne och 0 GPU:er i resursbegäran. De resurser som arbetsbelastningens poddar använder är begränsade till 2 CPU-kärnor och 2 GiB arbetsminne.
Standardinstanstypen använder avsiktligt minimala resurser. Skapa anpassade instanstyper för att säkerställa att alla maskininlärningsarbetsbelastningar körs med lämpliga resurser (till exempel GPU-resurser).
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). - Du kan åsidosätta
defaultinstancetypegenom att definiera en anpassad instanstyp med samma namn.
Skapa en anpassad instanstyp
Skapa en ny instanstyp genom att skapa en ny anpassad resurs för instanstypen CRD. Ett 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 följande beteende:
- Schemalägg endast poddar på noder som har etiketten
mylabel: mylabelvalue. - Tilldela resursbegäranden
700mför cpu och1500Miminne till poddar. - Tilldela poddar resursgränser på
1för CPU,2Giför minne och1för NVIDIA GPU.
Skapande av anpassad instanstyp måste uppfylla följande parametrar och definitionsregler, annars misslyckas det:
| Parameter | Obligatorisk eller valfri | Description |
|---|---|---|
name |
Required | Strängvärden som måste vara unika i ett kluster. |
CPU request |
Required | Strängvärden som inte får vara noll eller tomma. Du kan ange processorn i millicores. till exempel 100m. Du kan också ange det som fullständiga tal.
"1" motsvarar till exempel 1000m. |
Memory request |
Required | Strängvärden som inte får vara noll eller tomma. Du kan ange minnet som ett fullständigt tal + suffix. till exempel 1024Mi för 1 024 mebibyte (MiB). |
CPU limit |
Required | Strängvärden som inte får vara noll eller tomma. Du kan ange processorn i millicores. till exempel 100m. Du kan också ange det som fullständiga tal.
"1" motsvarar till exempel 1000m. |
Memory limit |
Required | Strängvärden som inte får vara noll eller tomma. Du kan ange minnet som ett fullständigt tal + suffix. till exempel 1024Mi för 1024 MiB. |
GPU |
Optional | Heltalsvärden som du bara kan ange i avsnittet limits . Mer information finns i Kubernetes-dokumentationen. |
nodeSelector |
Optional | Karta över strängnycklar och värden. |
Du kan också 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 du skapade när du kopplade Kubernetes-klustret till Azure Machine Learning arbetsytan.
Om du skickar en tränings- eller inferensarbetsbelastning utan en instanstyp använder den defaultinstancetype. 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. Ett exempel:
$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>
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. Ett exempel:
$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
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.
Important
För MLflow-modelldistribution kräver resursbegäran minst 2 CPU-kärnor och 4 GB minne. Annars misslyckas distributionen.
Verifiering av resursavsnitt
Använd avsnittet resources för att definiera resursbegäran och gräns för dina modelldistributioner. Ett exempel:
$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>
När du använder resources avsnittet måste en giltig resursdefinition uppfylla följande regler. En ogiltig resursdefinition gör att modelldistributionen misslyckas.
| Parameter | Obligatorisk eller valfri | Description |
|---|---|---|
requests:cpu: |
Required | Strängvärden som inte får vara noll eller tomma. Du kan ange processorn i millicores. till exempel 100m. Du kan också ange den i fullständiga tal.
"1" motsvarar till exempel 1000m. |
requests:memory: |
Required | Strängvärden som inte får vara noll eller tomma. Du kan ange minnet som ett fullständigt tal + suffix. till exempel 1024Mi för 1024 MiB. Minnet får inte vara mindre än 1 MB. |
limits:cpu: |
Optional (krävs endast när du behöver GPU) |
Strängvärden som inte får vara noll eller tomma. Du kan ange processorn i millicores. till exempel 100m. Du kan också ange den i fullständiga tal.
"1" motsvarar till exempel 1000m. |
limits:memory: |
Optional (krävs endast när du behöver GPU) |
Strängvärden som inte får vara noll eller tomma. Du kan ange minnet som ett fullständigt tal + suffix. till exempel 1024Mi för 1 024 MiB. |
limits:nvidia.com/gpu: |
Optional (krävs endast när du behöver GPU) |
Heltalsvärden som inte kan vara tomma och som endast kan anges i avsnittet limits . Mer information finns i Kubernetes-dokumentationen. Om du bara behöver CPU kan du utelämna hela limits avsnittet. |
En instanstyp krävs för modelldistribution. Om du definierar avsnittet resources verifieras det mot instanstypen enligt följande regler:
- 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.