ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์Šคํƒ€ํŠธ์—…๋„ MLOps๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?

์Šคํƒ€ํŠธ์—…์—์„œ๋Š” AI ์„œ๋น„์Šค๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋˜๊ณ  ์ œ๊ฑฐ๋˜๋Š” ์ผ๋“ค์ด ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ํ™˜๊ฒฝ์ด ๋น ๋ฅด๊ฒŒ ๋ฐ”๋€Œ์–ด ์ด์— ๋งž์ถฐ์„œ ๋ฐฐํฌ ํ™˜๊ฒฝ ๋˜ํ•œ ๋ฐ”๋€Œ์–ด์•ผ ํ• ๋•Œ๋„ ์žˆ๊ตฌ์š”. ๋ฌด์—‡๋ณด๋‹ค ํ•œ๋ช…์˜ ํŒ€์›์ด ๋ชจ๋ธ ์‹คํ—˜, ๊ด€๋ฆฌ, ๋ฐฐํฌ, ์„œ๋น™, ์ธํ”„๋ผ ๊ด€๋ฆฌ, ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ถ„์„์ผ์„ ๋ชจ๋‘ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(๊ทธ๋ ‡๊ฒŒ ํ’€์Šคํƒ์ด ๋œ๋‹ค..) ์ตœ๋Œ€ํ•œ ๋จธ์‹ ๋Ÿฌ๋‹ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•ด์•ผํ•˜๋Š” ์ผ๋“ค์„ ์ž๋™ํ™”, ํšจ์œจํ™”์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์Šคํƒ€ํŠธ์—…์—์„œ๋„ MLOps์— ๋Œ€ํ•ด ๊ด€์‹ฌ์ด ๋งŽ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜์—ฌ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”. ์ €ํฌ๋Š” GCP ํด๋ผ์šฐ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด ์•„๋ž˜ ๋‚ด์šฉ์€ GCP์™€ ๊ด€๋ จ๋œ ์„œ๋น„์Šค๋“ค์ด ์ฃผ๋กœ ํ™œ์šฉ๋˜๊ณ  ์žˆ์œผ๋‚˜ ํƒ€ ํด๋ผ์šฐ๋“œ์—์„œ๋„ ๋น„์Šทํ•œ ์„œ๋น„์Šค๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ๊ณ ํ•ด์„œ MLOps๋ฅผ ์ ์šฉํ•œ๋‹ค๋ฉด ๋” ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

MLOps ๊ตฌ์„ฑ๋„

 

Google Cloud Build๋ฅผ ์‚ฌ์šฉํ•œ CD

์šฐ๋ฆฌ ํšŒ์‚ฌ์—์„œ ๊ฐ€์žฅ ์ฒ˜์Œ์œผ๋กœ ๋„์ž…ํ•œ MLOps๋Š” Docker์˜€๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งฅ๋ถ์—์„œ API๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  debian ๊ธฐ๋ฐ˜์˜ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์— ๋ชจ๋ธ์„ ๋ฐฐํฌํ•˜๊ณ  ์„œ๋น™ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๋งฅ๋ถ ํ™˜๊ฒฝ๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ์ด ๋‹ฌ๋ผ์ ธ ์‹ ๊ฒฝ์จ์•ผํ•  ๊ฒƒ๋“ค์ด ๋งŽ์•„์กŒ๋‹ค. ํŒจํ‚ค์ง€ ๋ฒ„์ „์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๊ณ  ํŒจํ‚ค์ง€๊ฐ€ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ docker container ์œ„์—์„œ API๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  docker image๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ์‹ธ ๋ฐฐํฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฐฐํฌ๋ฅผ ์œ„ํ•ด์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‹ค๋ฅธ MLOps๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ cloud build์˜€๋‹ค. cloud build๋ฅผ ํ†ตํ•ด docker image์— ๋“ค์–ด๊ฐˆ ํŒจํ‚ค์ง€ ์„ค์น˜์™€ storag์— ์ €์žฅ๋œ AI ๋ชจ๋ธ๋“ค์„ copyํ•˜๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ Docker image๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์–ด ๋น ๋ฅด๊ฒŒ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. docker image์˜ ๊ฒฝ์šฐ container registry์— ์ €์žฅํ•˜๊ณ  ์žˆ์–ด ์ž๋™์œผ๋กœ image ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

