Dataflow ML

Dataflow ML์„ ์‚ฌ์šฉํ•˜๋ฉด Dataflow๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํ•œ ๋จธ์‹ ๋Ÿฌ๋‹(ML) ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ML ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๊ด„ ๋ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋กœ์ปฌ ๋ฐ ์›๊ฒฉ ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”. ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ํ•™์Šต์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๊ณ  ๋ชจ๋ธ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ฑฐ๋‚˜ ์›๊ฒฉ ์ถ”๋ก  ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ปค์Šคํ…€ ๋ชจ๋ธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋นŒ๋“œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ „์ฒด Dataflow ML ์˜ˆ์‹œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
MLTransform ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋จธ์‹ ๋Ÿฌ๋‹(ML) ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์ „ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํด๋ž˜์Šค์— ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ณ€ํ™˜์„ ๊ฒฐํ•ฉํ•˜๋ฉด MLTransform์—์„œ Apache Beam ML ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ณ€ํ™˜์„ ์›Œํฌํ”Œ๋กœ์— ์ ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
with pipeline as p:
  predictions = (
      p
      | beam.ReadFromSource('a_source')
      | RunInference(MODEL_HANDLER))
RunInference ์‚ฌ์šฉ์€ ํŒŒ์ดํ”„๋ผ์ธ์— ๋ณ€ํ™˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒํผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ MODEL_HANDLER๋Š” ๋ชจ๋ธ ๊ตฌ์„ฑ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
with beam.Pipeline() as p:
  transformed_data = (
    p
    | beam.Create(data)
    | MLTransform(...)
    | beam.Map(print))
ML ๋ชจ๋ธ ํ•™์Šต์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋ ค๋ฉด ํŒŒ์ดํ”„๋ผ์ธ์—์„œ MLTransform์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. MLTransform์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ณ€ํ™˜์„ ๋ž˜ํ•‘ํ•˜์—ฌ, ์—ฌ๋Ÿฌ ์ „์ฒ˜๋ฆฌ ํƒœ์Šคํฌ์— ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

์„ ํ–‰ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ์˜ˆ์ธก ๋ฐ ์ถ”๋ก 

Pytorch์—์„œ ์„ ํ–‰ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
scikit-learn์œผ๋กœ ์„ ํ–‰ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
TensorFlow์™€ ํ•จ๊ป˜ ์„ ํ–‰ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
Apache Beam์—๋Š” ์›๊ฒฉ์œผ๋กœ ๋ฐฐํฌ๋œ Vertex AI ์—”๋“œํฌ์ธํŠธ์— ์š”์ฒญ์„ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ๋…ธํŠธ๋ถ์€ Vertex AI๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์œ„ํ•ด Apache Beam RunInference ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
๋™์ผํ•œ RunInference ๋ณ€ํ™˜์—์„œ ์—ฌ๋Ÿฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ‚ค๊ฐ€ ์ง€์ •๋œ ๋ชจ๋ธ ํ•ธ๋“ค๋Ÿฌ์™€ ํ•จ๊ป˜ RunInference ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

MLTransform์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

Vertex AI ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ API์™€ ํ•จ๊ป˜ Apache Beam์˜ MLTransform ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์€ ํ…์ŠคํŠธ๋ฅผ ์ˆซ์ž ๋ฒกํ„ฐ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋งŽ์€ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ(NLP) ์ž‘์—…์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
Hugging Face Hub ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ Apache Beam MLTransform ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Hugging Face SentenceTransformers ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Python์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์žฅ, ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ ๊ณ ์œ  ์–ดํœ˜๋ฅผ ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ๊ฐ ๋‹จ์–ด ๋˜๋Š” ํ† ํฐ์„ ๊ณ ์œ ํ•œ ์ •์ˆ˜ ์ƒ‰์ธ์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋จธ์‹ ๋Ÿฌ๋‹ ์ž‘์—…์— ์‚ฌ์šฉ๋˜๋Š” ์ˆซ์ž ํ‘œํ˜„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฅผ ML ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. Apache Beam์˜ MLTransform ํด๋ž˜์Šค์—๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํ™•์žฅ ๋ณ€ํ™˜์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ—ˆ๋ธŒ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ธก ๋ฐ ์ถ”๋ก 

