Memberi label dan memfilter resource

Halaman ini menjelaskan cara memberi label pada resource, lalu menggunakan label untuk mengatur dan memfilter resource.

Ringkasan label

Anda dapat menambahkan label ke tugas, model, dan versi model AI Platform Prediction, lalu menggunakan label tersebut untuk mengatur resource ke dalam kategori saat melihat atau memantau resource.

Misalnya, Anda dapat memberi label pada tugas menurut tim (seperti engineering atau research) dan fase pengembangan (prod atau test), lalu memfilter tugas berdasarkan tim dan fase.

Label juga tersedia di operasi, tetapi label ini berasal dari resource tempat operasi diterapkan. Anda tidak dapat menambahkan atau memperbarui label pada operasi.

Label adalah pasangan nilai kunci, dengan kunci dan nilainya adalah string kustom yang Anda berikan.

Batas dan aturan:

  • Maksimum 64 label per resource.
  • Maksimum 63 karakter per kunci atau nilai.
  • Kunci dan nilai dapat berisi huruf kecil, karakter numerik, garis bawah, dan tanda hubung.
  • Kunci harus diawali dengan huruf.
  • Karakter internasional diperbolehkan.

Contoh:

  • Label yang menunjukkan tim atau pusat biaya: team:engineering dan team:research.
  • Label yang menunjukkan fase pengembangan: phase:prod dan phase:test.
  • Label yang menunjukkan pemilik atau kontak: owner:alice dan owner:bob.

Menambahkan label saat membuat resource

Saat membuat resource, Anda dapat menggunakan perintah gcloud atau AI Platform Training and Prediction API di aplikasi Python untuk menambahkan label ke tugas, model, dan versi model. Pilih tab di bawah untuk melihat contoh setiap metode penambahan label:

console

Anda harus membuat resource sebelum menambahkan label. Lihat cara menambahkan dan memperbarui label.

gcloud

Saat membuat resource baru, tentukan kolom labels untuk melampirkan label ke resource baru.

Untuk contoh di bawah, asumsikan Anda ingin menggunakan label ini: team:engineering,phase:test, dan owner:alice.

Untuk memudahkan, siapkan variabel lingkungan yang berisi label:

RESOURCE_LABELS="team=engineering,phase=test,owner=alice"

Kode berikut membuat model dengan label yang ditentukan:

REGION="us-central1"
MODEL_NAME="your_model_name"

gcloud ai-platform models create $MODEL_NAME \
        --labels $RESOURCE_LABELS \
        --regions $REGION

Kode berikut mengirimkan tugas pelatihan dengan label yang ditentukan:

JOB_NAME="your_job_name"
TRAINER_PACKAGE_PATH="/path/to/your/application/sources"
MAIN_TRAINER_MODULE="trainer.task"
JOB_DIR="gs://your/job/output/path"
TRAIN_DATA="gs://your/training/data/path"
EVAL_DATA="gs://your/eval/data/path"

gcloud ai-platform jobs submit training $JOB_NAME \
        --labels $RESOURCE_LABELS \
        --scale-tier basic \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --runtime-version 2.11 \
        --region $REGION \
        -- \
        --train-files $TRAIN_DATA \
        --eval-files $EVAL_DATA \
        --train-steps 1000

Python

Siapkan kamus yang berisi kolom untuk resource yang ingin Anda buat. Sertakan label Anda sebagai entri kamus yang memetakan string ke string.

Contoh berikut menunjukkan cara membuat model dengan tiga label: team:engineering,phase:test, dan owner:alice.

requestDict = {'name': modelName,
    'description': 'A model with labels.',
    'labels': {
       'team': 'engineering',
       'phase': 'test',
       'owner': 'alice'
    }}

Kirim permintaan:

request = ml.projects().models().create(parent=projectID,
                            body=requestDict)
response = request.execute()

Contoh berikut menunjukkan cara membuat tugas dengan tiga label: team:engineering,phase:test, dan owner:alice.

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://your/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'labels': {
       'team': 'engineering',
       'phase': 'test',
       'owner': 'alice'
    },
    'jobDir': 'gs://your/training/job/directory',
    'runtimeVersion': '2.11'}

job_spec = {'jobId': your_job_name, 'trainingInput': training_inputs}

Kirim permintaan:

request = cloudml.projects().jobs().create(body=job_spec,
      parent=project_id)
response = request.execute()

Memperbarui dan menghapus label

Anda dapat memperbarui atau menghapus label pada tugas dan model, menggunakan perintah gcloud atau di aplikasi Python. Anda tidak dapat memperbarui label pada versi model yang ada.

Pilih tab di bawah untuk melihat contoh setiap metode penghapusan/pembaruan label:

console

  1. Buka halaman konsol Google Cloud untuk resource yang ingin Anda beri label:

  2. Pilih centang kotak di samping nama resource yang ingin Anda beri label.

  3. Semua pengeditan label dilakukan di panel di sebelah kanan nama resource.

    • Untuk menambahkan label, masukkan kunci (dan secara opsional, nilai) untuk label. Untuk menambahkan beberapa label, klik tombol Tambahkan label.

    • Untuk menghapus label, arahkan kursor ke sebelah kanan label, lalu klik Ikon Hapus yang ditampilkan.

  4. Setelah mengedit label, klik Simpan untuk mengonfirmasi perubahan, atau Buang perubahan untuk memulai dari awal.

