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 ditentukan nodeSelector ekstensi.
  • Jika Anda menggunakan jenis instans dengan nodeSelector, beban kerja akan berjalan pada simpul apa pun yang cocok dengan bidang yang ditentukan nodeSelector ekstensi dan bidang yang ditentukan nodeSelector jenis instans.
  • Jika Anda menggunakan jenis instans tanpa nodeSelector bidang, beban kerja akan berjalan pada simpul apa pun yang cocok dengan bidang yang ditentukan nodeSelector 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 sebagai InstanceType sumber daya kustom di kluster saat Anda menjalankan perintah kubectl 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 dan 1500Mi untuk memori.
  • Pod diberi batas 1 sumber daya untuk CPU, 2Gi untuk memori, dan 1 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 instansdefaultinstancetype, sistem akan menggunakan untuk validasi dengan bagian .resources
  • Jika Anda tidak menentukan bagian , resources sistem menggunakan jenis instans untuk membuat penyebaran.

Langkah berikutnya