Vertex ML Metadata ์ถ”์ 

Vertex ML Metadata๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋จธ์‹ ๋Ÿฌ๋‹(ML) ์›Œํฌํ”Œ๋กœ์—์„œ ์ƒ์„ฑํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vertex ML Metadata๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Vertex ML Metadata ์†Œ๊ฐœ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ML ์›Œํฌํ”Œ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  1. ML ์›Œํฌํ”Œ๋กœ์˜ ๋‹จ๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‹คํ–‰์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ๊ธฐ์กด ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์กฐํšŒํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ด๋ฏธ ์ž‘์„ฑ๋œ ์ž…๋ ฅ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ์•„์ง ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ์‹คํ–‰ ์ž…๋ ฅ์˜ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด ์‹คํ–‰์œผ๋กœ ์ƒ์„ฑ๋œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. ์‹คํ–‰๊ณผ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ์•„ํ‹ฐํŒฉํŠธ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  5. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ปจํ…์ŠคํŠธ์— ์‹คํ–‰ ๋ฐ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๊ณผ ์•„ํ‹ฐํŒฉํŠธ์˜ ์ง‘ํ•ฉ์„ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋ธ ํ•™์Šต์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ดˆ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง‘ํ•ฉ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์‹คํ—˜ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ์‹คํ—˜์€ ์ž์ฒด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์ธก์ •ํ•ญ๋ชฉ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์‹คํ–‰์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ์‹คํ–‰์„ ๋น„๊ตํ•˜์—ฌ ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•œ ๋ชจ๋ธ์„ ๋งŒ๋“  ์‹คํ—˜์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์‹คํ–‰๊ณผ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋จผ์ € ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Vertex ML Metadata ์• ์…‹์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. REST ๋ช…๋ น์–ด ๋˜๋Š”Vertex AI SDK for Python๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Python SDK๋Š” ๋‹ค์–‘ํ•œ ์• ์…‹ ์œ ํ˜•์˜ ์ƒ์„ฑ ๋ฐ ๊ฒ€์ƒ‰์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. Python์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰์„ ๋งŒ๋“ค ๋•Œ๋Š” ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

Google Cloud ํ”„๋กœ์ ํŠธ์—์„œ Vertex ML Metadata๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋ฉด Vertex AI๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ Vertex ML Metadata ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ณ ๊ฐ ๊ด€๋ฆฌ ์•”ํ˜ธํ™” ํ‚ค(CMEK)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ ค๋ฉด Vertex ML Metadata๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๊ฑฐ๋‚˜ ๋ถ„์„ํ•˜๊ธฐ ์ „์— CMEK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CMEK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๋งŒ๋“ค๊ธฐ

์‹คํ–‰์€ ML ์›Œํฌํ”Œ๋กœ์˜ ๋‹จ๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์‹คํ–‰์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