gcloud

Anda dapat menggunakan perintah gcloud untuk memperbarui atau menghapus label pada resource yang sudah ada. Misalnya, untuk menyesuaikan label pada tugas, jalankan perintah gcloud ai-platform jobs update dengan flag berikut:

  • --update-labels untuk mengubah nilai label yang ada dan menambahkan label baru. Misalnya, untuk mengubah nilai label phase menjadi production dan menambahkan label status baru:

    gcloud ai-platform jobs update $JOB_NAME \
            --update-labels phase=production,status=deployed
    
  • --clear-labels untuk menghapus semua label dari tugas. Jika Anda menyertakan flag --update-labels dalam perintah yang sama, perintah clear akan diterapkan terlebih dahulu, diikuti dengan perintah update. Misalnya, untuk menghapus semua label dan menerapkan label foo dan baz baru:

    gcloud ai-platform jobs update $JOB_NAME \
            --clear-labels \
            --update-labels foo=bar,baz=qux
    
  • --remove-labels untuk menghapus label tertentu dari tugas. Jika Anda menentukan label yang tidak ada pada tugas, perintah remove akan diabaikan untuk label tersebut. Misalnya, untuk menghapus label status dan visibility:

    gcloud ai-platform jobs update $JOB_NAME \
        --remove-labels=status,visibility
    

Python

Untuk memperbarui atau menghapus label untuk resource yang ada, misalnya model:

  • Dapatkan model menggunakan permintaan GET.
  • Ubah kolom labels.
  • Perbarui model menggunakan permintaan PATCH.

Contoh berikut menunjukkan pola READ-MODIFY-WRITE untuk memperbarui label untuk model:

existingModel = ml.projects().models().get(name=fullModelName).execute()
etag = existingModel['etag']

updatedModel = {
    'labels': {
        'phase': 'prod',
        'team': 'research'
    },
    'etag': etag
}

# projects.models.patch API returns a long-running operation object
# instead of a model object. See
# https://cloud.google.com/ai-platform/prediction/docs/reference/rest/v1/projects.models/patch
updateModelRequest = ml.projects().models().patch(name=fullModelName,
      body=updatedModel, updateMask='labels,etag')
updateModelOperation = updateModelRequest.execute()

# You can choose appropriate ways to poll the operation.
delay = 1
while not updateModelOperation['done']:
  time.sleep(delay)
  delay *= 2
  updateModelOperation = ml.projects().operations().get(name=updateModelOperation['name'])
updatedModel = ml.projects().models().get(name=fullModelName).execute()

Untuk menghapus atau memperbarui label untuk tugas yang ada:

  • Dapatkan tugas menggunakan permintaan GET.
  • Ubah kolom labels.
  • Perbarui tugas menggunakan permintaan PATCH.

Contoh berikut menunjukkan pola BACA-UBAH-TULIS untuk memperbarui label tugas:

existingJob = ml.projects().jobs().get(jobId=jobId).execute()
etag = existingJob['etag']

updatedJob = {
    'labels': {
        'phase': 'prod',
        'team': 'research'
    },
    'etag': etag
}

updateJobRequest = ml.projects().jobs().patch(name=jobId,
      body=updatedJob, updateMask='labels,etag')
updatedJob = updateJobRequest.execute()

Menggunakan label untuk memfilter resource

Saat mencantumkan resource, Anda dapat memfilter daftar menurut label.

console

  1. Buka halaman konsol Google Cloud untuk resource yang ingin Anda filter:

  2. Klik dalam Kolom Filter menurut awalan, yang terletak di atas daftar tugas Anda. Pilih awalan Label.

  3. Untuk menyelesaikan filter, masukkan kunci dan nilai menggunakan sintaksis "kunci:nilai". Misalnya, "team:engineering" atau "owner:alice".

  4. Filter diterapkan ke daftar resource Anda, dan nama filter akan ditampilkan di kolom filter. Misalnya: "Labels:owner:alice" atau "Labels:team:engineering". Anda dapat menambahkan beberapa filter, jika diperlukan.

gcloud

Contoh berikut mencantumkan semua model yang diberi label dengan pasangan nilai kunci team:engineering:

gcloud ai-platform models list --filter='labels.team:engineering'

Contoh berikut mencantumkan semua tugas yang diberi label dengan pasangan nilai kunci team:engineering dan pasangan nilai kunci owner:alice:

gcloud ai-platform jobs list \
        --filter='labels.team:engineering AND labels.owner=alice'

Python

Contoh berikut menggunakan permintaan models.list untuk mengambil semua model yang diberi label dengan key-value pair team:engineering:

request = ml.projects().models().list(parent=projectID,
      filter='labels.team=engineering')
results = request.execute()

Contoh berikut menggunakan permintaan jobs.list untuk mengambil semua tugas yang diberi label dengan key-value pair team:engineering dan key-value pair owner:alice:

request = ml.projects().jobs().list(parent=projectID,
      filter='labels.team=engineering AND labels.owner=alice')
results = request.execute()

Langkah selanjutnya