์ถ”๋ก  ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Gemma ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ™”์˜ ๊ฐ์ •์„ ์ธก์ •ํ•˜๊ณ , ๋Œ€ํ™”์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์š”์•ฝํ•˜๊ณ , ์–ด๋ ค์šด ๋Œ€ํ™”์— ๋Œ€ํ•œ ๋‹ต์žฅ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Hugging Face์˜ ํ•™์Šต๋œ ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ RunInference ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
TensorFlow Hub์—์„œ ํ•™์Šต๋œ ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ TensorFlow์šฉ RunInference ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑํ˜• AI ํƒœ์Šคํฌ์— RunInference ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”๋ชจ์žฅ์€ Hugging Face Model Hub์˜ ์–ธ์–ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ML ์›Œํฌํ”Œ๋กœ ์กฐ์ •

Vertex AI Pipelines๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฉ์‹์œผ๋กœ ML ์›Œํฌํ”Œ๋กœ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ML ์‹œ์Šคํ…œ์„ ์ž๋™ํ™”, ๋ชจ๋‹ˆํ„ฐ๋ง, ์ œ์–ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. Vertex AI Pipelines๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TFX ๋˜๋Š” KFP๋กœ ์ •์˜๋œ ์›Œํฌํ”Œ๋กœ DAG๋ฅผ ์กฐ์ •ํ•˜๊ณ  Vertex ML Metadata๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ML ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
TensorFlow Extended(TFX)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Apache Beam ๋ฐ Dataflow ์‹คํ–‰๊ธฐ์™€ ๊ธฐ๋ณธ ํ†ตํ•ฉ๋œ ์กฐ์ • ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํ•œ ML ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Kubeflow๋Š” Kubernetes์—์„œ ML ์›Œํฌํ”Œ๋กœ ๋ฐฐํฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด๋™ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. Kubeflow Pipelines๋Š” Kubeflow Pipelines SDK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์™„์ „ํ•œ ML ์›Œํฌํ”Œ๋กœ์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๊ธฐ๋Šฅ

Dataflow ์ž‘์—…์—์„œ GPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ๋จธ์‹ ๋Ÿฌ๋‹ ์ฒ˜๋ฆฌ ํƒœ์Šคํฌ๋ฅผ ๊ฐ€์†ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dataflow์—์„œ ์ง€์›ํ•˜๋Š” GPU ์œ ํ˜•๊ณผ ๋‹ค์–‘ํ•œ ์›Œํฌ๋กœ๋“œ์— ์‚ฌ์šฉํ•  GPU ์œ ํ˜•์— ๋Œ€ํ•œ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ํ™•์ธํ•˜์„ธ์š”.
GPU์™€ CPU๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๋ฅผ ํŠน์ • ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋กœ ํƒ€๊ฒŸํŒ…ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ถ”๊ฐ€์ ์ธ ํŒŒ์ดํ”„๋ผ์ธ ์œ ์—ฐ์„ฑ๊ณผ ๊ธฐ๋Šฅ ๋ฐ ์ž ์žฌ์ ์ธ ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
Apache Beam์€ ํŒŒ์ดํ”„๋ผ์ธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ„ดํ‚ค ๋ณด๊ฐ• ๋ณ€ํ™˜์„ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณด๊ฐ• ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ํ‰๊ฐ€

RunInference๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Apache Beam ํŒŒ์ดํ”„๋ผ์ธ์„ ์ค‘์ง€ํ•˜์ง€ ์•Š๊ณ ๋„ ์ž๋™ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋„ ๋ถ€ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
TensorFlow ๋ชจ๋ธ ๋ถ„์„(TFMA)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ๋น„๊ตํ•˜์—ฌ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ์กฐ์‚ฌํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. Apache Beam์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ชจ๋ธ์„ ํ•œ ๋ฒˆ์— ํ‰๊ฐ€ํ•˜๊ณ  ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค

Java ํŒŒ์ดํ”„๋ผ์ธ์— RunInference๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ต์ฐจ ์–ธ์–ด Python ๋ณ€ํ™˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ณ€ํ™˜์„ ํ˜ธ์ถœํ•˜์—ฌ ์ „์ฒ˜๋ฆฌ, ํ›„์ฒ˜๋ฆฌ, ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
Dataflow ML ์˜ˆ์‹œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด Google Cloud ๊ถŒํ•œ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dataflow ํŒŒ์ดํ”„๋ผ์ธ์— ํ•„์š”ํ•œ ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ƒ์„ธ ๊ฐ€์ด๋“œ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”.
GitHub์—์„œ ์˜ˆ์‹œ ๋ฐ ํ•ด๋‹น ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub์—์„œ๋Š” Colab์˜ ์˜ˆ์‹œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ๋‚ด๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰๊ณผ ์ˆซ์ž ํ‘œํ˜„(์ž„๋ฒ ๋”ฉ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ RAG ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Dataflow ML์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„๋ฒ ๋”ฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  AlloyDB์™€ ๊ฐ™์€ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.