REST

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • LOCATION_ID: ๋ฆฌ์ „
  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • METADATA_STORE: ์‹คํ–‰์ด ์ƒ์„ฑ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ID์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์ด๋ฆ„์€ default๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • EXECUTION_ID: ์‹คํ–‰ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ ID๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Vertex ML Metadata์—์„œ ์ด ์‹คํ–‰์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • DISPLAY_NAME: ์‹คํ–‰์˜ ํ‘œ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ํ•„๋“œ์—๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๊ฐ€ ์ตœ๋Œ€ 128์ž๊นŒ์ง€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • EXECUTION_STATE: (์„ ํƒ์‚ฌํ•ญ) ์‹คํ–‰์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ์—ด๊ฑฐ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด ํ•„๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Vertex ML Metadata์—์„œ๋Š” ์ƒํƒœ ๋ณ€ํ™˜์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • METADATA_SCHEMA_TITLE: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ์ œ๋ชฉ์ด `.` ํ˜•์‹์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ  2~20์ž ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๊ณ , ๋ฌธ์ž ๋ฐ ์ˆซ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๊ฐ€ 2~49์ž์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • METADATA_SCHEMA_VERSION: (์„ ํƒ์‚ฌํ•ญ) ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. schema_version์€ 1.0.0, 1.0.1๊ณผ ๊ฐ™์ด ๋งˆ์นจํ‘œ๋กœ ๊ตฌ๋ถ„๋œ 3๊ฐœ ์ˆซ์ž๋กœ ๋œ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜•์‹์€ ๋ฒ„์ „ ์ •๋ ฌ ๋ฐ ๋น„๊ต๋ฅผ ๋„์™€์ค๋‹ˆ๋‹ค.
  • METADATA: (์„ ํƒ์‚ฌํ•ญ) ์‹คํ–‰ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์‹คํ–‰์„ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.
  • DESCRIPTION: (์„ ํƒ์‚ฌํ•ญ) ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์‹คํ–‰์„ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • LABELS: (์„ ํƒ์‚ฌํ•ญ) ์‹คํ–‰์„ ๊ตฌ์„ฑํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions?executionId=EXECUTION_ID

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "displayName": "DISPLAY_NAME",
  "state": "EXECUTION_STATE",
  "schemaTitle": "METADATA_SCHEMA_TITLE",
  "schemaVersion": "METADATA_SCHEMA_VERSION",
  "metadata": {
    METADATA
  },
  "labels": {"LABEL_1":"LABEL_2"},
  "description": "DESCRIPTION"

}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions/EXECUTION_ID",
  "displayName": "Example Execution",
  "etag": "67891011",
  "labels": {
    "test_label": "test_label_value"
  },
  "createTime": "2021-05-18T00:04:49.659Z",
  "updateTime": "2021-05-18T00:04:49.659Z",
  "schemaTitle": "system.Run",
  "schemaVersion": "0.0.1",
  "metadata": {},
  "description": "Description of the example execution."
}

Python

Python

from typing import Any, Dict, List, Optional

from google.cloud import aiplatform
from google.cloud.aiplatform.metadata.schema.system import execution_schema


def create_execution_sample(
    display_name: str,
    input_artifacts: List[aiplatform.Artifact],
    output_artifacts: List[aiplatform.Artifact],
    project: str,
    location: str,
    execution_id: Optional[str] = None,
    metadata: Optional[Dict[str, Any]] = None,
    schema_version: Optional[str] = None,
    description: Optional[str] = None,
):
    aiplatform.init(project=project, location=location)

    with execution_schema.ContainerExecution(
        display_name=display_name,
        execution_id=execution_id,
        metadata=metadata,
        schema_version=schema_version,
        description=description,
    ).create() as execution:
        execution.assign_input_artifacts(input_artifacts)
        execution.assign_output_artifacts(output_artifacts)
        return execution
  • display_name: ์‹คํ–‰์˜ ํ‘œ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ํ•„๋“œ์—๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๊ฐ€ ์ตœ๋Œ€ 128์ž๊นŒ์ง€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • input_artifacts: ์ž…๋ ฅ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” aiplatform.Artifact์˜ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • output_artifacts: ์ถœ๋ ฅ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” aiplatform.Artifact์˜ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • project: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†” ์‹œ์ž‘ ํŽ˜์ด์ง€์—์„œ ์ด๋Ÿฌํ•œ ID๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • location: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ„์น˜ ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • execution_id: ์‹คํ–‰ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ ID๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Vertex ML Metadata์—์„œ ์ด ์‹คํ–‰์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • metadata: ์‹คํ–‰ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์‹คํ–‰์„ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.
  • schema_version: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
  • description: (์„ ํƒ์‚ฌํ•ญ) ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์‹คํ–‰์„ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์•„ํ‹ฐํŒฉํŠธ ์กฐํšŒ

์•„ํ‹ฐํŒฉํŠธ๋Š” ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋ฐ ๋ชจ๋ธ๊ณผ ๊ฐ™์ด ML ์›Œํฌํ”Œ๋กœ์—์„œ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ๊ธฐ์กด ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

REST

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • LOCATION_ID: ๋ฆฌ์ „
  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • METADATA_STORE: ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ID์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์ด๋ฆ„์€ default๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • PAGE_SIZE: (์„ ํƒ์‚ฌํ•ญ) ๋ฐ˜ํ™˜ํ•  ์ตœ๋Œ€ ์•„ํ‹ฐํŒฉํŠธ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์„œ๋น„์Šค์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ตœ๋Œ€ 100๊นŒ์ง€ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • PAGE_TOKEN: (์„ ํƒ์‚ฌํ•ญ) ์ด์ „ MetadataService.ListArtifacts ํ˜ธ์ถœ์˜ ํŽ˜์ด์ง€ ํ† ํฐ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์˜ ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์ด ํ† ํฐ์„ ์ง€์ •ํ•˜์„ธ์š”.
  • FILTER: ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์— ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/artifacts?pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN&filter=FILTER

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ARTIFACT_ID๋Š” ์•„ํ‹ฐํŒฉํŠธ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค.

