์ด ํ์ด์ง์์๋ Google Cloud ์ฝ์ ๋๋ Vertex AI API๋ฅผ ์ฌ์ฉํด์ ์ปค์คํ ํ์ต ๋ชจ๋ธ์์ ์ผ๊ด ์์ธก์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ผ๊ด ์์ธก์ ์์ฒญํ๋ ค๋ฉด ์ ๋ ฅ ์์ค์ ์ถ๋ ฅ ์์น๋ฅผ ์ง์ ํ๊ฑฐ๋, Vertex AI๊ฐ ์ผ๊ด ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ Cloud Storage ๋๋ BigQuery๋ฅผ ์ง์ ํ์ธ์.
์ ํ์ฌํญ ๋ฐ ์๊ตฌ์ฌํญ
์ผ๊ด ์์ธก์ ๊ฐ์ ธ์ฌ ๋๋ ๋ค์ ์ ํ์ฌํญ๊ณผ ์๊ตฌ์ฌํญ์ ๊ณ ๋ คํ์ธ์.
- ์ฒ๋ฆฌ ์๊ฐ์ ์ต์ํํ๋ ค๋ฉด ์
๋ ฅ ๋ฐ ์ถ๋ ฅ ์์น๊ฐ ๋์ผํ ๋ฆฌ์ ๋๋ ๋ฉํฐ ๋ฆฌ์ ์ ์์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์
๋ ฅ์ด
us-central1
์ ์๋ ๊ฒฝ์ฐ ์ถ๋ ฅ์us-central1
๋๋US
์ ์์ ์ ์์ง๋งeurope-west4
์ ์์ ์๋ ์์ต๋๋ค. ์์ธํ ์์๋ณด๋ ค๋ฉด Cloud Storage ์์น ๋ฐ BigQuery ์์น๋ฅผ ์ฐธ์กฐํ์ธ์. - ์ ๋ ฅ๊ณผ ์ถ๋ ฅ๋ ๋ชจ๋ธ๊ณผ ๋์ผํ ๋ฆฌ์ ์ด๋ ๋ฉํฐ ๋ฆฌ์ ์ ์์ด์ผ ํฉ๋๋ค.
- Model Garden ๋ชจ๋ธ์ ์ง์๋์ง ์์ต๋๋ค.
- BigQuery ML ๋ชจ๋ธ์ ์ปค์คํ
ํ์ต ๋ชจ๋ธ์ด ์๋๋๋ค. ํ์ง๋ง ์ด ํ์ด์ง์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ์กฐ๊ฑด์์ BigQuery ML ๋ชจ๋ธ์ ์ผ๊ด ์์ธก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- BigQuery ML ๋ชจ๋ธ์ Vertex AI Model Registry์ ๋ฑ๋ก๋์ด์ผ ํฉ๋๋ค.
- BigQuery ํ
์ด๋ธ์ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด Vertex AI API๋ฅผ ์ฌ์ฉํ์ฌ
InstanceConfig.instanceType
์"object"
๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
- ์ผ๊ด ์์ธก ๋ชจ๋ธ์ ๋ก๋ํ๋ฉด ์ฝ 40๋ถ ํ์ ํ์์์๋ฉ๋๋ค.
๋ค์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด ์ผ๊ด ์์ธก์ ๋ ์์ ๋ชจ๋ธ์ ์ฌ์ฉํ์ธ์.
Error: model server never became ready. Please validate that your model file or container configuration are valid.
์ ๋ ฅ ๋ฐ์ดํฐ ์๊ตฌ์ฌํญ
์ผ๊ด ์์ฒญ์ ์ ๋ ฅ์ ์์ธก์ ์ํด ๋ชจ๋ธ์ ๋ณด๋ผ ํญ๋ชฉ์ ์ง์ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ ๋ ฅ ํ์์ด ์ง์๋ฉ๋๋ค.
JSON Lines
JSON Lines ํ์ผ์ ์ฌ์ฉํ์ฌ ์์ธกํ ์ ๋ ฅ ์ธ์คํด์ค ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค. Cloud Storage ๋ฒํท์ ํ์ผ์ ์ ์ฅํฉ๋๋ค.
์์ 1
๋ค์ ์๋ ๊ฐ ์ค์ ๋ฐฐ์ด์ด ํฌํจ๋ JSON Lines ํ์ผ์ ๋ณด์ฌ์ค๋๋ค.
[1, 2, 3, 4]
[5, 6, 7, 8]
๋ค์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋๋ ํญ๋ชฉ์ ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ์ปจํ ์ด๋
{"instances": [ [1, 2, 3, 4], [5, 6, 7, 8] ]}
PyTorch ์ปจํ ์ด๋
{"instances": [ { "data": [1, 2, 3, 4] }, { "data": [5, 6, 7, 8] } ]}
์์ 2
๋ค์ ์๋ ๊ฐ ์ค์ ๊ฐ์ฒด๊ฐ ํฌํจ๋ JSON Lines ํ์ผ์ ๋ณด์ฌ์ค๋๋ค.
{ "values": [1, 2, 3, 4], "key": 1 }
{ "values": [5, 6, 7, 8], "key": 2 }
๋ค์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋๋ ํญ๋ชฉ์ ๋๋ค. ๋์ผํ ์์ฒญ ๋ณธ๋ฌธ์ด ๋ชจ๋ ์ปจํ ์ด๋๋ก ์ ์ก๋ฉ๋๋ค.
{"instances": [
{ "values": [1, 2, 3, 4], "key": 1 },
{ "values": [5, 6, 7, 8], "key": 2 }
]}
์์ 3
PyTorch์ ์ฌ์ ๋น๋๋ TorchServe์ ๊ธฐ๋ณธ ํธ๋ค๋ฌ์์ ์์ฒญํ๋ ๋๋ก ๊ฐ ์ธ์คํด์ค๋ฅผ data
ํ๋๋ก ๋ํํด์ผ ํฉ๋๋ค. Vertex AI๋ ์ธ์คํด์ค๋ฅผ ๋ํํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "data": { "values": [1, 2, 3, 4], "key": 1 } }
{ "data": { "values": [5, 6, 7, 8], "key": 2 } }
๋ค์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋๋ ํญ๋ชฉ์ ๋๋ค.
{"instances": [
{ "data": { "values": [1, 2, 3, 4], "key": 1 } },
{ "data": { "values": [5, 6, 7, 8], "key": 2 } }
]}
TFRecord
์ ๋ ฅ ์ธ์คํด์ค๋ฅผ TFRecord ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค. ์ํ๋ ๊ฒฝ์ฐ Gzip์ผ๋ก TFRecord ํ์ผ์ ์์ถํ ์ ์์ต๋๋ค. TFRecord ํ์ผ์ Cloud Storage ๋ฒํท์ ์ ์ฅํฉ๋๋ค.
Vertex AI๋ TFRecord ํ์ผ์ ๊ฐ ์ธ์คํด์ค๋ฅผ ๋ฐ์ด๋๋ฆฌ๋ก ์ฝ์ ํ b64
๋ผ๋ ๋จ์ผ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ JSON ๊ฐ์ฒด๋ก base64๋ก ์ธ์ฝ๋ฉํฉ๋๋ค.
๋ค์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋๋ ํญ๋ชฉ์ ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ์ปจํ ์ด๋
{"instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}
PyTorch ์ปจํ ์ด๋
{"instances": [ { "data": {"b64": "b64EncodedASCIIString" } }, { "data": {"b64": "b64EncodedASCIIString" } } ]}
์์ธก ์ปจํ ์ด๋๊ฐ ์ธ์คํด์ค๋ฅผ ๋์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
CSV
CSV ํ์ผ์์ ํ๋ง๋ค ์ ๋ ฅ ์ธ์คํด์ค๋ฅผ ํ ๊ฐ ์ง์ ํ์ธ์. ์ฒซ ๋ฒ์งธ ํ์ ํค๋ ํ์ด์ด์ผ ํฉ๋๋ค. ๋ชจ๋ ๋ฌธ์์ด์ ํฐ๋ฐ์ดํ(")๋ก ๋ฌถ์ด์ผ ํฉ๋๋ค. Vertex AI๋ ์ค๋ฐ๊ฟ์ด ํฌํจ๋ ์ ๊ฐ์ ํ์ฉํ์ง ์์ต๋๋ค. ๋ฐ์ดํ๊ฐ ์๋ ๊ฐ์ ๋ถ๋ ์์์ ์ซ์๋ก ์ฝํ๋๋ค.
๋ค์ ์์๋ ๋ ๊ฐ์ ์ ๋ ฅ ์ธ์คํด์ค๊ฐ ์๋ CSV ํ์ผ์ ๋ณด์ฌ์ค๋๋ค.
"input1","input2","input3"
0.1,1.2,"cat1"
4.0,5.0,"cat2"
๋ค์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋๋ ํญ๋ชฉ์ ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ์ปจํ ์ด๋
{"instances": [ [0.1,1.2,"cat1"], [4.0,5.0,"cat2"] ]}
PyTorch ์ปจํ ์ด๋
{"instances": [ { "data": [0.1,1.2,"cat1"] }, { "data": [4.0,5.0,"cat2"] } ]}
ํ์ผ ๋ชฉ๋ก
๊ฐ ํ์ด ํ์ผ์ Cloud Storage URI์ธ ํ
์คํธ ํ์ผ์ ๋ง๋ญ๋๋ค. Vertex AI๋ ๊ฐ ํ์ผ์ ์ฝํ
์ธ ๋ฅผ ๋ฐ์ด๋๋ฆฌ๋ก ์ฝ์ ํ b64
๋ผ๋ ๋จ์ผ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ JSON ๊ฐ์ฒด๋ก base64๋ก ์ธ์ฝ๋ฉํฉ๋๋ค.
Google Cloud ์ฝ์์ ์ฌ์ฉํ์ฌ ์ผ๊ด ์์ธก์ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋จผ์ Google Cloud ์ฝ์์ ์ง์ ํ์ผ ๋ชฉ๋ก์ ๋ถ์ฌ๋ฃ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ชฉ๋ก์ Cloud Storage ๋ฒํท์ ์ ์ฅํฉ๋๋ค.
๋ค์ ์์๋ ๋ ๊ฐ์ ์ ๋ ฅ ์ธ์คํด์ค๊ฐ ์๋ ํ์ผ ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋๋ค.
gs://path/to/image/image1.jpg
gs://path/to/image/image2.jpg
๋ค์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋๋ ํญ๋ชฉ์ ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ์ปจํ ์ด๋
{ "instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}
PyTorch ์ปจํ ์ด๋
{ "instances": [ { "data": { "b64": "b64EncodedASCIIString" } }, { "data": { "b64": "b64EncodedASCIIString" } } ]}
์์ธก ์ปจํ ์ด๋๊ฐ ์ธ์คํด์ค๋ฅผ ๋์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
BigQuery
BigQuery ํ
์ด๋ธ์ projectId.datasetId.tableId
๋ก ์ง์ ํฉ๋๋ค.
Vertex AI๋ ํ
์ด๋ธ์ ๊ฐ ํ์ JSON ์ธ์คํด์ค๋ก ๋ณํํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ ์ด๋ธ์ ๋ค์์ด ํฌํจ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ด 1 | ์ด 2 | ์ด 3 |
---|---|---|
1.0 | 3.0 | "Cat1" |
2.0 | 4.0 | "Cat2" |
๋ค์์ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋๋ ํญ๋ชฉ์ ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ์ปจํ ์ด๋
{"instances": [ [1.0,3.0,"cat1"], [2.0,4.0,"cat2"] ]}
PyTorch ์ปจํ ์ด๋
{"instances": [ { "data": [1.0,3.0,"cat1"] }, { "data": [2.0,4.0,"cat2"] } ]}
BigQuery ๋ฐ์ดํฐ ์ ํ์ด JSON์ผ๋ก ๋ณํ๋๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
BigQuery ์ ํ | JSON ์ ํ | ์์ ๊ฐ |
---|---|---|
๋ฌธ์์ด | ๋ฌธ์์ด | "abc" |
์ ์ | ์ ์ | 1 |
๋ถ๋ ์์์ ์ | ๋ถ๋ ์์์ ์ | 1.2 |
์ซ์ | ๋ถ๋ ์์์ ์ | 4925.000000000 |
๋ถ๋ฆฌ์ธ | ๋ถ๋ฆฌ์ธ | ์ฐธ |
TimeStamp | ๋ฌธ์์ด | "2019-01-01 23:59:59.999999+00:00" |
๋ ์ง | ๋ฌธ์์ด | "2018-12-31" |
์๊ฐ | ๋ฌธ์์ด | "23:59:59.999999" |
DateTime | ๋ฌธ์์ด | "2019-01-01T00:00:00" |
๋ นํ | ๊ฐ์ฒด | { "A": 1,"B": 2} |
๋ฐ๋ณต ์ ํ | Array[Type] | [1, 2] |
์ค์ฒฉ ๋ ์ฝ๋ | ๊ฐ์ฒด | {"A": {"a": 0}, "B": 1} |
๋ฐ์ดํฐ ํํฐ์ ๋๋๊ธฐ
์ผ๊ด ์์ธก์ ๋งต๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ์ ๊ฐ ๋ณต์ ๋ณธ์ผ๋ก ์ค๋ฉํฉ๋๋ค. ๋งต๋ฆฌ๋์ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ ๋ ฅ์ ๋ถํ ํ ์ ์์ด์ผ ํฉ๋๋ค.
Vertex AI๋ BigQuery, ํ์ผ ๋ชฉ๋ก, JSON lines ์ ๋ ฅ์ ์๋์ผ๋ก ๋ถํ ํฉ๋๋ค.
CSV ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํํฐ์ ๋๋๊ธฐ์ ์ ํฉํ์ง ์์ผ๋ฏ๋ก Vertex AI๋ ์๋์ผ๋ก ํํฐ์ ์ ๋๋์ง ์์ต๋๋ค. CSV ํ์ผ์ ํ์ ์๊ธฐ ์์ ์ ์ด์ง ์์ผ๋ฉฐ ์ ํ์ด ์ง์ ๋์ง ์๊ณ ์ค๋ฐ๊ฟ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ฒ๋ฆฌ๋์ ๋ฏผ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ CSV ์ ๋ ฅ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
TFRecord ์
๋ ฅ์ ๊ฒฝ์ฐ ์ธ์คํด์ค๋ฅผ ๋ ์์ ํ์ผ๋ก ๋ถํ ํ๊ณ ์์ผ๋ ์นด๋(์: gs://my-bucket/*.tfrecord
)๋ฅผ ์ฌ์ฉํ์ฌ ์์
์ ํ์ผ์ ์ ๋ฌํ์ฌ ๋ฐ์ดํฐ์ ํํฐ์
์ ์๋์ผ๋ก ๋๋ ์ผ ํฉ๋๋ค. ํ์ผ ์๋ ์ง์ ๋ ๋ณต์ ๋ณธ ์ ์ด์์ด์ด์ผ ํฉ๋๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ ํํฐ๋ง ๋ฐ ๋ณํ
BatchPredictionJob
์์ฒญ์์ instanceConfig
๋ฅผ ์ง์ ํ์ฌ ์ผ๊ด ์
๋ ฅ์ ํํฐ๋งํ๊ณ ๋ณํํ ์ ์์ต๋๋ค.
ํํฐ๋ง์ ์ฌ์ฉํ๋ฉด ์์ธก ์ปจํ ์ด๋์์ ์ปค์คํ ์ฌ์ ์ฒ๋ฆฌ ๋ฐ ์ฌํ ์ฒ๋ฆฌ๋ฅผ ์ํํ ํ์ ์์ด ์์ธก ์์ฒญ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์๋ ํน์ ํ๋๋ฅผ ์ ์ธํ๊ฑฐ๋ ์์ธก ์์ฒญ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์๋ ํ๋ ํ์ ์งํฉ๋ง ํฌํจํ ์ ์์ต๋๋ค. ์ด๋ ์ ๋ ฅ ๋ฐ์ดํฐ ํ์ผ์ ํค๋ ์ถ๊ฐ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ชจ๋ธ์ ํ์ํ์ง ์์ ์ด์ด ์๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
๋ณํ์ ์ฌ์ฉํ๋ฉด JSON array
๋๋ object
ํ์์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ธก ์ปจํ
์ด๋๋ก ์ ์กํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ instanceType
์ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด ์ ๋ ฅ ํ ์ด๋ธ์ ๋ค์์ด ํฌํจ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
customerId | col1 | col2 |
---|---|---|
1001 | 1 | 2 |
1002 | 5 | 6 |
๊ทธ๋ฆฌ๊ณ ๋ค์ instanceConfig
์ ์ง์ ํฉ๋๋ค.
{
"name": "batchJob1",
...
"instanceConfig": {
"excludedFields":["customerId"]
"instanceType":"object"
}
}
๊ทธ๋ฐ ๋ค์ ์์ธก ์์ฒญ์ ์ธ์คํด์ค๊ฐ JSON ๊ฐ์ฒด๋ก ์ ์ก๋๊ณ customerId
์ด์ด ์ ์ธ๋ฉ๋๋ค.
{"col1":1,"col2":2}
{"col1":5,"col2":6}
๋ค์ instanceConfig
๋ฅผ ์ง์ ํ๋ฉด ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ ์ ์ ์ ์ํ์ธ์.
{
"name": "batchJob1",
...
"instanceConfig": {
"includedFields": ["col1","col2"]
"instanceType":"object"
}
}
ํน์ฑ ํํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๋ฐ๋ชจ๋ ํน์ฑ ํํฐ๋ง์ ์ฌ์ฉํ ์ปค์คํ ๋ชจ๋ธ ์ผ๊ด ์์ธก ๋ ธํธ๋ถ์ ์ฐธ์กฐํ์ธ์.
์ผ๊ด ์์ธก ์์ฒญ
์ผ๊ด ์์ธก ์์ฒญ์ ๊ฒฝ์ฐ Google Cloud ์ฝ์ ๋๋ Vertex AI API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์ถํ ์ ๋ ฅ ํญ๋ชฉ ์์ ๋ฐ๋ผ ์ผ๊ด ์์ธก ํ์คํฌ๋ฅผ ์๋ฃํ๋ ๋ฐ ๋ค์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์ผ๊ด ์์ธก์ ์์ฒญํ๋ฉด, ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์ปค์คํ ์๋น์ค ๊ณ์ ์ผ๋ก ์์ธก ์ปจํ ์ด๋๊ฐ ์คํ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์์ค์์ ์์ธก ์ธ์คํด์ค๋ฅผ ์ฝ๊ฑฐ๋ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ฐ๋ ๋ฑ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก BigQuery ๋ฐ Cloud Storage์ ์ก์ธ์คํ ์ ์๋ Vertex AI ์๋น์ค ์์ด์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
Google Cloud ์ฝ์
Google Cloud ์ฝ์์ ์ฌ์ฉํ์ฌ ์ผ๊ด ์์ธก์ ์์ฒญํฉ๋๋ค.
- Google Cloud ์ฝ์์ Vertex AI ์น์ ์์ ์ผ๊ด ์์ธก ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ผ๊ด ์์ธก ํ์ด์ง๋ก ์ด๋
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ์ ์ผ๊ด ์์ธก ์ฐฝ์ ์ฝ๋๋ค.
์ผ๊ด ์์ธก ์ ์์์ ๋ค์ ๋จ๊ณ๋ฅผ ์๋ฃํฉ๋๋ค.
์ผ๊ด ์์ธก์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
๋ชจ๋ธ ์ด๋ฆ์์ ์ด ์ผ๊ด ์์ธก์ ์ฌ์ฉํ ๋ชจ๋ธ์ ์ด๋ฆ์ ์ ํํฉ๋๋ค.
์์ค ์ ํ์ ๋ํด ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ ์ฉ๋๋ ์์ค๋ฅผ ์ ํํฉ๋๋ค.
- ์ ๋ ฅ ํ์์ JSON Lines, CSV ๋๋ TFRecord๋ก ์ง์ ํ ๊ฒฝ์ฐ Cloud Storage์ ํ์ผ(JSON Lines, CSV, TFRecord, TFRecord Gzip)์ ์ ํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ค ๊ฒฝ๋ก ํ๋์ ์ ๋ ฅ ํ์ผ์ ์ง์ ํฉ๋๋ค.
- ํ์ผ ๋ชฉ๋ก์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Cloud Storage์ ํ์ผ(๊ธฐํ)์ ์ ํํ๊ณ ๋ค์ ํ๋์ ํ์ผ ๋ชฉ๋ก์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
- BigQuery ์ ๋ ฅ์ BigQuery ๊ฒฝ๋ก๋ฅผ ์ ํํฉ๋๋ค. BigQuery๋ฅผ ์ ๋ ฅ์ผ๋ก ์ ํํ๋ฉด BigQuery๋ฅผ ์ถ๋ ฅ ๋ฐ Google ๊ด๋ฆฌ ์ํธํ ํค๋ก ์ ํํด์ผ ํฉ๋๋ค. ๊ณ ๊ฐ ๊ด๋ฆฌ ์ํธํ ํค(CMEK)๋ BigQuery์์ ์ ๋ ฅ/์ถ๋ ฅ์ผ๋ก ์ง์๋์ง ์์ต๋๋ค.
๋์ ๊ฒฝ๋ก ํ๋์ Vertex AI์์ ์ผ๊ด ์์ธก ์ถ๋ ฅ์ ์ ์ฅํ Cloud Storage ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํ์ธ์.
์ํ๋ ๊ฒฝ์ฐ ์ผ๊ด ์์ธก ์๋ต์ ์ผ๋ถ๋ก ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด ๋ชจ๋ธ์ ํน์ฑ ๊ธฐ์ฌ ๋ถ์ ์ฌ์ฉ ์ค์ ์ ์ ํํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ์ ํด๋ฆญํ์ฌ ์ค๋ช ์ค์ ์ ๊ตฌ์ฑํฉ๋๋ค. ์ด์ ์ ๋ชจ๋ธ์ ๋ํ ์ค๋ช ์ค์ ์ ๊ตฌ์ฑํ ๊ฒฝ์ฐ ์ค๋ช ์ค์ ์์ ์ ์ ํ์ฌํญ์ด๋ฉฐ ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ํฉ๋๋ค.
์ผ๊ด ์์ธก ์์ ์ ์ปดํจํ ์ต์ ์ธ ์ปดํจํ ๋ ธ๋ ์, ๋จธ์ ์ ํ, ์ํ๋ ๊ฒฝ์ฐ ๊ฐ์๊ธฐ ์ ํ ๋ฐ ๊ฐ์๊ธฐ ์๋ฅผ ์ง์ ํฉ๋๋ค.
์ ํ์ฌํญ: ์ผ๊ด ์์ธก์ ์ํ ๋ชจ๋ธ ๋ชจ๋ํฐ๋ง ๋ถ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ผ๊ด ์์ธก ์์ ์ ํธํฅ ๊ฐ์ง ๊ตฌ์ฑ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ ์๊ฑด์ ์ฐธ์กฐํ์ธ์.
์ด ์ผ๊ด ์์ธก์ ๋ชจ๋ธ ๋ชจ๋ํฐ๋ง ์ฌ์ฉ ์ค์ ์ ํด๋ฆญํ์ฌ ์ผ๊ฑฐ๋ ๋๋๋ค.
ํ์ต ๋ฐ์ดํฐ ์์ค๋ฅผ ์ ํํฉ๋๋ค. ์ ํํ ํ์ต ๋ฐ์ดํฐ ์์ค์ ๋ฐ์ดํฐ ๊ฒฝ๋ก ๋๋ ์์น๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์ ํ์ฌํญ: ์๋ฆผ ๊ธฐ์ค ์๋์์ ์๋ฆผ์ ํธ๋ฆฌ๊ฑฐํ ์๊ณ๊ฐ์ ์ง์ ํฉ๋๋ค.
์๋ฆผ ์ด๋ฉ์ผ์ ๊ฒฝ์ฐ ๋ชจ๋ธ์ด ์๋ฆผ ๊ธฐ์ค์ ์ด๊ณผํ๋ฉด ์๋ฆผ์ ๋ฐ์ ํ๋ ์ด์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ผํ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅํฉ๋๋ค.
์ ํ์ฌํญ: ์๋ฆผ ์ฑ๋์ ๊ฒฝ์ฐ ๋ชจ๋ธ์ด ์๋ฆผ ๊ธฐ์ค์ ์ด๊ณผํ ๋ ์๋ฆผ์ ๋ฐ์ Cloud Monitoring ์ฑ๋์ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ์กด Cloud Monitoring ์ฑ๋์ ์ ํํ๊ฑฐ๋ ์๋ฆผ ์ฑ๋ ๊ด๋ฆฌ๋ฅผ ํด๋ฆญํ์ฌ ์ ํญ๋ชฉ์ ๋ง๋ค ์ ์์ต๋๋ค. Google Cloud ์ฝ์์ PagerDuty, Slack, Pub/Sub ์๋ฆผ ์ฑ๋์ ์ง์ํฉ๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
API
Vertex AI API๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ด ์์ธก ์์ฒญ์ ์ ์กํฉ๋๋ค. ์ผ๊ด ์์ธก์ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉํ ๋๊ตฌ์ ๋ฐ๋ผ ํญ์ ์ ํํฉ๋๋ค.
REST
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
LOCATION_ID: ๋ชจ๋ธ์ด ์ ์ฅ๋๊ณ ์ผ๊ด ์์ธก ์์ ์ด ์คํ๋๋ ๋ฆฌ์ ์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด
us-central1
์ ๋๋ค.PROJECT_ID: ํ๋ก์ ํธ ID
BATCH_JOB_NAME: ์ผ๊ด ์์ธก ์์ ์ ํ์ ์ด๋ฆ์ ๋๋ค.
MODEL_ID: ์์ธก์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ๋ชจ๋ธ์ ID์ ๋๋ค.
INPUT_FORMAT: ์ ๋ ฅ ๋ฐ์ดํฐ์ ํ์(
jsonl
,csv
,tf-record
,tf-record-gzip
๋๋file-list
)์ ๋๋ค.INPUT_URI: ์ ๋ ฅ ๋ฐ์ดํฐ์ Cloud Storage URI์ ๋๋ค. ์์ผ๋ ์นด๋๋ฅผ ํฌํจํ ์๋ ์์ต๋๋ค.
OUTPUT_DIRECTORY: Vertex AI์์ ์ถ๋ ฅ์ ์ ์ฅํ ๋๋ ํฐ๋ฆฌ์ Cloud Storage URI์ ๋๋ค.
MACHINE_TYPE: ์ด ์ผ๊ด ์์ธก ์์ ์ ์ฌ์ฉํ ๋จธ์ ๋ฆฌ์์ค์ ๋๋ค.
์ํ๋ ๊ฒฝ์ฐ ๊ฐ์๊ธฐ๋ฅผ ์ฌ์ฉํ๋๋ก
machineSpec
ํ๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ง๋ง ๋ค์ ์์์์๋ ์ด๋ฅผ ๋ณด์ฌ์ฃผ์ง ์์ต๋๋ค.BATCH_SIZE: ๊ฐ ์์ธก ์์ฒญ์์ ์ ์กํ ์ธ์คํด์ค ์๋ก, ๊ธฐ๋ณธ๊ฐ์ 64์ ๋๋ค. ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ฉด ์ฒ๋ฆฌ๋์ด ์ฆ๊ฐํ ์ ์์ง๋ง ์์ฒญ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค.
STARTING_REPLICA_COUNT: ์ด ์ผ๊ด ์์ธก ์์ ์ ๋ ธ๋ ์์ ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "INPUT_FORMAT", "gcsSource": { "uris": ["INPUT_URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY", }, }, "dedicatedResources" : { "machineSpec" : { "machineType": MACHINE_TYPE }, "startingReplicaCount": STARTING_REPLICA_COUNT }, "manualBatchTuningParameters": { "batch_size": BATCH_SIZE, } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
curl
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME 202005291958", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "INPUT_URI" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", }
Java
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ Vertex AI ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Java ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ Vertex AI Java API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Vertex AI์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ์ํ์์ PREDICTIONS_FORMAT์ jsonl
๋ก ๋ฐ๊ฟ๋๋ค.
๋ค๋ฅธ ์๋ฆฌํ์์๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด ์ด ์น์
์ REST & CMD LINE
ํญ์ ์ฐธ์กฐํ์ธ์.
Python์ฉ Vertex AI SDK
Python์ฉ Vertex AI SDK๋ฅผ ์ค์นํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ Python์ฉ Vertex AI SDK ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์. ์์ธํ ๋ด์ฉ์ Python์ฉ Vertex AI SDK API ์ฐธ์กฐ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery
์์ REST ์์์๋ ์์ค์ ๋์์ Cloud Storage๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋์ BigQuery๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์ธ์.
inputConfig
ํ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํฉ๋๋ค."inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "bq://SOURCE_PROJECT_ID.SOURCE_DATASET_NAME.SOURCE_TABLE_NAME" } }
outputConfig
ํ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํฉ๋๋ค."outputConfig": { "predictionsFormat":"bigquery", "bigqueryDestination":{ "outputUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_DATASET_NAME.DESTINATION_TABLE_NAME" } }
๋ค์์ ๋ฐ๊ฟ๋๋ค.
SOURCE_PROJECT_ID
: ์์ค Google Cloud ํ๋ก์ ํธ์ IDSOURCE_DATASET_NAME
: ์์ค BigQuery ๋ฐ์ดํฐ ์ธํธ์ ์ด๋ฆSOURCE_TABLE_NAME
: BigQuery ์์ค ํ ์ด๋ธ ์ด๋ฆDESTINATION_PROJECT_ID
: ๋์ Google Cloud ํ๋ก์ ํธ์ IDDESTINATION_DATASET_NAME
: BigQuery ๋์ ๋ฐ์ดํฐ ์ธํธ์ ์ด๋ฆDESTINATION_TABLE_NAME
: BigQuery ๋์ ํ ์ด๋ธ ์ด๋ฆ
ํน์ฑ ์ค์๋
์์ธก์ ํน์ฑ ์ค์๋ ๊ฐ์ ๋ฐํํ๋ ค๋ฉด generateExplanation
์์ฑ์ true
๋ก ์ค์ ํฉ๋๋ค. ์์ธก ๋ชจ๋ธ์ ํน์ฑ ์ค์๋๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก ์ผ๊ด ์์ธก ์์ฒญ์ ํฌํจํ ์ ์์ต๋๋ค.
ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ด๋ผ๊ณ ๋ ํ๋ ํน์ฑ ์ค์๋๋ Vertex Explainable AI์ ์ผ๋ถ์ ๋๋ค.
์ค๋ช
์ ์ํด Model
์ ๊ตฌ์ฑํ๊ฑฐ๋ BatchPredictionJob
์ explanationSpec
ํ๋๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ์๋ง generateExplanation
์ true
๋ก ์ค์ ํ ์ ์์ต๋๋ค.
๋จธ์ ์ ํ ๋ฐ ๋ณต์ ๋ณธ ์ ์ ํ
๋ณต์ ๋ณธ ์๋ฅผ ๋๋ ค ์ํ์ผ๋ก ํ์ฅํ๋ฉด ๋ ํฐ ๋จธ์ ์ ํ์ ์ฌ์ฉํ ๋๋ณด๋ค ์ฒ๋ฆฌ๋์ด ๋์ฑ ์ ํ์ ์ด๊ณ ์์ธก ๊ฐ๋ฅํ๊ฒ ๊ฐ์ ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์์ ์ ๊ฐ๋ฅํ ๊ฐ์ฅ ์์ ๋จธ์ ์ ํ์ ์ง์ ํ๊ณ ๋ณต์ ๋ณธ ์๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋น์ฉ ํจ์จ์ ์ํด ์ผ๊ด ์์ธก ์์ ์ด 10๋ถ ์ด์ ์คํ๋๋๋ก ๋ณต์ ๋ณธ ์๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ ๋ณต์ ๋ณธ์ด ์์๋ ๋๋ง๋ค ์์๋๋ ์ฝ 5๋ถ์ ํฌํจํ์ฌ ๋ณต์ ๋ณธ ๋ ธ๋ ์๊ฐ๋น ์๊ธ์ด ๋ถ๊ณผ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ช ์ด๋ง ์ฒ๋ฆฌํ๊ณ ์ข ๋ฃํ๋ ๋ฐฉ์์ ๋น์ฉ ํจ์จ์ ์ด์ง ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์์ฒ ๊ฐ์ ์ธ์คํด์ค์ ๊ฒฝ์ฐ ์์ญ ๊ฐ ๋จ์์ starting_replica_count
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ธ์คํด์ค๊ฐ ์๋ฐฑ๋ง ๊ฐ๋ผ๋ฉด ์๋ฐฑ ๊ฐ ๋จ์์ starting_replica_count
๊ฐ ๊ถ์ฅ๋ฉ๋๋ค. ๋ํ ๋ค์ ๊ณต์์ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ณธ ์๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค.
N / (T * (60 / Tb))
๊ฐ ํญ๋ชฉ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- N: ์์ ์ ๋ฐฐ์น ์์ ๋๋ค. ์๋ฅผ ๋ค์ด 100๋ง ๊ฐ์ ์ธ์คํด์ค/100๊ฐ์ ๋ฐฐ์น ํฌ๊ธฐ = 10,000๊ฐ์ ๋ฐฐ์น์ ๋๋ค.
- T: ์ผ๊ด ์์ธก ์์ ์ ์์ ์๊ฐ์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด 10๋ถ์ ๋๋ค.
- Tb: ๋ณต์ ๋ณธ์ด ๋จ์ผ ๋ฐฐ์น๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ(์ด)์ ๋๋ค. ์๋ฅผ ๋ค์ด 2์ฝ์ด ๋จธ์ ์ ํ์์๋ ๋ฐฐ์น๋น 1์ด์ ๋๋ค.
์ด ์์์์๋ ๋ฐฐ์น 10,000๊ฐ/(10๋ถ * (60/1์ด))๊ฐ ๋ณต์ ๋ณธ 17๊ฐ๋ก ์ฌ๋ฆผ๋ฉ๋๋ค.
์จ๋ผ์ธ ์์ธก๊ณผ ๋ฌ๋ฆฌ ์ผ๊ด ์์ธก ์์
์ ์๋ ํ์ฅ์ ์ํํ์ง ์์ต๋๋ค. ๋ชจ๋ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์์ผ๋ฏ๋ก ์์
์ด ์์๋ ๋ ์์คํ
์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ ๋ณต์ ๋ณธ์ผ๋ก ๋ถํ ํฉ๋๋ค. ์์คํ
์ starting_replica_count
ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. max_replica_count
ํ๋ผ๋ฏธํฐ๋ ๋ฌด์๋ฉ๋๋ค.
์ด ๊ถ์ฅ์ฌํญ์ ๋ชจ๋ ๋๋ต์ ์ธ ๊ฐ์ด๋๋ผ์ธ์ ๋๋ค. ๋ชจ๋ ๋ชจ๋ธ์ ๋ํด ์ต์ ์ ์ฒ๋ฆฌ๋์ ์ ๊ณตํ๋ค๋ ๋ณด์ฅ์ ์์ต๋๋ค. ์ฒ๋ฆฌ ์๊ฐ๊ณผ ๋น์ฉ์ ๋ํ ์ ํํ ์์ธก์ ์ ๊ณตํ์ง๋ ์์ต๋๋ค. ๋ํ ๊ฐ ์๋๋ฆฌ์ค์ ๋ํด ๋น์ฉ ๋๋น ์ฒ๋ฆฌ๋ ์ธก๋ฉด์์ ์ต์ ์ ์ ์ถฉ์ ์ ๋ฐ๋์ ํฌ์ฐฉํ์ง๋ ๋ชปํฉ๋๋ค. ์ ์ ํ ์์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ํ์์ ๋ฐ๋ผ ์กฐ์ ํ์ธ์. ๋ชจ๋ธ์ ์ฒ๋ฆฌ๋๊ณผ ๊ฐ์ ํน์ฑ์ ์ธก์ ํ๋ ค๋ฉด ์ด์์ ์ธ ๋จธ์ ์ ํ ์ฐพ๊ธฐ ๋ ธํธ๋ถ์ ์คํํ์ธ์.
GPU ๋๋ TPU ๊ฐ์ ๋จธ์
์ถ๊ฐ ๊ณ ๋ ค ์ฌํญ๊ณผ ๋๋ถ์ด ์ด์ ๊ฐ์ด๋๋ผ์ธ(CPU ์ ์ฉ ๋ชจ๋ธ์๋ ์ ์ฉ๋จ)์ ๋ฐ๋ฆ ๋๋ค.
- CPU์ GPU๊ฐ ๋ ํ์ํ ์ ์์ต๋๋ค(์: ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ).
- GPU ๋จธ์ ์ ํ์ ์์ํ๋ ๋ฐ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก(10๋ถ) ์ผ๊ด ์์ธก ์์ ์ ๊ฒฝ์ฐ ๋ ๊ธด ์๊ฐ(์: 10๋ถ ๋์ 20๋ถ ์ด์)์ ๋ชฉํ๋ก ํ์ฌ ์์ธก ์ํ์ ์ ์ ํ ๋น์จ์ ์๊ฐ๊ณผ ๋น์ฉ์ด ์์๋๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ผ๊ด ์์ธก ๊ฒฐ๊ณผ ๊ฒ์
์ผ๊ด ์์ธก ํ์คํฌ๊ฐ ์๋ฃ๋๋ฉด ์์ธก ์ถ๋ ฅ์ ์์ฒญ์์ ์ง์ ํ Cloud Storage ๋ฒํท ๋๋ BigQuery ์์น์ ์ ์ฅ๋ฉ๋๋ค.
์ผ๊ด ์์ธก ๊ฒฐ๊ณผ ์์
์ถ๋ ฅ ํด๋์๋ JSON Line ํ์ผ ์งํฉ์ด ์์ต๋๋ค.
ํ์ผ ์ด๋ฆ์ {gcs_path}/prediction.results-{file_number}-of-{number_of_files_generated}
์
๋๋ค.
์ผ๊ด ์์ธก์ ๋ถ์ฐ๋ ํน์ฑ์ผ๋ก ์ธํด ํ์ผ ์๋ ๋น๊ฒฐ์ ์ ์
๋๋ค.
ํ์ผ์ ๊ฐ ์ค์ ์ ๋ ฅ์ ์ธ์คํด์ค์ ํด๋นํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ํค-๊ฐ ์์ด ์์ต๋๋ค.
prediction
: ์์ธก ์ปจํ ์ด๋์์ ๋ฐํ๋ ๊ฐ์ด ํฌํจ๋ฉ๋๋ค.instance
: ํ์ผ ๋ชฉ๋ก์ ๊ฒฝ์ฐ Cloud Storage URI๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์ ๋ ฅ ํ์์ ๊ฒฝ์ฐ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์์ธก ์ปจํ ์ด๋๋ก ์ ์ก๋ ๊ฐ์ด ํฌํจ๋ฉ๋๋ค.
์์ 1
HTTP ์์ฒญ์ ๋ค์์ด ํฌํจ๋ ๊ฒฝ์ฐ ๋ค์์ ์คํํฉ๋๋ค.
{
"instances": [
[1, 2, 3, 4],
[5, 6, 7, 8]
]}
์์ธก ์ปจํ ์ด๋์์ ๋ค์์ ๋ฐํํฉ๋๋ค.
{
"predictions": [
[0.1,0.9],
[0.7,0.3]
],
}
JSON Lines ์ถ๋ ฅ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "instance": [1, 2, 3, 4], "prediction": [0.1,0.9]}
{ "instance": [5, 6, 7, 8], "prediction": [0.7,0.3]}
์์ 2
HTTP ์์ฒญ์ ๋ค์์ด ํฌํจ๋ ๊ฒฝ์ฐ ๋ค์์ ์คํํฉ๋๋ค.
{
"instances": [
{"values": [1, 2, 3, 4], "key": 1},
{"values": [5, 6, 7, 8], "key": 2}
]}
์์ธก ์ปจํ ์ด๋์์ ๋ค์์ ๋ฐํํฉ๋๋ค.
{
"predictions": [
{"result":1},
{"result":0}
],
}
JSON Lines ์ถ๋ ฅ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "instance": {"values": [1, 2, 3, 4], "key": 1}, "prediction": {"result":1}}
{ "instance": {"values": [5, 6, 7, 8], "key": 2}, "prediction": {"result":0}}
Explainable AI ์ฌ์ฉ
๋ง์ ์์ ๋ฐ์ดํฐ์๋ ํน์ฑ ๊ธฐ๋ฐ ์ค๋ช ์ ์คํํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฐ ์ ๋ ฅ์ด ๊ฐ๋ฅํ ํน์ฑ ๊ฐ ์ธํธ์ ๋ฐ๋ผ ์์ฒ ๊ฐ์ ์์ฒญ์ผ๋ก ํฌ์์๋ ์ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ์ฒ๋ฆฌ ์๊ฐ๊ณผ ๋น์ฉ์ด ํฌ๊ฒ ์ฆ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ ๋ฐ์ดํฐ ์ธํธ๋ก๋ ํน์ฑ ์ค์๋๋ฅผ ํ์ ํ ์ ์์ต๋๋ค.
์ผ๊ด ์์ธก์์๋ ์์ ๊ธฐ๋ฐ ์ค๋ช ์ ์ง์ํ์ง ์์ต๋๋ค.
Notebooks
๋ค์ ๋จ๊ณ
- ์์ธก์ฉ Compute ๋ฆฌ์์ค ์์๋ณด๊ธฐ