리소스 라벨 지정 및 필터링

이 페이지에서는 리소스에 라벨을 지정한 후 라벨을 사용하여 리소스를 구성하고 필터링하는 방법을 설명합니다.

라벨 개요

AI Platform Prediction 작업, 모델, 모델 버전에 라벨을 추가하면 리소스를 보거나 모니터링할 때 이러한 라벨을 사용하여 리소스를 다양한 카테고리로 구성할 수 있습니다.

예를 들어 팀별로(예: engineering 또는 research) 또는 개발 단계별로(prod 또는 test) 작업에 라벨을 지정한 후 팀이나 단계를 기준으로 작업을 필터링할 수 있습니다.

작업에도 라벨을 사용할 수 있지만 이러한 라벨은 작업이 적용되는 리소스에 따라 이름이 정해집니다. 작업에는 라벨을 추가하거나 업데이트할 수 없습니다.

라벨은 키-값 쌍이며, 키와 값은 모두 사용자가 제공하는 커스텀 문자열입니다.

한도 및 규칙은 다음과 같습니다.

  • 리소스당 최대 64개의 라벨
  • 키 또는 값당 최대 63자(바이트)
  • 키와 값은 소문자, 숫자, 밑줄, 대시를 포함할 수 있습니다.
  • 키는 문자로 시작해야 합니다.
  • 국제 문자는 허용됩니다.

예시:

  • 팀 또는 비용 센터를 나타내는 라벨: team:engineeringteam:research
  • 개발 단계를 나타내는 라벨: phase:prodphase:test
  • 소유자 또는 연락처를 나타내는 라벨: owner:aliceowner:bob

리소스 생성 시 라벨 추가

리소스를 만들 때 gcloud 명령어를 사용하거나 Python 애플리케이션에서 AI Platform Training 및 Prediction API를 사용하여 작업, 모델, 모델 버전에 라벨을 추가할 수 있습니다. 아래 탭을 선택하여 라벨을 추가하는 각 방법의 예시를 확인하세요.

Console

라벨을 추가하기 전에 리소스를 만들어야 합니다. 라벨을 추가하고 업데이트하는 방법을 참조하세요.

gcloud

새 리소스를 만들 때 labels 필드를 지정하여 새 리소스에 라벨을 추가합니다.

아래 예시에서는 라벨 team:engineering, phase:test, owner:alice를 사용하려는 경우를 가정합니다.

편의를 위해 라벨이 포함된 환경 변수를 설정합니다.

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

다음 코드는 지정된 라벨을 갖는 모델을 만듭니다.

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

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

다음 코드는 지정된 라벨을 갖는 학습 작업을 제출합니다.

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

생성할 리소스에 대한 필드가 포함된 사전을 설정합니다. 문자열을 문자열에 매핑하는 사전 항목을 라벨로 포함합니다.

다음 예시는 3개의 라벨 team:engineering, phase:test, owner:alice를 사용하여 모델을 만드는 방법을 보여줍니다.

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

요청을 전송합니다.

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

다음 예시는 3개의 라벨 team:engineering, phase:test, 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}

요청을 전송합니다.

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

라벨 업데이트 및 삭제

gcloud 명령어를 사용하거나 Python 애플리케이션에서 작업모델의 라벨을 업데이트하거나 삭제할 수 있습니다. 기존 모델 버전의 라벨은 업데이트할 수 없습니다.

아래 탭을 선택하여 각 라벨 삭제/업데이트 방법의 예를 확인하세요.

Console

  1. 다음과 같이 라벨을 지정할 리소스의 Google Cloud Console 페이지를 엽니다.

  2. 라벨을 지정할 리소스의 이름 옆에 있는 체크박스를 선택합니다.

  3. 모든 라벨 편집은 리소스 이름 오른쪽의 패널에서 이루어집니다.

    • 라벨을 추가하려면 라벨의 (및 선택사항으로 )를 입력합니다. 여러 개의 라벨을 추가하려면 라벨 추가 버튼을 클릭합니다.

    • 라벨을 삭제하려면 라벨 오른쪽으로 마우스를 가져간 다음 표시되는 삭제 아이콘을 클릭합니다.

  4. 라벨을 수정한 후 변경사항을 적용하려면 저장을 클릭하고 다시 시작하려면 변경사항 삭제를 클릭합니다.

