์ด ํ์ด์ง์์๋ Google Cloud ์ฝ์ ๋๋ Vertex AI API๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ ๋ฐ์ดํฐ ์ธํธ์์ AutoML ๋ถ๋ฅ ๋ชจ๋ธ์ ํ์ต์ํค๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
AutoML ๋ชจ๋ธ ํ์ต
Google Cloud ์ฝ์
Google Cloud ์ฝ์์ Vertex AI ์น์ ์์ ๋ฐ์ดํฐ ์ธํธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๋ชจ๋ธ์ ํ์ต์ํค๋ ๋ฐ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ธํธ์ ์ด๋ฆ์ ํด๋ฆญํ์ฌ ์ธ๋ถ์ ๋ณด ํ์ด์ง๋ฅผ ์ฝ๋๋ค.
์ ๋ชจ๋ธ ํ์ต์ ํด๋ฆญํฉ๋๋ค.
์ ๋ชจ๋ธ์ ํ์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
ํ์ต ๋ฐ์ดํฐ ๋ถํ ๋ฐฉ๋ฒ์ ์๋์ผ๋ก ์ค์ ํ๋ ค๋ฉด ๊ณ ๊ธ ์ต์ ์ ํผ์น๊ณ ๋ฐ์ดํฐ ๋ถํ ์ต์ ์ ์ ํํฉ๋๋ค. ์์ธํ ์์๋ณด๊ธฐ
๊ณ์์ ํด๋ฆญํฉ๋๋ค.
๋ชจ๋ธ ํ์ต ๋ฐฉ๋ฒ์ ์ ํํฉ๋๋ค.
AutoML
์ ๊ด๋ฒ์ํ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํฉ๋๋ค.Seq2seq+
๋ ์คํ์ ์ ํฉํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ํคํ ์ฒ๊ฐ ๋ ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณต๊ฐ์ด ๋ ์์ผ๋ฏ๋กAutoML
๋ณด๋ค ๋น ๋ฅด๊ฒ ์๋ ดํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์คํ ๊ฒฐ๊ณผ Seq2Seq+๋ ์งง์ ์๊ฐ ์์ฐ๊ณผ 1GB ๋ฏธ๋ง์ ๋ฐ์ดํฐ ์ธํธ์์ ์ ์๋ํฉ๋๋ค.
ํ์ต ์์์ ํด๋ฆญํฉ๋๋ค.
๋ฐ์ดํฐ์ ๊ท๋ชจ ๋ฐ ๋ณต์ก์ฑ๊ณผ ํ์ต ์์ฐ(์ง์ ํ ๊ฒฝ์ฐ)์ ๋ฐ๋ผ ๋ชจ๋ธ ํ์ต์ ๋ง์ ์๊ฐ์ด ์์๋ ์ ์์ต๋๋ค. ํญ์ ๋ซ์๋ค๊ฐ ๋์ค์ ๋ค์ ๋์์๋ ๋ฉ๋๋ค. ๋ชจ๋ธ ํ์ต์ด ์๋ฃ๋๋ฉด ์ด๋ฉ์ผ์ด ์ ์ก๋ฉ๋๋ค.
ํ์ต์ด ์์๋๊ณ ๋ช ๋ถ ํ์ ๋ชจ๋ธ์ ์์ฑ ์ ๋ณด์์ ํ์ต ๋ ธ๋ ์๊ฐ ์ถ์ ์ ํ์ธํ ์ ์์ต๋๋ค. ํ์ต์ ์ทจ์ํ๋ฉด ํ์ฌ ์ ํ์ ์๊ธ์ด ๋ถ๊ณผ๋์ง ์์ต๋๋ค.
API
์๋์์ ์ธ์ด ๋๋ ํ๊ฒฝ์ ๋ํ ํญ์ ์ ํํ์ธ์.
REST
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- LOCATION: ๋ฐ์ดํฐ ์ธํธ๊ฐ ์๊ณ ๋ชจ๋ธ์ด ์ ์ฅ๋๋ ๋ฆฌ์ ์
๋๋ค. ์๋ฅผ ๋ค๋ฉด
us-central1
์ ๋๋ค. - PROJECT: ํ๋ก์ ํธ ID
- MODEL_DISPLAY_NAME: ์๋ก ํ์ต๋ ๋ชจ๋ธ์ ํ์ ์ด๋ฆ์ ๋๋ค.
- DATASET_ID: ํ์ต ๋ฐ์ดํฐ ์ธํธ์ ID์ ๋๋ค.
-
filterSplit
๊ฐ์ฒด๋ ์ ํ์ฌํญ์ด๋ฉฐ ๋ฐ์ดํฐ ๋ถํ ์ ์ ์ดํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ดํฐ ๋ถํ ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ REST๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถํ ์ ์ด๋ฅผ ์ฐธ์กฐํ์ธ์. - PROJECT_NUMBER: ํ๋ก์ ํธ์ ์๋์ผ๋ก ์์ฑ๋ ํ๋ก์ ํธ ๋ฒํธ
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "displayName": "MODE_DISPLAY_NAME", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_video_classification_1.0.0.yaml", "trainingTaskInputs": {}, "modelToUpload": {"displayName": "MODE_DISPLAY_NAME"}, "inputDataConfig": { "datasetId": "DATASET_ID", "filterSplit": { "trainingFilter": "labels.ml_use = training", "validationFilter": "labels.ml_use = -", "testFilter": "labels.ml_use = test" } } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/trainingPipelines/2307109646608891904", "displayName": "myModelName", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_video_classification_1.0.0.yaml", "modelToUpload": { "displayName": "myModelName" }, "state": "PIPELINE_STATE_PENDING", "createTime": "2020-04-18T01:22:57.479336Z", "updateTime": "2020-04-18T01:22:57.479336Z" }
Java
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ Vertex AI ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Java ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ Vertex AI Java API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Vertex AI์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Node.js
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ Vertex AI ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Node.js ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ Vertex AI Node.js API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Vertex AI์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Python์ฉ Vertex AI SDK
Python์ฉ Vertex AI SDK๋ฅผ ์ค์นํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ Python์ฉ Vertex AI SDK ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์. ์์ธํ ๋ด์ฉ์ Python์ฉ Vertex AI SDK API ์ฐธ์กฐ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
REST๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถํ ์ ์ด
ํ์ต ๋ฐ์ดํฐ๊ฐ ํ์ต, ๊ฒ์ฆ, ํ
์คํธ ์ธํธ ๊ฐ์ ๋ถํ ๋๋ ๋ฐฉ์์ ์ ์ดํ ์ ์์ต๋๋ค. Vertex AI API๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ Split
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถํ ์ ๊ฒฐ์ ํฉ๋๋ค. Split
๊ฐ์ฒด๋ InputConfig
๊ฐ์ฒด์ ์ฌ๋ฌ ๊ฐ์ฒด ์ ํ ์ค ํ๋๋ก ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ฐ ๊ฐ์ฒด๋ ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ํ๋์ ๋ฐฉ๋ฒ๋ง ์ ํํ ์ ์์ต๋๋ค.
-
FractionSplit
:- TRAINING_FRACTION: ํ์ต ์ธํธ์ ์ฌ์ฉํ ํ์ต ๋ฐ์ดํฐ์ ๋น์จ์ ๋๋ค.
- VALIDATION_FRACTION: ๊ฒ์ฆ ์ธํธ์ ์ฌ์ฉํ ํ์ต ๋ฐ์ดํฐ์ ๋น์จ์ ๋๋ค. ๋์์ ๋ฐ์ดํฐ์๋ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
- TEST_FRACTION: ํ ์คํธ ์ธํธ์ ์ฌ์ฉํ ํ์ต ๋ฐ์ดํฐ์ ๋น์จ์ ๋๋ค.
๋น์จ ์ค ํ๋๋ผ๋ ์ง์ ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ง์ ํด์ผ ํฉ๋๋ค. ๋น์จ์ ํฉ์ 1.0์ด ๋์ด์ผ ํฉ๋๋ค. ๋น์จ์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ๋ฐ์ดํฐ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์์ธํ ์์๋ณด๊ธฐ
"fractionSplit": { "trainingFraction": TRAINING_FRACTION, "validationFraction": VALIDATION_FRACTION, "testFraction": TEST_FRACTION },
-
FilterSplit
: - TRAINING_FILTER: ์ด ํํฐ์ ์ผ์นํ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ํ์ต ์ธํธ์ ์ฌ์ฉ๋ฉ๋๋ค.
- VALIDATION_FILTER: ์ด ํํฐ์ ์ผ์นํ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๊ฒ์ฆ ์ธํธ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋์์ ๋ฐ์ดํฐ๋ '-'์ฌ์ผ ํฉ๋๋ค.
- TEST_FILTER: ์ด ํํฐ์ ์ผ์นํ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ํ ์คํธ ์ธํธ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ํํฐ๋ ml_use
๋ผ๋ฒจ ๋๋ ๋ฐ์ดํฐ์ ์ ์ฉํ๋ ๋ชจ๋ ๋ผ๋ฒจ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ml-use ๋ผ๋ฒจ๊ณผ ๊ธฐํ ๋ผ๋ฒจ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋งํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์์๋ณด์ธ์.
๋ค์ ์์์์๋ ๊ฒ์ฆ ์ธํธ๊ฐ ํฌํจ๋ ml_use
๋ผ๋ฒจ๊ณผ ํจ๊ป filterSplit
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
"filterSplit": { "trainingFilter": "labels.aiplatform.googleapis.com/ml_use=training", "validationFilter": "labels.aiplatform.googleapis.com/ml_use=validation", "testFilter": "labels.aiplatform.googleapis.com/ml_use=test" }