์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ

๊ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฆฌ์†Œ์Šค๋Š” ํŠน์ • MetadataSchema์™€ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด Vertex ML Metadata๋Š” ๊ณตํ†ต ML ๊ฐœ๋…์— ๋Œ€ํ•ด ์‚ฌ์ „ ์ •์˜๋œ ์œ ํ˜•์˜ ํ˜ธ์ถœ๋œ ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ๋Š” system ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•„๋ž˜์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. Vertex ML Metadata API์—์„œ ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ์— MetadataSchema ๋ฆฌ์†Œ์Šค๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋Š” ํ•ญ์ƒ ๋ฒ„์ „์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ์˜ ํ˜•์‹์€ OpenAPI 3.0 ์‚ฌ์–‘์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

Vertex AI๋Š” ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ML ์›Œํฌํ”Œ๋กœ ์ถ”์ ์„ ์œ„ํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ schema_title ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•„ํ„ฐ๋ง ๋ฐ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ ํ•จ์ˆ˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Vertex ML Metadata ๋ถ„์„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋˜ํ•œ Vertex ML Metadata API๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ํƒ€์ดํ‹€ ๋ฐ ์Šคํ‚ค๋งˆ ๋ฒ„์ „์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ์˜ ํ•„๋“œ๋Š” ํ•ญ์ƒ ์„ ํƒ์‚ฌํ•ญ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ์˜ ์‚ฌ์ „ ์ •์˜๋œ ํ•„๋“œ๋กœ ์ œํ•œ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ์ž„์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฆฌ์†Œ์Šค์— ๋กœ๊น…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Vertex ML Metadata ์ถ”์ ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์Šคํ‚ค๋งˆ ๋‚˜์—ด

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด์˜ ๋ชจ๋“  ๋“ฑ๋ก๋œ ์Šคํ‚ค๋งˆ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

REST

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

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

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/default/metadataSchemas?pageSize=100&filter=schema_title=%22system*%22+OR+schema_title=%22google*%22

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

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

{
  "metadataSchemas": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/metadataStores/default/metadataSchemas/system-resolver-execution-v0-0-1",
      "schemaVersion": "0.0.1",
      "schema": "title: system.ResolverExecution\ntype: object\n",
      "schemaType": "EXECUTION_TYPE",
      "createTime": "2022-07-27T17:41:35.634Z"
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID//metadataStores/default/metadataSchemas/system-html-v0-0-1",
      "schemaVersion": "0.0.1",
      "schema": "title: system.HTML\ntype: object\n",
      "schemaType": "ARTIFACT_TYPE",
      "createTime": "2022-07-27T17:41:35.602Z"
    }
}

์—„๊ฒฉํ•œ ์Šคํ‚ค๋งˆ ๋งค์นญ

Vertex ML Metadata๋Š” ์Šคํ‚ค๋งˆ ์ž‘์„ฑ์ž๊ฐ€ ์—„๊ฒฉํ•œ ์Šคํ‚ค๋งˆ ์ผ์น˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

additionalProperties

additionalProperties ๊ฐ’์€ true ๋˜๋Š” false์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JSON ์Šคํ‚ค๋งˆ์™€ ์ผ์น˜ํ•˜๋„๋ก additionalProperties์˜ ๊ธฐ๋ณธ๊ฐ’์€ true์ž…๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ์Šคํ‚ค๋งˆ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. false๋กœ ์„ค์ •ํ•˜๋ฉด ์„ ํƒ์  ์†์„ฑ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ์Šคํ‚ค๋งˆ์—์„œ๋Š” payload_format ๋ฐ container_format ํ•„๋“œ๋งŒ ์ด ์Šคํ‚ค๋งˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

title: system.Dataset
version: 0.0.1
type: object
additionalProperties: false
properties:
  container_format:
    type: string
  payload_format:
    type: string

์œ„ ์Šคํ‚ค๋งˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

fields {
  key: 'container_format'
  value: { string_value: 'Text' }
}
fields {
  key: 'payload_format'
  value: { string_value: 'CSV' }
}

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

fields {
  key: 'container_format'
  value: { string_value: 'Text' }
}
fields {
  key: 'payload_format'
  value: { string_value: 'CSV' }
}
fields {
  key: 'optional_field'
  value: { string_value: 'optional_value' }
}

required

required ํ‚ค์›Œ๋“œ๋Š” 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. JSON ์Šคํ‚ค๋งˆ์™€ ์ผ๊ด€๋˜๊ฒŒ ์†์„ฑ ํ‚ค์›Œ๋“œ๋กœ ์ •์˜๋œ ์†์„ฑ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. required ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์ˆ˜ ์†์„ฑ ๋ชฉ๋ก์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์Šคํ‚ค๋งˆ์—๋Š” ํ•ญ์ƒ container_format์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ฒฉ ์†์„ฑ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์œผ๋กœ ์ธํ•ด container_format์ด ํ•„์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

title: system.Dataset
version: 0.0.1
type: object
required: ['container_format']
properties:
  container_format:
    type: string
  payload_format:
    type: string

์œ„ ์Šคํ‚ค๋งˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