BentoML์ด ๋น ๋ฅด๋‹ค๊ณ  ํ•˜๋˜๋ฐ..

๊ธฐ์กด์— Flask๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์œผ๋‚˜ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‹œ๋„๋ฅผ ํ•˜๋˜ ์ค‘ BentoML์ด Flask๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ ์„œ๋น™์— ํŠนํ™”๋˜์–ด ์žˆ๋‹ค๋Š” BentoML ์ œ์ž‘์ž์˜ ๋ง์— ์†”๊นƒํ•˜์—ฌ ์„œ๋น™ํˆด์„ BentoML๋กœ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค. Flask์— ๋น„ํ•ด BentoML์€ ์„œ๋ฒ„ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์—†๋Š” ์Šคํƒ€ํŠธ์—…์—๊ฒŒ ์ ํ•ฉํ–ˆ๊ณ  ๋„์ž…ํ•˜๊ธฐ๊นŒ์ง€ ๋ฆฌ์„œ์น˜ ๊ธฐ๊ฐ„์€ ๊ฝค ๊ฑธ๋ ธ์ง€๋งŒ ์†์‰ฝ๊ฒŒ API๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค..

์ƒˆ๋กœ์šด API๋“ค์ด ์„œ๋น™๋˜๊ธฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜์–ด ๋น„๋™๊ธฐ์ ์œผ๋กœ post๋ฅผ ๋‚ ๋ ค์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์™”๋Š”๋ฐ ๋‘๊ฐœ์˜ API์— ๋™์‹œ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ pending๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.. ๊ทธ ์ด์œ ๋Š” BentoML์ด WSGI ๋ฐฉ์‹์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ASGI ๊ธฐ๋ฐ˜์˜ FastAPI๋ฅผ wrappingํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ FastAPI๋ฅผ ์ถ”๊ฐ€๋กœ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

WSGI์™€ ASGI

  • WSGI
    • python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์™€ ํ†ต์‹œํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
    • ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‘๋‹ต์ด ์ฆ‰์‹œ ๋ฐ˜ํ™˜๋จ.
      • ์›น์†Œ์ผ“ ๋˜๋Š” ๋กฑ ํด๋ง HTTP ์—ฐ๊ฒฐ๊ณผ ๊ฐ™์ด ์žฅ์‹œ๊ฐ„ ์ง€์†๋˜๋Š” ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•  ๋ฐฉ๋ฒ•์ด ์—†์Œ.
    • ๋™๊ธฐ ์ „์šฉ. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์—ฐ๊ฒฐ ํ’€์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋  ๋•Œ๊นŒ์ง€ ๊ฐ ์—ฐ๊ฒฐ์ด ์ฐจ๋‹จ๋จ.
    • ๋งŽ์€ WSGI ์„ค์ •์— ์Šค๋ ˆ๋“œ์™€ ์Šค๋ ˆ๋“œ ํ’€์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ, WSGI ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด๊ฐ€ ๋™๊ธฐ์ ์ด๋ผ๋Š” ์ ์— ์˜ํ•ด ์ œํ•œ๋จ.
  • ASGI
    • ํ•จ์ˆ˜ ์ „๋ฐ˜์—์„œ ๋น„๋™๊ธฐ ๋ฉ”ํƒ€ํฌ๋ฅผ ์‚ฌ์šฉํ•จ.
      • ํ•จ์ˆ˜ ์ž์ฒด๋Š” async์ด๋ฉฐ HTTP ํ—ค๋”์™€ ์‘๋‹ต ๋ณธ๋ฌธ์„ ๋ณ„๋„์˜ ๋‘๊ฐ€์ง€ await send() ๋ช…๋ น์œผ๋กœ ๋ณด๋ƒ„.
      • ๋”ฐ๋ผ์„œ, ํ•จ์ˆ˜ ์ž์ฒด์™€ ์ด ํ•จ์ˆ˜์˜ send ๋ช…๋ น์€ ์•„๋ฌด๊ฒƒ๋„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Œ.
      • ์ฆ‰, ๋‹ค๋ฅธ ๋งŽ์€ ์—ฐ๊ฒฐ์˜ application ๋ฐ send ํ˜ธ์ถœ๊ณผ ๋™์‹œ์— ๊ต์ฐจ๊ฐ€ ๊ฐ€๋Šฅํ•จ. 

