hye-log

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 08_DAY 35 ๋ณธ๋ฌธ

Boostcourse/AI Tech 4๊ธฐ

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 08_DAY 35

iihye_ 2022. 11. 9. 01:42

๐Ÿฐ ๊ฐœ๋ณ„ํ•™์Šต


[3] Model Serving

1. Model Serving

1) Serving์˜ ์ข…๋ฅ˜

- Batch Serving : ์ผ์ • ์ฃผ๊ธฐ(1์ผ, 1์ฃผ, 1๋‹ฌ ๋“ฑ)๋กœ ํ•œ๊บผ๋ฒˆ์— ์˜ˆ์ธก

- Online Serving : ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜ˆ์ธก, ๋ณ‘๋ชฉ์ด ์—†์–ด์•ผ ํ•จ

2) Serving

- Production ํ™˜๊ฒฝ์—์„œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ

- ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๊ณ , ํ˜„์‹ค ์„ธ๊ณ„(์•ฑ, ์›น)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ํ–‰์œ„

- ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํšŒ์‚ฌ ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ ํ™œ์šฉ  ์˜ˆ) ์ถ”์ฒœ ์‹œ์Šคํ…œ์˜ ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

3) ์šฉ์–ด ์ •๋ฆฌ

- Serving : ๋ชจ๋ธ์„ ์•ฑ, ์›น ์„œ๋น„์Šค์— ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •. ๋ชจ๋ธ์„ ์„œ๋น„์Šคํ™”ํ•˜๋Š” ๊ด€์ 

- Inference : ๋ชจ๋ธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ณต๋˜์–ด ์˜ˆ์ธกํ•˜๋Š” ๊ฒฝ์šฐ. ์‚ฌ์šฉํ•˜๋Š” ๊ด€์ 

- Serving, Inference ์šฉ์–ด๊ฐ€ ํ˜ผ์žฌ๋˜์–ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌ

 

2. Online Serving

1) ์›น ์„œ๋ฒ„(Web Server)

- HTTP๋ฅผ ํ†ตํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญํ•˜๋Š” HTML ๋ฌธ์„œ๋‚˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ „์†กํ•ด์ฃผ๋Š” ์„œ๋น„์Šค ํ”„๋กœ๊ทธ๋žจ

- ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด(Request) ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š”(Response) ํ˜•ํƒœ

- Client์˜ ๋‹ค์–‘ํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์—ญํ• (๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ, ๋ชจ๋ธ ๊ธฐ๋ฐ˜ ์˜ˆ์ธก ๋“ฑ)

2) API(Application Programming Interface)

- ์šด์˜์ฒด์ œ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค

- ๊ธฐ๊ณ„์™€ ์ธ๊ฐ„์˜ ์†Œํ†ต ์ฐฝ๊ตฌ

- ํŠน์ • ์„œ๋น„์Šค์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์™ธ๋ถ€์— ๋…ธ์ถœ : ๊ธฐ์ƒ์ฒญ API, ์ง€๋„ API

- ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜ : Pandas, Tensorflow, PyTorch

3) Online Serving Basic

(1) ๊ตฌ์กฐ

- ์š”์ฒญ(Request)๊ฐ€ ์˜ฌ ๋•Œ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜ˆ์ธก

- Client์—์„œ Server์— HTTP ์š”์ฒญ(Request) -> Server์—์„œ ์˜ˆ์ธกํ•œ ํ›„ ์˜ˆ์ธก ๊ฐ’์„ ๋ฐ˜ํ™˜(Response)

(2) Serving Input

- Single Data Point : ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜ˆ์ธก

(3) Online Serving ๊ตฌํ˜„ ๋ฐฉ์‹

- ์ง์ ‘ API ์›น ์„œ๋ฒ„ ๊ฐœ๋ฐœ : Flask, FastAPI

- ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ํ™œ์šฉ : AWS์˜ SageMaker, GCP์˜ Vertex AI

- Serving ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ : Tensroflow Serving, Torch Serve, MLFlow, BentoML

(4) Online Serving์—์„œ ๊ณ ๋ คํ•ด์•ผํ•  ๋ถ€๋ถ„

- Python ๋ฒ„์ „, ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๋“ฑ Dependecy

- ์ง€์—ฐ ์‹œ๊ฐ„(Latency)์˜ ์ตœ์†Œํ™”

- Input ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด์„œ ๋ชจ๋ธ์„ ์˜ˆ์ธกํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

- ๋ชจ๋ธ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ(๊ฒฝ๋Ÿ‰ํ™” ํ•„์š”)

- ๊ฒฐ๊ณผ๊ฐ’์— ๋Œ€ํ•œ ๋ณด์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ(๋งˆ์ด๋„ˆ์Šค ๊ฐ’, 0 ๋“ฑ)

 

3. Batch Serving

1) Batch Serving Basic

(1) ๊ตฌ์กฐ

- ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•™์Šต์„ ํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ธกํ•˜๋Š” ๊ฒฝ์šฐ

- ํŠน์ • ์‹œ๊ฐ„์— ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰

- Airflow, Cron Job ๋“ฑ์œผ๋กœ ์Šค์ผ€์ค„๋ง ์ž‘์—…(Workflow Scheduler)

(2) ์žฅ์ 

- Jupyter Notebook์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜ํ™” ํ•œ ํ›„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ

- ๊ตฌํ˜„์ด ์ˆ˜์›”ํ•˜๋ฉฐ ๊ฐ„๋‹จํ•จ

- ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ Latency๊ฐ€ ๋ฌธ์ œ๋˜์ง€ ์•Š์Œ

(3) ๋‹จ์ 

- ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์—†์Œ

- Cold Start ๋ฌธ์ œ : ์˜ค๋Š˜ ์ƒˆ๋กœ ์ƒ๊ธด ์ปจํ…์ธ ๋Š” ์ถ”์ฒœํ•  ์ˆ˜ ์—†์Œ

2) Online Serving vs. Batch Serving

(1) Input ๊ด€์ 

- ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ -> Online

- ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ -> Batch

(2) Output ๊ด€์ (Output์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€)

- API ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ -> Online

- ์„œ๋ฒ„์™€ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ -> Online

- 1์‹œ๊ฐ„์— 1๋ฒˆ ์˜ˆ์ธกํ•ด๋„ ๋˜๋Š” ๊ฒฝ์šฐ -> Batch

(3) ์‹ค์‹œ๊ฐ„ ๋ชจ๋ธ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์ƒ๊ฐ ํ•„์š”

- ์šฐ์„  Batch Serving ์œผ๋กœ ๋ชจ๋ธ์„ ์šด์˜ํ•˜๋ฉด์„œ ์ ์  API ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜


[4] ๋จธ์‹ ๋Ÿฌ๋‹ ํ”„๋กœ์ ํŠธ ๋ผ์ดํ”„ ์‚ฌ์ดํด

1. ๋จธ์‹ ๋Ÿฌ๋‹ ํ”„๋กœ์ ํŠธ Flow

1) ๋ฌธ์ œ ์ •์˜์˜ ์ค‘์š”์„ฑ

- ํŠน์ • ํ˜„์ƒ์„ ํŒŒ์•…ํ•˜๊ณ , ํ˜„์ƒ์— ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ

- ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ด๊ณ , ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋ฌด์—‡์ด ์ข‹์„์ง€, ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋ฉด ์ข‹์„์ง€

2) ํ˜„์ƒ ํŒŒ์•…

- ํ˜„์žฌ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•จ

3) ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ œ ์ •์˜

- ํ˜„์ƒ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ช…ํ™•ํ•œ ์šฉ์–ด๋กœ ์ •๋ฆฌํ•ด๋ณด๊ธฐ

- ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ์„œ ํŒŒ์•…ํ•ด๋ณด๊ธฐ

- ๋‹ค์–‘ํ•œ ํ•ด๊ฒฐ ๋ฐฉ์‹ ์ค‘ ๋ฐ์ดํ„ฐ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ๊ณ ๋ฏผํ•˜๊ธฐ

4) ํ”„๋กœ์ ํŠธ ์„ค๊ณ„

- ๋ฌธ์ œ ์ •์˜์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค๊ณ„ํ•จ

- ๋จธ์‹ ๋Ÿฌ๋‹ ๋ฌธ์ œ ํƒ€๋‹น์„ฑ : ํŒจํ„ด, ๋ชฉ์  ํ•จ์ˆ˜, ๋ณต์žก์„ฑ, ๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€

- ๋ชฉํ‘œ ์„ค์ •, ์ง€ํ‘œ ๊ฒฐ์ •

- ์ œ์•ฝ ์กฐ๊ฑด : ์ผ์ •, ์˜ˆ์‚ฐ, ๊ด€๋ จ๋œ ์‚ฌ๋žŒ, ๊ฐœ์ธ์ •๋ณด, ๊ธฐ์ˆ ์  ์ œ์•ฝ, ํ™˜๊ฒฝ, ์„ฑ๋Šฅ ๋“ฑ

- ๋ฒ ์ด์Šค๋ผ์ธ : ๊ฐ„๋‹จํ•œ ๋ชจ๋ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ

- ํ”„๋กœํ† ํƒ€์ž… : Voila, Streamlit, Gradio ๋“ฑ

- ํ‰๊ฐ€ ๋ฐฉ๋ฒ• ์„ค๊ณ„

- ํšŒ์‚ฌ์˜ ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ์–ด๋–ค ๊ฐ€์น˜๋ฅผ ์ฃผ๋Š”๊ฐ€?

5) Action(๋ชจ๋ธ ๊ฐœ๋ฐœ ํ›„ ๋ฐฐํฌ & ๋ชจ๋‹ˆํ„ฐ๋ง)

- ์ง€ํ‘œ์˜ ๋ณ€ํ™” ํŒŒ์•…ํ•˜๊ธฐ

 

2. ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ

1) ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ํŒŒ์•…ํ•˜๊ธฐ

- ํšŒ์‚ฌ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ํŒŒ์•…

- ๋ฐ์ดํ„ฐ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„ ์ฐพ๊ธฐ(Input)

- ์˜ˆ์ธก ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์˜ˆ์ƒ(Output)



๐Ÿฐ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์˜ค๋Š˜์€ 3, 4๊ฐ•์„ ๋“ค์—ˆ๋‹ค. 5๊ฐ• ์‹ค์Šต ๋ถ€๋ถ„๊นŒ์ง€ ๋“ค์„ ์ˆ˜ ์žˆ์„ ์ค„ ์•Œ์•˜๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ•์˜์˜ ์–‘์ด ๋งŽ์•˜๊ณ , ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณผ ์ž๋ฃŒ๋“ค๋„ ์žˆ์—ˆ๋‹ค. ์šฐ์„  ์ง€๊ธˆ๊นŒ์ง€ ๋“ค์—ˆ๋˜ ๊ฐ•์˜ ์ค‘์—์„œ๋Š” ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ํŒŒํŠธ๊ฐ€ ์•„๋‹๊นŒ ์‹ถ๋‹ค.. ์•„๋ฌด๋ž˜๋„ ์ด๋ฒˆ ๋Œ€ํšŒ๊ฐ€ ์ฒ˜์Œ์ด์—ˆ๋‹ค๋ฉด ์ž˜ ์™€๋‹ฟ์ง€ ์•Š์•˜์„ํ…๋ฐ, ๋ถ€์บ  ์ „์— ์„ธ ์ฐจ๋ก€(?) ์ •๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋˜ ํ„ฐ๋ผ ๋‹จ์ˆœํžˆ ๋ชจ๋ธ๋งŒ ํ•™์Šตํ•˜๊ณ  SOTA๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹ค์ œ๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋น„์Šค ํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ํ•™์Šต์ด ๊ณ ํŒ ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ ๋“ฃ๋Š” MLOps ํŒŒํŠธ๊ฐ€ ์ œ์ผ ์žฌ๋ฐŒ๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. ํ”ผ์–ด์„ธ์…˜ ์‹œ๊ฐ„์—๋Š” ๋ฌด์—‡์„ ํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ํ˜ผ์ž ๋“ค์œผ๋ฉด ์ ˆ๋Œ€ ๋ชป ๋“ค์„ ๊ฒƒ ๊ฐ™์€(ใ…‹ใ…‹) ๊ฐœ๋ฐœ์ž ํŠน๊ฐ•์„ ๊ฐ™์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ฐ™์ด ๋“ค์œผ๋‹ˆ๊นŒ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋” ์ง‘์ค‘ํ•ด์„œ ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค!

728x90
Comments