fields {
  key: 'container_format'
  value: { string_value: 'Text' }
}

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

fields {
  key: 'payload_format'
  value: { string_value: 'CSV' }
}

์Šคํ‚ค๋งˆ๋Š” ์†์„ฑ์— ๊ฐ์ฒด ์œ ํ˜• ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ์ค‘์ฒฉ ์†์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ฒฉ ์Šคํ‚ค๋งˆ์—์„œ ์ค‘์ฒฉ ์†์„ฑ ๋…ธ๋“œ๋Š” required ํ‚ค์›Œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

title: system.Dataset
version: 0.0.1
type: object
properties:
  container_format:
    type: string
  payload:
    type: string
  nested_property:
    type: object
    required: ['property_1']
    properties:
      property_1:
        type: integer
      property_2:
        type: integer

nested_property ํ•„๋“œ ์ž์ฒด๋Š” ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์œ„์˜ ์Šคํ‚ค๋งˆ๋Š” ๋‹ค์Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

fields {
  key: 'container_format'
  value: { string_value: 'Text' }
}

๋‹ค์Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋„ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

fields {
  key: 'nested_property'
  value: {
    struct_value {
      fields {
        key: 'property_1'
        value: { number_value: 1 }
      }
      fields {
        key: 'property_2'
        value: { number_value: 1 }
      }
    }
  }
}

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

fields {
  key: 'nested_property'
  value: {
    struct_value {
      fields {
        key: 'property_2'
        value: { number_value: 1 }
      }
    }
  }
}

์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ ์˜ˆ์‹œ

๋‹ค์Œ ์˜ˆ์‹œ๋Š” ์ฆ‰๊ฐ์ ์ธ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ ์Šคํ‚ค๋งˆ์ž…๋‹ˆ๋‹ค.

์•„ํ‹ฐํŒฉํŠธ

system.Artifact๋Š” ๋ชจ๋“  ์•„ํ‹ฐํŒฉํŠธ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜ ์Šคํ‚ค๋งˆ์ž…๋‹ˆ๋‹ค. ์ด ์Šคํ‚ค๋งˆ์—๋Š” ํŠน์ • ํ•„๋“œ๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

title: system.Artifact
version: 0.0.1
type: object

๋ฐ์ดํ„ฐ ์„ธํŠธ

system.Dataset๋Š” ML ์›Œํฌํ”Œ๋กœ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ ๋˜๋Š” ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” BigQuery URI์™€ ๊ฐ™์€ ํŒŒ์ผ ์œ„์น˜ ๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

title: system.Dataset
version: 0.0.1
type: object
properties:
  container_format:
    type: string
    description: "Format of the container. Examples include 'TFRecord', 'Text', or 'Parquet'."
  payload_format:
    type: string
   description: "Format of the payload. For example, 'proto:TFExample', 'CSV', or 'JSON'."

๋ชจ๋ธ

system.Model์€ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ URI๋Š” ํŒŒ์ผ ์œ„์น˜(PPP, Cloud Storage ๋ฒ„ํ‚ท, ๋กœ์ปฌ ๋“œ๋ผ์ด๋ธŒ) ๋˜๋Š” API ๋ฆฌ์†Œ์Šค(์˜ˆ: Vertex AI API์˜ ๋ชจ๋ธ ๋ฆฌ์†Œ์Šค ๋“ฑ)๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

title: system.Model
version: 0.0.1
type: object
properties:
  framework:
    type: string
    description: "The framework type. For example: 'TensorFlow' or 'Scikit-Learn'."
  framework_version:
    type: string
    description: "The framework version. For example: '1.15' or '2.1'."
  payload_format:
    type: string
    description: "The format of the Model payload, for example: 'SavedModel' or 'TFLite'."

์ธก์ •ํ•ญ๋ชฉ

system.Metrics๋Š” ML ์›Œํฌํ”Œ๋กœ ์ค‘ ์ƒ์„ฑ๋˜๋Š” ํ‰๊ฐ€ ์ธก์ •ํ•ญ๋ชฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ธก์ •ํ•ญ๋ชฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฉฐ, ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๊ณณ์— ์ €์žฅ๋˜๋Š” ์ •ํ™•๋„ ๋˜๋Š” ๋ณต์žก์„ฑ ์ธก์ •ํ•ญ๋ชฉ๊ณผ ๊ฐ™์€ ๋‹จ์ˆœ ์Šค์นผ๋ผ ์ธก์ •ํ•ญ๋ชฉ๋“ค๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

title: system.Metrics
version: 0.0.1
type: object
properties:
  type:
  accuracy:
    type: number
    description: "Optional summary metric describing accuracy of a model."
  precision:
    type: number
    description: "Optional summary metric describing precision of a model."
  recall:
    type: number
    description: "Optional summary metric describing the recall of a model."
  f1score:
    type: number
    description: "Optional summary metric describing the f1-score of a model."
  mean_absolute_error:
    type: number
    description: "Optional summary metric describing the mean absolute error of a model."
  mean_squared_error:
    type: number
    description: "Optional summary metric describing the mean-squared error of a model."

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