FastAPI server wiki - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
์ด ์ํค๋ ONGI ํ๋ก์ ํธ์ FastAPI & AI ์๋ฒ์ ๊ด๋ จ๋ ๋ชจ๋ ๋ด์ฉ์ ๋ฌธ์ํํ ๊ณต๊ฐ์ ๋๋ค. ๊ฐ ์น์ ์ ์ค์ ๊ตฌ์ฑ ์ ์ฐธ๊ณ ํ ์ ์๋๋ก ๋ค์ด์ด๊ทธ๋จ, ๋๊ตฌ, ์ ์ฑ ๋ฑ์ ํฌํจํ๊ณ ์์ต๋๋ค.
- ์ด๋ฏธ์ง ์๋ฒ ๋ฉ
- ํ์ด๋ผ์ดํธ ์ฌ์ง ์ถ์ฒ
- ์ธ๋ฌผ ๋ถ๋ฅ
- ์คํ์ผ ๋ณํ
- ์คํ์ผ ๋ณํ gpu ์ฌ์ฉ๋ฅ ์ฒดํฌ(์ฝ๋ฉ ํ๊ฒฝ)
- ํ ์คํฌ๋ณ ๋ฆฌ์์ค(cpu, mem) ์ฌ์ฉ๋ ์ ํ ๋ฐฉ์ ํ์
- VM ์ธ์คํด์ค ์ ํ
- ํ์ฅ์ฑ์ ๊ณ ๋ คํ ๋ฐฐํฌ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ
- ์ฌ์ฉํ ์ธํ๋ผ ๊ธฐ์ ๋ฐ ์๋น์ค ๋ช ์ธ
- ๋ชจ๋ํฐ๋ง ๋์ ์งํ ๋ชฉ๋ก๊ณผ ์์ง/์๊ฐํ ๋ฐฉ๋ฒ
- ๊ฐ์ด ๋ถํ ํ ์คํธ ๋๋ ์๋ฎฌ๋ ์ด์ ๊ฒฐ๊ณผ
- ์ ์ํ ์ธํ๋ผ/๋ชจ๋ํฐ๋ง ์ค๊ณ๊ฐ ํ ์๋น์ค์ ํฅํ ์ฑ์ฅ๊ณผ ์์ ์ ์ด์์ ์ด๋ป๊ฒ ๊ธฐ์ฌํ๋์ง์ ๋ํ ์ค๋ช
- ๊ตฌํ ์๋ฃ ์ฌํญ
- ๊ฐ์ ๊ณํ
- ๊ตฌํ ์๋ฃ ์ฌํญ
- ๊ตฌํ ์๋ฃ ์ฌํญ
- ๊ตฌํ ์๋ฃ ์ฌํญ
- ๊ฐ์ ๊ณํ
- ๊ตฌํ ์๋ฃ ์ฌํญ
- CORS ๊ฒํ
- ์ด๋ฏธ์ง ๋ก๋ฉ ๊ฐ์
- CPU ์๋ฒ ๊ณผ๋ถํ ๋์(MVP)
- def โ async def ๋ณํ
- FastAPI ๋์ ์๋ฆฌ๋ฅผ ํ์ฉํ ์ ๋ต
- MVP์์์ ์์ฒญ ๊ณผ๋ถํ ๋์ ๋ฐฉ์
- ํ
์คํธ ๊ฒฐ๊ณผ
- CPU-Heavy ์ฝ๋ฃจํด ํ ์คํธ
- ์ฝ๋ฃจํด์์ CPU-Heavy ํ์คํฌ๋ฅผ ๋ณ๋ ์ค๋ ๋๋ก ๋ถ๋ฆฌ ๊ฐ์ ํ ํ ์คํธ
- ์ถ๋ก ์๊ฐ ๋ถํํ ์คํธ
- ์ต๋ ์คํ ์ค๋ ๋ ์ ์ ํ(max_workers)
- Embedding ์ธ๋งํฌ์ด ์ค์ ํ ํ ์คํธ
- ์ธ๋งํฌ์ด ๋์ Task Queue ๋์ ํ ์คํธ
- ์ธ๋งํฌ์ด ์์น ํ ์คํธ
- ์ถ๋ก ๋ชจ๋ธ GPU ์๋ฒ ์ด์
- GPU ๋ชจ๋ธ ์๋น ์ต์ ํ
- ๋ฉํฐ ์ค๋ ๋ โ ๋ฉํ
ํ๋ก์ธ์ค
- [Gunicorn] gunicorn.config.py ๊ตฌ์ฑ ์ค๊ณ
- [Gunicorn] ๋ฉํฐ ํ๋ก์ธ์ค ์ํคํ ์ณ Docker ํ์ฉ ๊ด๋ จ
- [Gunicorn] ๋ชจ๋ธ preload ์ฃผ์ ์ฌํญ (ํ๋ก์ธ์ค ๊ฐ ๋ฆฌ์์ค ๊ณต์ ์ด์)
- [Gunicorn] ๋ฉํฐ ํ๋ก์ธ์ค ์๋ฒ ๋ก๊ทธ ๋ถ์
- [Redis] ๋์ ์งํ
- [๋ฉํฐ ํ๋ก์ธ์ค][CPU server] ๋จ์ผ ํ๋ก์ธ์ค โ ๋ฉํฐ ํ๋ก์ธ์ค (๋ณ๋ชฉ ๊ฐ์ ๋ฐ ํธ๋ฌ๋ธ ์ํ )
- [๋ฉํฐ ํ๋ก์ธ์ค][both server] ๋ฉํฐ ํ๋ก์ธ์ค (๋ณ๋ชฉ ๊ฐ์ ๋ฐ ํธ๋ฌ๋ธ ์ํ )
- [๋ฉํฐ ํ๋ก์ธ์ค] ๋จ์ผ ํ๋ก์ธ์ค, ๋ฉํฐ ํ๋ก์ธ์ค ์ฑ๋ฅ ๋น๊ต(๋ฆฌ์์ค ์ฌ์ฉ๋, ํ ์คํฌ๋ณ ์ง์ฐ์๊ฐ)
- [๋ฉํฐ ํ๋ก์ธ์ค] GPU ์๋ฒ ์์ปค ํ๋ก์ธ์ค 3โ2 ๊ฐ์ถ ํ ์คํธ
- [๋ฉํฐ ํ๋ก์ธ์ค] CPU-GPU ์๋ฒ ๋ชจ๋ ์์ปค ํ๋ก์ธ์ค 2 ํ ์คํธ
- ํด๋ผ์ฐ๋ ๋ฐฐํฌ
- ๋ฉ์์ง ํ & Kafka ๋์ ๊ณํ
- Python ์ฑ๋ฅ ์ต์ ํ(feat. HYPERCONNECT Tech Blog)
- FLUX 1 Kontext dev ๋ชจ๋ธ ์๋น ๊ณผ์
- FastAPI + Uvicorn ๋์ ์๋ฆฌ
- FastAPI ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ
- Python GIL ํด์ ์ฐ์ฐ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ตฌ์กฐ
- [GPU ์๋ฒ ์ด์ ] GPU-Cuda์ ์ดํด
- [GPU ๋ชจ๋ธ ๋ณ๋ ฌ ์ฒ๋ฆฌ] Single GPU Inference Using GPU to the Max Potential ์์ฝ
- ๋ฉ์์ง ํ
- [์ธํ๋ผ] ๋ฆฌ์์ค ์ฌ์ฉ๋ ์ ํ ๋ฐ ํ ์ ์ฉ ๋ฐฉ์ ํ์
- [ํธ๋ฌ๋ธ ์ํ ] ๋ ๋์ค ์ผ๋ถ ์์ฒญ ์๋ฒ ๋ฉ ์บ์ฑ ์คํจ ์์ธ ํ์
- [ํธ๋ฌ๋ธ ์ํ ] ๋ฉํฐํ๋ก์ธ์ค ๋์ ํ ์คํธ Value is not an object: null
- [ํธ๋ฌ๋ธ ์ํ ][ํ์ด๋ผ์ดํธ ์ฌ์ง ์ถ์ฒ] Linear Probing ํ์ต ๊ณผ์
- [ํธ๋ฌ๋ธ ์ํ ] Redis too many connection
- [ํธ๋ฌ๋ธ ์ํ ] GPU ์๋ฒ ๋ฉํฐ ํ๋ก์ธ์ค ๋์ (gunicorn cuda does not allow reinitialize)
- [๋ฆฌํฉํ ๋ง] mypy๋ฅผ ์ด์ฉํ ํ์ ํํธ, ์๋ธ ํด๋์ค ์๊ทธ๋์ฒ ๋ถ์ผ์น, ํ์ ๋ถ์ผ์น ๋ฆฌํฉํ ๋ง
- [ํธ๋ฌ๋ธ ์ํ ] torch 2.5.1 ๋ฒ์ ์ค์น ๋ฌธ์
- [ํธ๋ฌ๋ธ ์ํ ] ๋์ปค๋ก ์๋ฒ ์คํ ์ ๋ฌธ์ ์ ํ์ ์ ์ํด ๋ก๊น ์ถ๊ฐ
- [ํธ๋ฌ๋ธ ์ํ ] artifact registry์ ์ด๋ฏธ์ง ๋ฑ๋ก
- [ํธ๋ฌ๋ธ ์ํ ] from diffusers import FluxKontextPipeline ๋ถ๊ฐ