Pelabelan dan pemfilteran resource

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

Ringkasan label

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

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

Label juga tersedia di operations, 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 merupakan string kustom yang Anda berikan.

Limit 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 pisah.
  • 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 ini 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 tersebut.

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 dibuat. Menyertakan 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. Memperbarui label pada versi model yang sudah ada tidak dapat dilakukan.

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

console

  1. Buka halaman Google Cloud Console untuk resource yang ingin diberi label:

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

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

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

    • Untuk menghapus label, arahkan kursor ke sebelah kanan label dan klik Delete yang ditampilkan.

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

gcloud

Anda dapat menggunakan perintah gcloud untuk memperbarui atau menghapus label pada resource yang ada. Misalnya, untuk menyesuaikan label pada job, 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 resource yang ada, misalnya model:

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

Contoh berikut menunjukkan pola BACA-MODIFIK-TULIS 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 sudah ada:

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

Contoh berikut menunjukkan pola BACA-MODIFIK-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 berdasarkan label.

console

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

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

  3. Untuk melengkapi filter, masukkan kunci dan nilai menggunakan sintaksis "key:value". Misalnya, "tim: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 perlu.

gcloud

Contoh berikut mencantumkan semua model yang diberi label 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 team:engineering pasangan nilai kunci:

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 pasangan nilai kunci team:engineering dan pasangan nilai kunci owner:alice:

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

Langkah selanjutnya