{
  "artifacts": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/default/artifacts/ARTIFACT_ID",
      "displayName": "Example artifact",
      "uri": "gs://your_bucket_name/artifacts/dataset.csv",
      "etag": "67891011",
      "createTime": "2021-05-18T00:33:13.833Z",
      "updateTime": "2021-05-18T00:33:13.833Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the example artifact."
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "displayName": "Another example artifact",
      "uri": "gs://your_bucket_name/artifacts/dataset-2.csv",
      "etag": "67891012",
      "createTime": "2021-05-18T00:29:24.344Z",
      "updateTime": "2021-05-18T00:29:24.344Z",
      "state": "LIVE",
      "schemaTitle": "system.Dataset",
      "schemaVersion": "0.0.1",
      "metadata": {
        "payload_format": "CSV"
      },
      "description": "Description of the other example artifact."
    }
  ]
}

Python

Python

from typing import Optional

from google.cloud import aiplatform


def list_artifact_sample(
    project: str,
    location: str,
    display_name_filter: Optional[str] = "display_name=\"my_model_*\"",
    create_date_filter: Optional[str] = "create_time>\"2022-06-11\"",
    order_by: Optional[str] = None,
):
    aiplatform.init(project=project, location=location)

    combined_filters = f"{display_name_filter} AND {create_date_filter}"
    return aiplatform.Artifact.list(
        filter=combined_filters,
        order_by=order_by,
    )

  • project: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†” ์‹œ์ž‘ ํŽ˜์ด์ง€์—์„œ ์ด๋Ÿฌํ•œ ID๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • location: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ„์น˜ ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • display_name_filter: ํ‘œ์‹œ ์ด๋ฆ„์— ์ ์šฉํ•  ํ•„ํ„ฐ์ด๋ฉฐ "display_name=\"dcmmy_filter\"" ํ˜•์‹์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
  • create_date_filter: create_date ์ด๋ฆ„์— ์ ์šฉํ•  ํ•„ํ„ฐ์ด๋ฉฐ "create_time>\"2022-06-11T12:30:00-08:00\"" ํ˜•์‹์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

์•„ํ‹ฐํŒฉํŠธ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

