İşlem kaynaklarının verimli kullanımı için örnek türleri oluşturma ve yönetme

Örnek türleri, eğitim ve çıkarım iş yükleri için belirli işlem düğümlerinin hedeflenmesine olanak tanıyan bir Azure Machine Learning kavramıdır. Örneğin, bir Azure sanal makinesinde örnek türü şeklindedir STANDARD_D2_V3. Bu makalede, hesaplama gereksinimleriniz için örnek türleri oluşturmayı ve yönetmeyi öğreneceksiniz.

Kubernetes kümelerinde örnek türleri, Azure Machine Learning uzantısıyla birlikte yüklenen özel bir kaynak tanımında (CRD) temsil edilir. Azure Machine Learning uzantısındaki iki öğe örnek türlerini gösterir:

  • Bir pod'un hangi düğümde çalıştırılacağını belirtmek için nodeSelector'ı kullanın. Düğüme karşılık gelen bir etiket olmalıdır.
  • Kaynaklar bölümünde pod için işlem kaynaklarını (CPU, bellek ve NVIDIA GPU) ayarlayabilirsiniz.

Azure Machine Learning uzantısını dağıtırken bir nodeSelector alanı belirtirseniz, nodeSelector alan tüm örnek türlerine uygulanır. Bu şu anlama gelir:

  • Oluşturduğunuz her örnek türü için, belirtilen alan uzantıyla belirtilen nodeSelector nodeSelector alanın bir alt kümesi olmalıdır.
  • ile bir örnek türü kullanırsanız, iş yükü hem uzantıyla belirtilen alanla hem de örnek türü nodeSelector belirtilen nodeSelector alanla nodeSelectoreşleşen herhangi bir düğümde çalışır.
  • Alansız nodeSelector bir örnek türü kullanırsanız, iş yükü uzantı tarafından belirtilen nodeSelector alanla eşleşen herhangi bir düğümde çalışır.

Varsayılan örnek türü oluşturma

Varsayılan olarak, Bir Azure Machine Learning çalışma alanına Kubernetes kümesi eklediğinizde adlı defaultinstancetype bir örnek türü oluşturulur. Tanımı şu şekildedir:

resources:
  requests:
    cpu: "100m"
    memory: "2Gi"
  limits:
    cpu: "2"
    memory: "2Gi"
    nvidia.com/gpu: null

Alan uygulamazsanız pod herhangi bir nodeSelector düğümde zamanlanabilir. İş yükünün podlarına istek için 0,1 CPU çekirdeği, 2 GB bellek ve 0 GPU ile varsayılan kaynaklar atanır. İş yükünün podlarının kullandığı kaynaklar 2 CPU çekirdeği ve 8 GB bellekle sınırlıdır.

Varsayılan örnek türü bilerek birkaç kaynak kullanır. Tüm makine öğrenmesi iş yüklerinin uygun kaynaklarla (örneğin GPU kaynağı) çalıştığından emin olmak için özel örnek türleri oluşturmanızı kesinlikle öneririz.

Varsayılan örnek türü hakkında aşağıdaki noktaları aklınızda bulundurun:

  • defaultinstancetypekomutunu kubectl get instancetypeçalıştırdığınızda kümede özel kaynak InstanceType olarak görünmez, ancak tüm istemcilerde (UI, Azure CLI, SDK) görünür.
  • defaultinstancetype aynı ada sahip bir özel örnek türünün tanımıyla geçersiz kılınabilir.

Özel örnek türü oluşturma

Yeni bir örnek türü oluşturmak için CRD örnek türü için yeni bir özel kaynak oluşturun. Örneğin:

kubectl apply -f my_instance_type.yaml

my_instance_type.yaml dosyasının içeriği şunlardır:

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"

Yukarıdaki kod etiketli davranışa sahip bir örnek türü oluşturur:

  • Podlar yalnızca etiketine mylabel: mylabelvaluesahip düğümlerde zamanlanır.
  • Podlara CPU ve 1500Mi bellek için kaynak istekleri 700m atanır.
  • Podlara CPU, 2Gi bellek ve 1 NVIDIA GPU için kaynak sınırları 1 atanır.

Özel örnek türlerinin oluşturulması aşağıdaki parametrelere ve tanım kurallarına uymalıdır, aksi taktirde başarısız olur:

Parametre Gerekli veya isteğe bağlı Açıklama
name Gerekli Kümede benzersiz olması gereken dize değerleri.
CPU request Zorunlu Sıfır veya boş olmayan dize değerleri.
CPU'ları milicore cinsinden belirtebilirsiniz; örneğin, 100m. Tam sayı olarak da belirtebilirsiniz. Örneğin "1" ile 1000m eşdeğerdir.
Memory request Zorunlu Sıfır veya boş olmayan dize değerleri.
Belleği tam sayı + sonek olarak belirtebilirsiniz; örneğin, 1024Mi 1.024 mebibayt (MiB) için.
CPU limit Zorunlu Sıfır veya boş olmayan dize değerleri.
CPU'ları milicore cinsinden belirtebilirsiniz; örneğin, 100m. Tam sayı olarak da belirtebilirsiniz. Örneğin "1" ile 1000m eşdeğerdir.
Memory limit Zorunlu Sıfır veya boş olmayan dize değerleri.
Belleği tam sayı + sonek olarak belirtebilirsiniz; örneğin, 1024Mi 1024 MiB için.
GPU İsteğe bağlı Yalnızca limits bölümünde belirtilebilen tamsayı değerleri.
Daha fazla bilgi için Kubernetes belgelerine bakın.
nodeSelector İsteğe bağlı Dize anahtarlarının ve değerlerinin haritası.

