MLOps, Docker๋ก ์ฒซ๋ฐ์ ๋ด๋๋ค
๊ธฐ์ ์ธ๋ฏธ๋ ์ฃผ์ ๋ โDocker๋ก ๋ฐฐ์ฐ๋ MLOpsโ. ์ด๋ก ๊ณต๋ถ๋ฅผ ๋์ด, ์ค์ ์ด์ ํ๊ฒฝ์ ๋ด ์์ผ๋ก ๊ตฌ์ถํด๋ณด๋ ์๊ฐ์ด์๋ค. ๋ชจ๋ธ๋ง ๋ ๋ค ๋ง๋๋ ๊ฒ ์๋๋ผ, ๋ฐ์ดํฐ ์์ง๋ถํฐ ๋ฐฐํฌ, ๋ชจ๋ํฐ๋ง๊น์ง ์ ์ฒด ํ์ดํ๋ผ์ธ์ ์ค๊ณํ๋ ์์ฃผ ํน๋ณํ ๊ฒฝํ์ด์๋ค. ๊ณผ์ฐ ์ฑ๊ณตํ์๊น? ๐ค
๐ฅ ์ฐ๋ฆฌ ํ์ ๋ชฉํ
- ์ฝ๋ ๊ธฐ๋ฐ ์ธํ๋ผ (IaC):
docker-compose.yml
ํ๋๋ก ๋ชจ๋ ํ๊ฒฝ์ ํต์ผํ๋ค. โ์ ์ปดํจํฐ์์ ๋๋๋ฐ์?โ๋ ์ด์ ๊ทธ๋ง!- MLOps ํ์ดํ๋ผ์ธ ์ ๋ณต: ๋ฐ์ดํฐ ์์ง-ํ์ต-๋ฐฐํฌ-๋ชจ๋ํฐ๋ง์ ํ๋ฆ์ ์ง์ ๋ง๋ค๊ณ ์ดํดํ๋ค.
- MSA ์ํคํ ์ฒ ์ฒดํ: ๊ฐ ๊ธฐ๋ฅ์ ๋ ๋ฆฝ ์๋น์ค๋ก ์ชผ๊ฐ ์ ์ฐํ ์์คํ ์ ์ค๊ณํด๋ณธ๋ค.
๐งโ๐ป ์์คํ ์ํคํ ์ฒ: ์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ ๋ง๋ค์๋ค
ํ๋ก์ ํธ์ ์ฌ์ฅ, MSA ๊ธฐ๋ฐ ์ํคํ
์ฒ๋ค. ๊ฐ์ ๋งก์ ์๋น์ค๊ฐ docker-compose
์์์ ์ ๊ธฐ์ ์ผ๋ก ๋์๊ฐ๋๋ก ์ค๊ณํ๋ค.
์๋น์ค | ์ญํ | ํต์ฌ ๊ธฐ์ |
---|---|---|
MLflow Server | ๋ชจ๋ธ ์คํ/๋ฒ์ ๊ด๋ฆฌ, ์ํฐํฉํธ ์ ์ฅ | MLflow , minio |
PostgreSQL DB | ๋ฐ์ดํฐ ์ ์ฅ, MLflow ๋ฐฑ์๋ | mySQL |
DB Ingestion | ์ธ๋ถ ๋ฐ์ดํฐ ์์ง ๋ฐ DB ์ ์ฌ | Python |
Inference Server | ์์ธก API ์ ๊ณต | FastAPI |
Visualizer Server | ์์ธก ๊ฒฐ๊ณผ ์๊ฐํ ๋์๋ณด๋ | Streamlit |
๋๋ ์ด ์ค์์ Visualizer Server๋ฅผ ๋งก์๋ค. ์ฌ์ฉ์๊ฐ ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๋์ผ๋ก ๋ณด๊ณ , ์ง์ ํผ๋๋ฐฑ๊น์ง ๋จ๊ธธ ์ ์๋ ์ฐฝ๊ตฌ๋ฅผ ๋ง๋๋ ์ผ. ๋ฐ์ดํฐ์ ์ฌ๋์ด ๋ง๋๋ ์ ์ ์ ๋ง๋ ๋ค๋ ๊ฒ ์ฐธ ๋งค๋ ฅ์ ์ด์๋ค.
๐ ๏ธ ํ๋ก์ ํธ ์ฐ์ฅ ๋ชจ์
- ์ปจํ
์ด๋:
Docker
,Docker-Compose
- ML ํ์ดํ๋ผ์ธ:
MLflow
,minio
- ๋ฐฑ์๋:
FastAPI
- ๋ฐ์ดํฐ๋ฒ ์ด์ค:
mySQL
- ํ๋ก ํธ์๋:
Streamlit
์ด ๋๊ตฌ๋ค์ ์ฎ์ด ์ผ๊ด์ฑ ์๊ณ ์ฌํ ๊ฐ๋ฅํ MLOps ํ๊ฒฝ์ ๋ง๋๋ ๊ฒ์ด ํต์ฌ ๊ณผ์ ์๋ค.
โจ ํ์ดํ๋ผ์ธ์ ์ด๋ ๊ฒ ํ๋ฅธ๋ค: ๊ฐ ์๋ฒ์ ์ญํ
์ฐ๋ฆฌ ํ์ดํ๋ผ์ธ์ ๊ฐ์ ๋ช ํํ ์ญํ ์ ๊ฐ์ง ์๋น์ค๋ค์ ํ๋ ฅ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
-
๋ฐ์ดํฐ ์์ง (
db-ingestion-server
): ๋ชจ๋ ๊ฒ์ ์์. Kaggle API๋ก ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ์ ๊ฐ๋จํ ์ ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ์น ํ,PostgreSQL
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ ์ผ๋ก ์ ์ฅํ๋ ์๋ฌด๋ฅผ ์ํํ๋ค. ํ์ดํ๋ผ์ธ์ ์ ์ ํ ํผ๋ฅผ ๊ณต๊ธํ๋ ์ญํ ! -
๋ชจ๋ธ ํ์ต ๋ฐ ์คํ ๊ด๋ฆฌ (
mlflow-client
&mlflow-server
):mlflow-client
๊ฐPostgreSQL
์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด ๋ชจ๋ธ์ ํ์ต์ํจ๋ค. ์ด ๊ณผ์ ์์ ์ฌ์ฉ๋ ๋ชจ๋ ํ๋ผ๋ฏธํฐ, ์ฑ๋ฅ ๋ฉํธ๋ฆญ, ๊ทธ๋ฆฌ๊ณ ํ์ต๋ ๋ชจ๋ธ ํ์ผ(์ํฐํฉํธ)๊น์งmlflow-server
์ ๊ผผ๊ผผํ๊ฒ ๊ธฐ๋กํ๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ฑ๋ฅ ์ข์ ๋ชจ๋ธ์ ์ ๋ณํด MLflow Model Registry์ โProductionโ ๋ฒ์ ์ผ๋ก ๋ฑ์ง๋ฅผ ๋ถ์ฌ ๋ฑ๋กํ๋ค. ๐ -
์ค์๊ฐ ์ถ๋ก API (
inference-server
):FastAPI
๋ก ๋ง๋ค์ด์ง ์ด ์๋ฒ๋ Model Registry๋ฅผ ๊ณ์ ์ฃผ์ํ๋ค๊ฐ, โProductionโ ๋ฑ์ง๊ฐ ๋ถ์ ์ต์ ๋ชจ๋ธ์ ์๋์ผ๋ก ๊ฐ์ ธ์จ๋ค. ๊ทธ๋ฆฌ๊ณ/predict
๋ผ๋ API ์๋ํฌ์ธํธ๋ฅผ ํตํด ๋ชจ๋ธ์ ์์ธก ๊ธฐ๋ฅ์ ์ธ๋ถ ์ธ๊ณ์ ์ ๊ณตํ๋ค. -
์ฌ์ฉ์ ๋์๋ณด๋ (
visualizer-server
):Streamlit
์ผ๋ก ๊ตฌํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค. ์ฌ์ฉ์๊ฐ ๋์๋ณด๋์์ โ์์ธกโ ๋ฒํผ์ ๋๋ฅด๋ฉด,visualizer-server
๋inference-server
์/predict
API๋ก ์์ฒญ์ ๋ณด๋ธ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ต์ผ๋ก ๋ฐ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ์น์ ํ ๊ทธ๋ํ์ ํจ๊ป ๋ณด์ฌ์ฃผ๋ ์๋ฌด๋ฅผ ๋งก์๋ค. ๋ชจ๋ธ๊ณผ ์ฌ์ฉ์๊ฐ ๋ง๋๋ ์ต์ ์ !
๐ ์ฑ๊ณต์ ์๊ฐ!
docker-compose up
โฆ ์๋ง์ ์๋น์ค๊ฐ ํฐ๋ฏธ๋ ์๋ก ์ฌ๋ผ์ค๋ฉฐ ๊ฐ์์ ์ญํ ์ ์ํํ๊ธฐ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์นจ๋ด, ๋ด๊ฐ ๋ง๋ Streamlit ๋์๋ณด๋์ FastAPI ์๋ฒ๊ฐ ์์ธกํ ๊ฒฐ๊ณผ๊ฐ ๋ฑ! ํ๊ณ ๋ด์ ๋. ๊ทธ ์ง๋ฆฟํจ์ ์ ๋ง ์์ ์๊ฐ ์๋ค. ์ด๊ฒ ๋ฐ๋ก MLOps๊ตฌ๋! ์จ๋ชธ์ผ๋ก ๋๋ ์๊ฐ์ด์๋ค.
ํ๊ณ : ๋ฌด์์ ์ป์๋
์ด๋ฒ ํ๋ก์ ํธ๋ ๋จ์ํ ์ฝ๋ฉ ๊ทธ ์ด์์ด์๋ค. ์์คํ ์ ์ฒด๋ฅผ ๋ณด๋ ์์ง๋์ด์ ์์ผ๋ฅผ ์ป์๋ค๊ณ ํ ๊น.
- ํฐ ๊ทธ๋ฆผ: ๊ฐ ์๋น์ค๊ฐ API๋ก ํต์ ํ๋ฉฐ ํ๋์ ํ์ดํ๋ผ์ธ์ ์ด๋ฃจ๋ ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ฒ ๋๋ค.
- ์๋ํ์ ํ: MLOps๊ฐ ์ ํ์ํ์ง, ๋ฐ๋ณต ์์ ์ ์ค์ด๋ ๊ฒ์ด ์ผ๋ง๋ ์ค์ํ์ง ๋ผ์ ๋ฆฌ๊ฒ ๋๊ผ๋ค.
- ์ง์ง ํ์ : MSA ํ๊ฒฝ์์ ๊ฐ์ ์๋น์ค์ ์ฑ ์์ ๋คํ๊ณ , API ๋ช ์ธ๋ฅผ ๋ง์ถ๋ฉฐ ํจ๊ป ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋๋ ์ฆ๊ฑฐ์์ ์๊ฒ ๋๋ค.
๋ฌผ๋ก ์์ง ๊ฐ ๊ธธ์ ๋ฉ๋ค. CI/CD๋ ๋์ ํด์ผ ํ๊ณ , ๋ชจ๋ธ ์ฌํ์ต ํ์ดํ๋ผ์ธ๋ ์๋ํํด์ผ ํ๋ค. ํ์ง๋ง ์ด๋ฒ ๊ฒฝํ์ ์์ผ๋ก ๋ ๋ณต์กํ ์์คํ ์ ๋์ ํ ์ ์๋ค๋ ๊ฐ๋ ฅํ ์์ ๊ฐ์ ์ฌ์ด์ฃผ์๋ค. ๐ฅ
ํ๋ก์ ํธ์ ๋ ์์ธํ ๋ด์ฉ์ ์ฐ๋ฆฌ ํ GitHub์์ ํ์ธํ ์ ์๋ค. ๋!