Membuat dan mengelola jenis instans untuk pemanfaatan sumber daya komputasi yang efisien
Jenis instans adalah konsep Azure Machine Learning yang memungkinkan penargetan jenis node komputasi tertentu untuk beban kerja pelatihan dan inferensi. Misalnya, di komputer virtual Azure, jenis instansnya adalah STANDARD_D2_V3
. Artikel ini mengajarkan cara membuat dan mengelola jenis instans untuk persyaratan komputasi Anda.
Di kluster Kubernetes, jenis instans diwakili dalam definisi sumber daya kustom (CRD) yang diinstal dengan ekstensi Azure Pembelajaran Mesin. Dua elemen dalam ekstensi Azure Pembelajaran Mesin mewakili jenis instans:
- Gunakan nodeSelector untuk menentukan simpul mana yang harus dijalankan pod. Node harus memiliki label yang sesuai.
- Di bagian sumber daya , Anda dapat mengatur sumber daya komputasi (CPU, memori, dan GPU NVIDIA) untuk pod.
Jika Anda menentukan bidang nodeSelector saat menyebarkan ekstensi Azure Pembelajaran Mesin, nodeSelector
bidang akan diterapkan ke semua jenis instans. Ini berarti bahwa:
- Untuk setiap jenis instans yang Anda buat, bidang yang ditentukan
nodeSelector
harus merupakan subset dari bidang yang ditentukannodeSelector
ekstensi. - Jika Anda menggunakan jenis instans dengan
nodeSelector
, beban kerja akan berjalan pada simpul apa pun yang cocok dengan bidang yang ditentukannodeSelector
ekstensi dan bidang yang ditentukannodeSelector
jenis instans. - Jika Anda menggunakan jenis instans tanpa
nodeSelector
bidang, beban kerja akan berjalan pada simpul apa pun yang cocok dengan bidang yang ditentukannodeSelector
ekstensi.
Membuat jenis instans default
Secara default, jenis instans yang disebut defaultinstancetype
dibuat saat Anda melampirkan kluster Kubernetes ke ruang kerja Azure Pembelajaran Mesin. Berikut definisinya:
resources:
requests:
cpu: "100m"
memory: "2Gi"
limits:
cpu: "2"
memory: "2Gi"
nvidia.com/gpu: null
Jika Anda tidak menerapkan nodeSelector
bidang, pod dapat dijadwalkan pada simpul apa pun. Pod beban kerja diberi sumber daya default dengan 0,1 core CPU, memori 2 GB, dan 0 GPU untuk permintaan tersebut. Sumber daya yang digunakan pod beban kerja dibatasi hingga 2 inti CPU dan memori 8 GB.
Jenis instans default dengan sengaja menggunakan beberapa sumber daya. Untuk memastikan bahwa semua beban kerja pembelajaran mesin berjalan dengan sumber daya yang sesuai (misalnya, sumber daya GPU), kami sangat menyarankan Anda membuat jenis instans kustom.
Perlu diingat poin-poin berikut tentang jenis instans default:
defaultinstancetype
tidak muncul sebagaiInstanceType
sumber daya kustom di kluster saat Anda menjalankan perintahkubectl get instancetype
, tetapi muncul di semua klien (UI, Azure CLI, SDK).defaultinstancetype
dapat ditimpa dengan definisi jenis instans kustom yang memiliki nama yang sama.
Membuat jenis instans kustom
Untuk membuat jenis instans baru, buat sumber daya kustom baru untuk jenis instans CRD. Misalnya:
kubectl apply -f my_instance_type.yaml
Berikut adalah isi 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"
Kode sebelumnya membuat jenis instans dengan perilaku berlabel:
- Pod hanya dijadwalkan pada simpul yang memiliki label
mylabel: mylabelvalue
. - Pod adalah permintaan
700m
sumber daya yang ditetapkan untuk CPU dan1500Mi
untuk memori. - Pod diberi batas
1
sumber daya untuk CPU,2Gi
untuk memori, dan1
untuk GPU NVIDIA.
Pembuatan jenis instans kustom harus memenuhi parameter dan aturan definisi berikut, atau gagal:
Parameter | Diperlukan atau opsional | Deskripsi |
---|---|---|
name |
Wajib diisi | Nilai string, yang harus unik dalam kluster. |
CPU request |
Wajib | Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan CPU dalam millicore; misalnya, 100m . Anda juga dapat menentukannya sebagai angka lengkap. Misalnya, "1" sama dengan 1000m . |
Memory request |
Wajib | Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan memori sebagai angka penuh + akhiran; misalnya, 1024Mi untuk 1.024 mebibyte (MiB). |
CPU limit |
Wajib | Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan CPU dalam millicore; misalnya, 100m . Anda juga dapat menentukannya sebagai angka lengkap. Misalnya, "1" sama dengan 1000m . |
Memory limit |
Wajib | Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan memori sebagai angka penuh + akhiran; misalnya, 1024Mi untuk 1024 MiB. |
GPU |
Opsional | Nilai bilangan bulat, yang hanya dapat ditentukan di bagian .limits Untuk informasi selengkapnya, lihat dokumentasi Kubernetes. |
nodeSelector |
Opsional | Peta kunci dan nilai string. |
Dimungkinkan juga untuk membuat beberapa jenis instans secara sekaligus:
kubectl apply -f my_instance_type_list.yaml
Berikut adalah isi 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"
Contoh sebelumnya membuat dua jenis instans: cpusmall
dan defaultinstancetype
. Definisi ini defaultinstancetype
mengambil alih defaultinstancetype
definisi yang dibuat saat Anda melampirkan kluster Kubernetes ke ruang kerja Azure Pembelajaran Mesin.
Jika Anda mengirimkan beban kerja pelatihan atau inferensi tanpa jenis instans defaultinstancetype
, ia menggunakan . Untuk menentukan jenis instans default untuk kluster Kubernetes, buat jenis instans dengan nama defaultinstancetype
. Ini secara otomatis dikenali sebagai default.
Pilih jenis instans untuk mengirimkan pekerjaan pelatihan
Untuk memilih jenis instans untuk pekerjaan pelatihan dengan menggunakan Azure CLI (v2), tentukan namanya sebagai bagian resources
dari bagian properti dalam YAML pekerjaan. Misalnya:
command: python -c "print('Hello world!')"
environment:
image: library/python:latest
compute: azureml:<Kubernetes-compute_target_name>
resources:
instance_type: <instance type name>
Dalam contoh sebelumnya, ganti <Kubernetes-compute_target_name>
dengan nama target komputasi Kubernetes Anda. Ganti <instance type name>
dengan nama jenis instans yang ingin Anda pilih. Jika Anda tidak menentukan instance_type
properti, sistem akan menggunakan defaultinstancetype
untuk mengirimkan pekerjaan.
Pilih jenis instans untuk menyebarkan model
Untuk memilih jenis instans untuk penyebaran model dengan menggunakan Azure CLI (v2), tentukan namanya untuk instance_type
properti dalam YAML penyebaran. Misalnya:
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
Dalam contoh sebelumnya, ganti <instance type name>
dengan nama jenis instans yang ingin Anda pilih. Jika Anda tidak menentukan instance_type
properti, sistem akan menggunakan defaultinstancetype
untuk menyebarkan model.
Penting
Untuk penyebaran model MLflow, permintaan sumber daya memerlukan setidaknya 2 inti CPU dan memori 4 GB. Jika tidak, penyebaran akan gagal.
Validasi bagian sumber daya
Anda dapat menggunakan bagian resources
untuk menentukan permintaan sumber daya dan batas penyebaran model Anda. Misalnya:
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>
Jika Anda menggunakan bagian tersebut resources
, definisi sumber daya yang valid harus memenuhi aturan berikut. Definisi sumber daya yang tidak valid menyebabkan penyebaran model gagal.
Parameter | Diperlukan atau opsional | Deskripsi |
---|---|---|
requests: cpu: |
Wajib diisi | Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan CPU dalam millicore; misalnya, 100m . Anda juga dapat menentukannya dalam angka penuh. Misalnya, "1" sama dengan 1000m . |
requests: memory: |
Wajib | Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan memori sebagai angka penuh + akhiran; misalnya, 1024Mi untuk 1024 MiB. Memori tidak boleh kurang dari 1 MB. |
limits: cpu: |
Opsional (hanya diperlukan saat Anda memerlukan GPU) |
Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan CPU dalam millicore; misalnya, 100m . Anda juga dapat menentukannya dalam angka penuh. Misalnya, "1" sama dengan 1000m . |
limits: memory: |
Opsional (hanya diperlukan saat Anda memerlukan GPU) |
Nilai string, yang tidak boleh nol atau kosong. Anda dapat menentukan memori sebagai angka penuh + akhiran; misalnya, 1024Mi untuk 1.024 MiB. |
limits: nvidia.com/gpu: |
Opsional (hanya diperlukan saat Anda memerlukan GPU) |
Nilai bilangan bulat, yang tidak boleh kosong dan hanya dapat ditentukan di bagian .limits Untuk informasi selengkapnya, lihat dokumentasi Kubernetes. Jika Anda hanya memerlukan CPU, Anda dapat menghilangkan seluruh limits bagian. |
Jenis instans diperlukan untuk penyebaran model. Jika Anda menentukan bagian resources
, dan akan divalidasi terhadap jenis instans, aturannya adalah sebagai berikut:
- Dengan definisi bagian yang valid
resource
, batas sumber daya harus kurang dari batas jenis instans. Jika tidak, penyebaran akan gagal. - Jika Anda tidak menentukan jenis instans
defaultinstancetype
, sistem akan menggunakan untuk validasi dengan bagian .resources
- Jika Anda tidak menentukan bagian ,
resources
sistem menggunakan jenis instans untuk membuat penyebaran.