İş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
belirtilennodeSelector
alanlanodeSelector
eşleşen herhangi bir düğümde çalışır. - Alansız
nodeSelector
bir örnek türü kullanırsanız, iş yükü uzantı tarafından belirtilennodeSelector
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:
defaultinstancetype
komutunukubectl get instancetype
çalıştırdığınızda kümede özel kaynakInstanceType
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: mylabelvalue
sahip düğümlerde zamanlanır. - Podlara CPU ve
1500Mi
bellek için kaynak istekleri700m
atanır. - Podlara CPU,
2Gi
bellek ve1
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:
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ı defaultinstancetype
bir ö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.
Ö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.