REST

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • LOCATION_ID: ๋ฆฌ์ „
  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • METADATA_STORE: ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ID์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์ด๋ฆ„์€ default๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • ARTIFACT_ID: (์„ ํƒ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค. ์•„ํ‹ฐํŒฉํŠธ ID๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Vertex ML Metadata์—์„œ ์ด ์•„ํ‹ฐํŒฉํŠธ์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • DISPLAY_NAME: (์„ ํƒ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • URI: (์„ ํƒ ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค.
  • ARTIFACT_STATE: (์„ ํƒ ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ์—ด๊ฑฐ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด ํ•„๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Vertex ML Metadata์—์„œ๋Š” ์ƒํƒœ ๋ณ€ํ™˜์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • METADATA_SCHEMA_TITLE: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ์ œ๋ชฉ์ด `.` ํ˜•์‹์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ  2~20์ž ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๊ณ , ๋ฌธ์ž ๋ฐ ์ˆซ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๊ฐ€ 2~49์ž์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • METADATA_SCHEMA_VERSION: (์„ ํƒ์‚ฌํ•ญ) ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. schema_version์€ 1.0.0, 1.0.1๊ณผ ๊ฐ™์ด ๋งˆ์นจํ‘œ๋กœ ๊ตฌ๋ถ„๋œ 3๊ฐœ ์ˆซ์ž๋กœ ๋œ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜•์‹์€ ๋ฒ„์ „ ์ •๋ ฌ ๋ฐ ๋น„๊ต๋ฅผ ๋„์™€์ค๋‹ˆ๋‹ค.
  • METADATA: (์„ ํƒ์‚ฌํ•ญ) ๋ฐ์ดํ„ฐ ์„ธํŠธ ์œ ํ˜•๊ณผ ๊ฐ™์€ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.
  • DESCRIPTION: (์„ ํƒ์‚ฌํ•ญ) ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์‹คํ–‰์„ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • LABELS: (์„ ํƒ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/artifacts?artifactId=ARTIFACT_ID

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "displayName": "DISPLAY_NAME",
  "uri": "URI",
  "state": "ARTIFACT_STATE",
  "schemaTitle": "METADATA_SCHEMA_TITLE",
  "schemaVersion": "METADATA_SCHEMA_VERSION",
  "metadata": {
    METADATA
  },
  "labels": {"LABEL_1":"LABEL_2"},
  "description": "DESCRIPTION"
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/default/artifacts/ARTIFACT_ID",
  "displayName": "Example artifact",
  "uri": "gs://your_bucket_name/artifacts/dataset.csv",
  "etag": "67891011",
  "labels": {
    "test_label": "test_label_value"
  },
  "createTime": "2021-05-18T00:29:24.344Z",
  "updateTime": "2021-05-18T00:29:24.344Z",
  "state": "LIVE",
  "schemaTitle": "system.Dataset",
  "schemaVersion": "0.0.1",
  "metadata": {
    "payload_format": "CSV"
  },
  "description": "Description of the example artifact."
}

Python

Python

from typing import Dict, Optional

from google.cloud.aiplatform.metadata.schema.system import artifact_schema


def create_artifact_sample(
    project: str,
    location: str,
    uri: Optional[str] = None,
    artifact_id: Optional[str] = None,
    display_name: Optional[str] = None,
    schema_version: Optional[str] = None,
    description: Optional[str] = None,
    metadata: Optional[Dict] = None,
):
    system_artifact_schema = artifact_schema.Artifact(
        uri=uri,
        artifact_id=artifact_id,
        display_name=display_name,
        schema_version=schema_version,
        description=description,
        metadata=metadata,
    )
    return system_artifact_schema.create(project=project, location=location,)
  • project: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†” ์‹œ์ž‘ ํŽ˜์ด์ง€์—์„œ ์ด๋Ÿฌํ•œ ID๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • location: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ„์น˜ ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • uri: (์„ ํƒ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ ํŒŒ์ผ์˜ ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์•„ํ‹ฐํŒฉํŠธ ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๋น„์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • artifact_id: (์„ ํƒ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค. ์•„ํ‹ฐํŒฉํŠธ ID๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Vertex ML Metadata์—์„œ ์ด ์•„ํ‹ฐํŒฉํŠธ์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • display_name: (์„ ํƒ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • schema_version: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
  • description: (์„ ํƒ์‚ฌํ•ญ) ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • metadata: ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ(์˜ˆ: ์•„ํ‹ฐํŒฉํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜)์ž…๋‹ˆ๋‹ค.

์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‹คํ–‰์— ์—ฐ๊ฒฐํ•˜๋Š” ์ด๋ฒคํŠธ ๋งŒ๋“ค๊ธฐ

์ด๋ฒคํŠธ๋Š” ์‹คํ–‰๊ณผ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ์•„ํ‹ฐํŒฉํŠธ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‹คํ–‰์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

REST

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • LOCATION_ID: ๋ฆฌ์ „
  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • METADATA_STORE: ์‹คํ–‰์ด ์ƒ์„ฑ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ID์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์ด๋ฆ„์€ default๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • EXECUTION_ID: ์‹คํ–‰ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค.
  • ARTIFACT: ์•„ํ‹ฐํŒฉํŠธ์˜ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์€ projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID ํ˜•์‹์ž…๋‹ˆ๋‹ค.

  • EVENT_TYPE: (์„ ํƒ์‚ฌํ•ญ) ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์‹คํ–‰์˜ ์ž…๋ ฅ์ด๋‚˜ ์ถœ๋ ฅ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” EventType ์—ด๊ฑฐ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions/EXECUTION_ID:addExecutionEvents

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "events": [
    {
      "artifact": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID",
      "type": "EVENT_TYPE"
    }
  ]
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

์„ฑ๊ณต ์ƒํƒœ ์ฝ”๋“œ(2xx)์™€ ๋นˆ ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Python

Python

from typing import Any, Dict, List, Optional

from google.cloud import aiplatform
from google.cloud.aiplatform.metadata.schema.system import execution_schema


def create_execution_sample(
    display_name: str,
    input_artifacts: List[aiplatform.Artifact],
    output_artifacts: List[aiplatform.Artifact],
    project: str,
    location: str,
    execution_id: Optional[str] = None,
    metadata: Optional[Dict[str, Any]] = None,
    schema_version: Optional[str] = None,
    description: Optional[str] = None,
):
    aiplatform.init(project=project, location=location)

    with execution_schema.ContainerExecution(
        display_name=display_name,
        execution_id=execution_id,
        metadata=metadata,
        schema_version=schema_version,
        description=description,
    ).create() as execution:
        execution.assign_input_artifacts(input_artifacts)
        execution.assign_output_artifacts(output_artifacts)
        return execution
  • input_artifacts: ์ž…๋ ฅ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” aiplatform.Artifact์˜ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • output_artifacts: ์ถœ๋ ฅ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” aiplatform.Artifact์˜ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • project: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†” ์‹œ์ž‘ ํŽ˜์ด์ง€์—์„œ ์ด๋Ÿฌํ•œ ID๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • location: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ„์น˜ ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • execution_id: ์‹คํ–‰ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ ID๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Vertex ML Metadata์—์„œ ์ด ์‹คํ–‰์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • metadata: ์‹คํ–‰ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์‹คํ–‰์„ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.
  • schema_version: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
  • description: (์„ ํƒ์‚ฌํ•ญ) ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์‹คํ–‰์„ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ๋งŒ๋“ค๊ธฐ

์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„ํ‹ฐํŒฉํŠธ ๋ฐ ์‹คํ–‰์˜ ์ง‘ํ•ฉ์„ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ผ ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Vertex AI Experiments์—์„œ ํ•ด๋‹น ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ์•„ํ‹ฐํŒฉํŠธ ๋ฐ ์‹คํ–‰์„ ์ž๋™์œผ๋กœ ๋กœ๊น…ํ•˜๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค(์‹คํ—˜ ๋งŒ๋“ค๊ธฐ ๋˜๋Š” ์‚ญ์ œ ์ฐธ์กฐ).

REST

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • LOCATION_ID: ๋ฆฌ์ „
  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • METADATA_STORE: ์‹คํ–‰์ด ์ƒ์„ฑ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ID์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์ด๋ฆ„์€ default๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • CONTEXT_ID: (์„ ํƒ์‚ฌํ•ญ) ์ปจํ…์ŠคํŠธ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ID๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Vertex ML Metadata์—์„œ ์ด ์ปจํ…์ŠคํŠธ์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • DISPLAY_NAME: ์ปจํ…์ŠคํŠธ์˜ ํ‘œ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ํ•„๋“œ์—๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๊ฐ€ ์ตœ๋Œ€ 128์ž๊นŒ์ง€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • PARENT_CONTEXT: ์ƒ์œ„ ์ปจํ…์ŠคํŠธ์˜ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ์— ํฌํ•จ๋˜๋Š” ์ƒ์œ„ ์ปจํ…์ŠคํŠธ๋Š” 10๊ฐœ๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • METADATA_SCHEMA_TITLE: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ์ œ๋ชฉ์ด `.` ํ˜•์‹์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ์†Œ๋ฌธ์ž์™€ ์ˆซ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ  2~20์ž ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๊ณ , ๋ฌธ์ž ๋ฐ ์ˆซ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๊ฐ€ 2~49์ž์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • METADATA_SCHEMA_VERSION: (์„ ํƒ์‚ฌํ•ญ) ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. schema_version์€ 1.0.0, 1.0.1๊ณผ ๊ฐ™์ด ๋งˆ์นจํ‘œ๋กœ ๊ตฌ๋ถ„๋œ 3๊ฐœ ์ˆซ์ž๋กœ ๋œ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜•์‹์€ ๋ฒ„์ „ ์ •๋ ฌ ๋ฐ ๋น„๊ต๋ฅผ ๋„์™€์ค๋‹ˆ๋‹ค.
  • METADATA: ์ปจํ…์ŠคํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ(์˜ˆ: ์ปจํ…์ŠคํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜)์ž…๋‹ˆ๋‹ค.
  • DESCRIPTION: (์„ ํƒ์‚ฌํ•ญ) ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์‹คํ–‰์„ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • LABELS: (์„ ํƒ์‚ฌํ•ญ) ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/contexts?contextId=CONTEXT_ID

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "displayName": "DISPLAY_NAME:",
  "parentContexts": [
    "PARENT_CONTEXT_1",
    "PARENT_CONTEXT_2"
  ],
  "schemaTitle": "METADATA_SCHEMA_TITLE",
  "schemaVersion": "METADATA_SCHEMA_VERSION",
  "metadata": {
    METADATA
  },
  "labels": {"LABEL_1":"LABEL_2"},
  "description": "DESCRIPTION"

}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. CONTEXT_ID๋Š” ์ปจํ…์ŠคํŠธ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค.

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/contexts/CONTEXT_ID",
  "displayName": "Example context:",
  "etag": "67891011",
  "labels": {
    "test_label": "test_label_value"
  },
  "createTime": "2021-05-18T01:52:51.642Z",
  "updateTime": "2021-05-18T01:52:51.642Z",
  "schemaTitle": "system.Experiment",
  "schemaVersion": "0.0.1",
  "metadata": {},
  "description": "Description of the example context."
}

Python

Python

from typing import Any, Dict, Optional

from google.cloud import aiplatform
from google.cloud.aiplatform.metadata.schema.system import context_schema


def create_context_sample(
    display_name: str,
    project: str,
    location: str,
    context_id: Optional[str] = None,
    metadata: Optional[Dict[str, Any]] = None,
    schema_version: Optional[str] = None,
    description: Optional[str] = None,
):
    aiplatform.init(project=project, location=location)

    return context_schema.Experiment(
        display_name=display_name,
        context_id=context_id,
        metadata=metadata,
        schema_version=schema_version,
        description=description,
    ).create()
  • display_name: ์ปจํ…์ŠคํŠธ์˜ ํ‘œ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ํ•„๋“œ์—๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๊ฐ€ ์ตœ๋Œ€ 128์ž๊นŒ์ง€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • project: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†” ์‹œ์ž‘ ํŽ˜์ด์ง€์—์„œ ์ด๋Ÿฌํ•œ ID๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • location: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ„์น˜ ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • context_id: (์„ ํƒ์‚ฌํ•ญ) ์ปจํ…์ŠคํŠธ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค.
  • metadata: ์ปจํ…์ŠคํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ(์˜ˆ: ์ปจํ…์ŠคํŠธ ๋งค๊ฐœ๋ณ€์ˆ˜)์ž…๋‹ˆ๋‹ค.
  • schema_version: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
  • description: (์„ ํƒ์‚ฌํ•ญ) ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด๋กœ์„œ, ์‹คํ–‰์„ ๋งŒ๋“œ๋Š” ๋ชฉ์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ์— ์•„ํ‹ฐํŒฉํŠธ ๋ฐ ์‹คํ–‰ ์ถ”๊ฐ€

๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์•„ํ‹ฐํŒฉํŠธ์™€ ์‹คํ–‰์„ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

REST

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • LOCATION_ID: ๋ฆฌ์ „
  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • METADATA_STORE: ์‹คํ–‰์ด ์ƒ์„ฑ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ID์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์ด๋ฆ„์€ default๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • CONTEXT: (์„ ํƒ์‚ฌํ•ญ) ์ปจํ…์ŠคํŠธ ๋ ˆ์ฝ”๋“œ์˜ ID์ž…๋‹ˆ๋‹ค.
  • ์ด ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•  ์•„ํ‹ฐํŒฉํŠธ์˜ ARTIFACT ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์˜ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    projects/PROJECT_ID/locations/location/metadataStores/metadata-store/artifacts/artifact
  • ์ด ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•  ์‹คํ–‰์˜ EXECUTION ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์˜ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    projects/PROJECT_ID/locations/location/metadataStores/metadata-store/executions/execution

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/contexts/CONTEXT:addContextArtifactsAndExecutions

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "artifacts": [
    "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/artifacts/ARTIFACT_ID"
  ],
  "executions": [
  "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/METADATA_STORE/executions/EXECUTION_ID"
  ]
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

์„ฑ๊ณต ์ƒํƒœ ์ฝ”๋“œ(2xx)์™€ ๋นˆ ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Notebooks

๋‹ค์Œ ๋‹จ๊ณ„