Aynı anda birden çok örnek türü oluşturmak da mümkündür:

kubectl apply -f my_instance_type_list.yaml

my_instance_type_list.yaml dosyasının içeriği şunlardır:

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"

Yukarıdaki örnek iki örnek türü oluşturur: cpusmall ve defaultinstancetype. Bu defaultinstancetype tanım, Kubernetes kümesini Azure Machine Learning çalışma alanına eklediğinizde oluşturulan tanımı geçersiz kılar defaultinstancetype .

Örnek türü olmadan bir eğitim veya çıkarım iş yükü gönderirseniz, kullanır defaultinstancetype. Kubernetes kümesi için varsayılan örnek türünü belirtmek için adlı defaultinstancetypebir örnek türü oluşturun. Varsayılan olarak otomatik olarak tanınır.

Eğitim işi göndermek için örnek türünü seçin

Azure CLI 'yi (v2) kullanarak bir eğitim işi için örnek türü seçmek için, iş YAML'sindeki resources özellikler bölümünün bir parçası olarak adını belirtin. Örneğin:

command: python -c "print('Hello world!')"
environment:
  image: library/python:latest
compute: azureml:<Kubernetes-compute_target_name>
resources:
  instance_type: <instance type name>

Yukarıdaki örnekte değerini Kubernetes işlem hedefinizin adıyla değiştirin <Kubernetes-compute_target_name> . değerini, seçmek istediğiniz örnek türünün adıyla değiştirin <instance type name> . Bir instance_type özellik belirtmezseniz, sistem işi göndermek için kullanır defaultinstancetype .

Model dağıtmak için örnek türü seçme

Azure CLI (v2) kullanarak model dağıtımı için bir örnek türü seçmek için, dağıtım YAML'sindeki özelliğin instance_type adını belirtin. Örneğin:

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

Önceki örnekte değerini, seçmek istediğiniz örnek türünün adıyla değiştirin <instance type name> . Bir instance_type özellik belirtmezseniz sistem modeli dağıtmak için kullanır defaultinstancetype .

Önemli

MLflow modeli dağıtımı için kaynak isteği için en az 2 CPU çekirdeği ve 4 GB bellek gerekir. Aksi takdirde dağıtım başarısız olur.

Kaynak bölümü doğrulama

bölümünü kullanarak resources model dağıtımlarınızın kaynak isteğini ve sınırını tanımlayabilirsiniz. Örnek:

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>

bölümünü kullanıyorsanız resources geçerli bir kaynak tanımının aşağıdaki kuralları karşılaması gerekir. Geçersiz bir kaynak tanımı, model dağıtımının başarısız olmasına neden olur.

Parametre Gerekli veya isteğe bağlı Açıklama
requests:
cpu:
Gerekli Sıfır veya boş olmayan dize değerleri.
CPU'ları milicore cinsinden belirtebilirsiniz; örneğin, 100m. Tam sayı olarak da belirtebilirsiniz. Örneğin "1" ile 1000m eşdeğerdir.
requests:
memory:
Zorunlu Sıfır veya boş olmayan dize değerleri.
Belleği tam sayı + sonek olarak belirtebilirsiniz; örneğin, 1024Mi 1024 MiB için.
Bellek 1 MB'tan az olamaz.
limits:
cpu:
Opsiyonel
(yalnızca GPU'ya ihtiyacınız olduğunda gereklidir)
Sıfır veya boş olmayan dize değerleri.
CPU'ları milicore cinsinden belirtebilirsiniz; örneğin, 100m. Tam sayı olarak da belirtebilirsiniz. Örneğin "1" ile 1000m eşdeğerdir.
limits:
memory:
Opsiyonel
(yalnızca GPU'ya ihtiyacınız olduğunda gereklidir)
Sıfır veya boş olmayan dize değerleri.
Belleği tam sayı + sonek olarak belirtebilirsiniz; örneğin, 1024Mi 1.024 MiB için.
limits:
nvidia.com/gpu:
Opsiyonel
(yalnızca GPU'ya ihtiyacınız olduğunda gereklidir)
Boş olmayan ve yalnızca limits bölümünde belirtilebilen tamsayı değerleri.
Daha fazla bilgi için Kubernetes belgelerine bakın.
Yalnızca CPU gerekiyorsa bölümün tamamını limits atlayabilirsiniz.

Örnek türü model dağıtımı için gereklidir . Bölümü tanımladıysanız resources ve örnek türüne göre doğrulanacaksa, kurallar aşağıdaki gibidir:

  • Geçerli resource bir bölüm tanımıyla, kaynak sınırları örnek türü sınırlarından küçük olmalıdır. Aksi takdirde, dağıtım başarısız olur.
  • Örnek türü tanımlamazsanız, sistem bölümüyle resources doğrulama için kullanırdefaultinstancetype.
  • Bölümü tanımlamazsanız resources , sistem dağıtımı oluşturmak için örnek türünü kullanır.

Sonraki adımlar