๋ช‡์‹œ ๋ช‡๋ถ„ ๋ช‡์ดˆ์— ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ผ๊ตฌ์š”..?

๋Œ€๋ถ€๋ถ„์ด ๊ทธ๋ ‡๋“ฏ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋ฐฑ์—”๋“œ๋ฅผ ๊ฑฐ์ณ AI ์„œ๋ฒ„์— ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ ์–ด๋””์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค. ์ˆœ์ฐจ์ ์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ์— ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†๊ฑฐ๋‚˜ AI ์„œ๋ฒ„์—์„œ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ์ด ํ™•์ธ๋˜๋ฉด AIํŒ€์— ์ „๋‹ฌ๋˜๊ณ  ํ•ด๋‹น ์‹œ๊ฐ„์— ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๊ณ  ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋””๋ฒ„๊น… ํ–ˆ์—ˆ๋‹ค.

datadog์„ ๋„์ž…ํ•˜๊ณ  ๋‚˜์„œ ๋น ๋ฅด๊ฒŒ ์—๋Ÿฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, trace_id๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜๋กœ ์ด์–ด์ง„ ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, AI๋กœ ์‰ฝ๊ฒŒ ์—๋Ÿฌ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•ด์กŒ๊ณ  datadog์˜ metric์„ ํ†ตํ•ด ์šฐ๋ฆฌ๊ฐ€ ์„œ๋น™ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋ธ์ด ์–ด๋–ค ์˜ˆ์ธก๊ฐ’์„ ๋‚ด๊ณ  ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

MLOps ์‹œ์ž‘ํ•ด์•ผ์ง€..ํ•˜๋ฉด์„œ ๋„์ž…ํ–ˆ๋˜ ํˆด๋ณด๋‹จ ํ•„์š”์— ์˜ํ•ด ๋„์ž…ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™์•„์š”. ๋Œ€๋ถ€๋ถ„์˜ ๋จธ์‹ ๋Ÿฌ๋‹ ์—”์ง€๋‹ˆ์–ด๋ถ„๋“ค๋„ ์ด๋Ÿฐ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ํ•˜๊ณ  ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ์ €ํฌ ํšŒ์‚ฌ์—์„œ ๋„์ž…ํ•œ ํ๋ฆ„์„ ๋ณด๊ณ  ๊ฐ€์žฅ ํ•„์š”ํ•œ ๊ฒƒ ๋จผ์ € ํ•˜๋‚˜์”ฉ ํ•ด๋ณธ๋‹ค๋ฉด ์–ด๋А์ƒˆ MLOps๋ฅผ ๋„์ž…ํ•œ ํšŒ์‚ฌ๊ฐ€ ๋˜์–ด ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”! ์•„์ง ๋” ์‹ ๊ฒฝ์จ์•ผํ•  ๊ฒƒ์ด ๋งŽ์ง€๋งŒ ์ง€๋‚œํ•ด ๋ถˆํŽธํ–ˆ๋˜ ์ ๋“ค์„ ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋ฉด์„œ ๊ฝค ์ฆ๊ฑฐ์› ๋˜ ๋„์ž…๊ธฐ์˜€์Šต๋‹ˆ๋‹ค๐Ÿ˜€ ์ด ๊ธ€์„ ์ฝ์œผ์‹  ๋ถ„๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜์…จ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!๐Ÿ’›

'๐Ÿค– MLOps' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐Ÿถ AI ์„œ๋ฒ„ datadog ์„ธํŒ…ํ•˜๊ธฐ  (1) 2024.05.06
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday