Hugging Face ViT ๋ชจ๋ธ์ ๋ก์ปฌ TensorFlow Serving ๋ฐฐํฌ์์ Docker ๋ฐ Kubernetes๋ฅผ ํ์ฉํ ๋ฉํฐ ์ ์ ๋์ ํด๋ฌ์คํฐ ๋ฐฐํฌ๋ก ํ์ฅ
Deploying ๐ค ViT on Kubernetes with TF Serving
AI ์์ฝ
Context
๋ก์ปฌ TensorFlow Serving ๋ฐฐํฌ๋ ๋จ์ผ ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ํฉํ๋, ์ค๋ฌด์์ ๋ค์์ ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ค๋ฉด ํ์ฅ ๊ฐ๋ฅํ ์ธํ๋ผ๊ฐ ํ์ํ๋ค. Vision Transformer ๋ชจ๋ธ์ ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ/ํ์ฒ๋ฆฌ ๋ฐ gRPC ์์ฒญ ์ฒ๋ฆฌ๋ ๋ก์ปฌ ํ๊ฒฝ์์ ๋์ํ์ง๋ง, ํ๋ก๋์ ํ๊ฒฝ์์๋ ์๋ ์ค์ผ์ผ๋ง๊ณผ ๋ณด์์ ์ ๊ณตํ๋ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ์ด ํ์์ด๋ค.
Technical Solution
- SavedModel ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ํ์คํ: <MODEL_NAME>//SavedModel ํ์์ผ๋ก ๋ชจ๋ธ ์ ์ฅํ์ฌ TensorFlow Serving์ ๋ค์ค ๋ฒ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ ํ์ฉ
- Docker ๊ธฐ๋ฐ ์ปจํ ์ด๋ํ: TensorFlow Serving ๊ณต์ ์ด๋ฏธ์ง๋ฅผ ๋ฒ ์ด์ค๋ก ์ฌ์ฉํ๊ณ docker run ๋ฐ docker cp๋ฅผ ํตํด ๋ชจ๋ธ์ ์ปจํ ์ด๋์ ๋ณต์ฌํ ํ docker commit์ผ๋ก ์ปค์คํ ์ด๋ฏธ์ง ์์ฑ
- Kubernetes ํด๋ฌ์คํฐ ๋ฐฐํฌ: Google Kubernetes Engine(GKE)์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ํ๊ณ ์๋ ์ค์ผ์ผ๋ง, ๋ณด์, ๋ฉํฐ ์ ์ ์์ฒญ ์ฒ๋ฆฌ ์ง์
- TensorFlow Serving ๋ฐฐ์น ์ฒ๋ฆฌ ๊ตฌ์ฑ: max_batch_size, num_batch_threads ๋ฑ์ ์ค์ ์ ํตํด ์๋ ๋ฐฐ์น ๊ตฌ์ฑ์ผ๋ก ๋ค์ค ์ํ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ
- ๋ชจ๋ธ ์๋ฐ์ ํ์ฑํ: enable_model_warmup ์ต์ ์ผ๋ก ๋๋ฏธ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด TensorFlow ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ ๋ก๋ํ์ฌ ์๋น์ค ์๊ฐ ์ค ์ง์ฐ ์ ๊ฑฐ
Key Takeaway
Kubernetes ๊ธฐ๋ฐ ML ๋ชจ๋ธ ๋ฐฐํฌ๋ SageMaker, Vertex AI ๊ฐ์ ๊ด๋ฆฌํ ์๋น์ค์ ๋ฌ๋ฆฌ ์ธ๋ถ ์ ์ด๊ถ์ ์ ๊ณตํ๋ฉฐ, ์ ๊ณ์์ ์๋ ๊ฐ ๊ฒ์ฆ๋ ์ํฌํ๋ก์ฐ๋ก์ Docker ์ปจํ ์ด๋ํ์ ์กฐํฉํ๋ฉด ๋๊ท๋ชจ ํ๋ก๋์ ํ๊ฒฝ์์ ์์ ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ ์ถ๋ก ์๋น์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.
์ค์ฒ ํฌ์ธํธ
HuggingFace Transformers ๊ธฐ๋ฐ ๋ชจ๋ธ์ ํ๋ก๋์ ์ ๋ฐฐํฌํ๋ ์์ง๋์ด๋ TensorFlow Serving SavedModel ํ์ + Docker ์ปจํ ์ด๋ํ + Kubernetes ์ค์ผ์คํธ๋ ์ด์ ์กฐํฉ์ ์ฌ์ฉํ๋ฉด, ์๋ ์ค์ผ์ผ๋ง๊ณผ ๋ค์ค ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํตํด ๋ก์ปฌ ๋ฐฐํฌ ๋๋น ๋ฉํฐ ์ ์ ํ๊ฒฝ์ ์ง์ํ ์ ์๋ค.