gcloud

기존 리소스의 라벨을 업데이트하거나 삭제하려면 gcloud 명령어를 사용할 수 있습니다. 예를 들어 작업에서 라벨을 조정하려면 gcloud ai-platform jobs update 명령어를 다음 플래그와 함께 실행합니다.

  • --update-labels는 기존 라벨 값을 수정하고 새 라벨을 추가합니다. 예를 들어 phase 라벨의 값을 production으로 변경하고 새로운 status 라벨을 추가합니다.

    gcloud ai-platform jobs update $JOB_NAME \
            --update-labels phase=production,status=deployed
    
  • --clear-labels는 작업에서 모든 라벨을 삭제합니다. 동일한 명령어에 --update-labels 플래그를 포함하면 clear 명령어가 먼저 적용된 후에 update 명령어가 적용됩니다. 예를 들어 모든 라벨을 삭제하고 새로운 foobaz 라벨을 적용하려면 다음을 사용하세요.

    gcloud ai-platform jobs update $JOB_NAME \
            --clear-labels \
            --update-labels foo=bar,baz=qux
    
  • --remove-labels는 작업에서 특정 라벨을 삭제합니다. 작업에 없는 라벨을 지정하면 라벨에 대한 remove 명령어가 무시됩니다. 예를 들어 statusvisibility 라벨을 삭제하려면 다음을 사용하세요.

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

Python

기존 리소스(예: 모델)의 라벨을 업데이트 또는 삭제하려면 다음 안내를 따르세요.

  • GET 요청을 사용하여 모델을 가져옵니다.
  • labels 필드를 수정합니다.
  • PATCH 요청을 사용하여 모델을 업데이트합니다.

다음 샘플에서는 모델의 라벨을 업데이트하는 READ-MODIFY-WRITE 패턴을 보여줍니다.

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()

기존 작업의 라벨을 삭제하거나 업데이트하려면 다음 안내를 따르세요.

  • GET 요청을 사용하여 작업을 가져옵니다.
  • labels 필드를 수정합니다.
  • PATCH 요청을 사용하여 작업을 업데이트합니다.

다음 샘플에서는 작업 라벨을 업데이트하는 READ-MODIFY-WRITE 패턴을 보여줍니다.

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()

라벨을 사용하여 리소스 필터링

리소스를 나열할 때 라벨을 기준으로 목록을 필터링할 수 있습니다.

Console

  1. 다음과 같이 필터링하려는 리소스의 Google Cloud Console 페이지를 엽니다.

  2. 작업 목록 위에 있는프리픽스로 필터링 필드 안을 클릭합니다. Label 프리픽스를 선택합니다.

  3. 필터링을 완료하려면 'key:value' 구문을 사용하여 키와 값을 입력합니다. 예를 들어 'team:engineering' 또는 'owner:alice'를 입력합니다.

  4. 필터가 리소스 목록에 적용되고 필터 이름이 필터 필드에 표시됩니다. 예를 들면 'Labels:owner:alice' 또는 'Labels:team:engineering'입니다. 필요한 경우 여러 필터를 추가할 수 있습니다.

gcloud

다음 예시는 키-값 쌍 team:engineering으로 라벨링된 모든 모델을 나열합니다.

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

다음 예시에서는 키-값 쌍 team:engineering 및 키-값 쌍 owner:alice로 라벨이 지정된 모든 작업을 나열합니다.

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

Python

다음 예시에서는 models.list 요청을 사용하여 키-값 쌍 team:engineering로 라벨링된 모든 모델을 검색합니다.

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

다음 예시에서는 jobs.list 요청을 사용하여 키-값 쌍 team:engineering 및 키-값 쌍 owner:alice로 라벨링된 모든 모델을 검색합니다.

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

다음 단계