๋ฅ๋ฌ๋์ ์ด์ฉํ ์ง์ ์ํ ์ถ์ (Deep Learning + Knowledge Tracing)์ผ๋ก ํน์ ์ํ์ ํตํด ํ์์ ์ง์ ์ํ๋ฅผ ํ์ ํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ๋ฌธ์ ๋ฅผ ๋ง์ถ์ง ์์ธกํ๋ ํ์คํฌ์ ๋๋ค. ํ์ต๊ณผ ๋ง๊ฐ์ ํตํด ์ง์ ์ํ๋ ๊ณ์ ๋ณํํ๋ฉฐ ์ถ๊ฐ๋๋ ๋ฌธ์ ํ์ด ์ ๋ณด๋ก ์ง์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ์ถ์ ํด์ผ ํฉ๋๋ค.
์ด ๋ ํฌ์งํ ๋ฆฌ๋ ์๋์ ๊ฐ์ ์ํคํ ์ณ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ฝ๋๋ก ์ด๋ฃจ์ด์ ธ์์ต๋๋ค. ๋จผ์ ์ด ์ํคํ ์ณ๋ ๋ ๊ฐ์ ์๋ฒ๋ฅผ ์ ์ ํ ์ํ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค.
1. Inference์ฉ ์๋ฒ : Naver Cloud Platform Server
- ์ ์ ์ Request๋ฅผ ๋ฐ์ Inference๋ฅผ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋, Model file์ packingํ์ฌ ์๋ก์ด Docker Image๋ก ๋ง๋๋ ์์ ์ ์ํํฉ๋๋ค.
2. Train์ฉ ์๋ฒ : P40 GPU Server
- Docker ์ปจํ
์ด๋๋ก ๊ตฌ์ฑ๋ ์๋ฒ๋ก, P40 GPU๊ฐ ํ ๋น๋์ด์์ต๋๋ค. ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ์ Train์ ์งํํ๊ณ ,
model.pt
ํ์ผ์ ์์ฑํฉ๋๋ค. Model Train์ GPU ๋ฆฌ์์ค๊ฐ ๋ง์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ํด๋น ์๋ฒ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
ML/DL Cycle์์ ๊ฐ Task๋ณ๋ก ํ์ํ ๋ฆฌ์์ค์ ์ข ๋ฅ์ ์์ค์ด ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด Train Server์ ๊ฒฝ์ฐ High-GPU ํ๊ฒฝ์ด ์ธํ ๋์ด์ผ ์ํํ ํ์ต์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ Inference์ ๊ฒฝ์ฐ ๋ฌด๊ฑฐ์ด ๋ชจ๋ธ์ ์ฌ๋ฆฌ์ง ์๋๋ค๋ฉด ๊ตณ์ด ๋์ ๋น์ฉ์ ๋ค์ฌ GPU ์๋ฒ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ์ด์ฒ๋ผ Task์ ๋ฐ๋ผ ๋น์ฉ์ ์ต๋ํ ์ ์ฝํ๊ณ ์ค์ผ์ผ๋ง ๊ฐ๋ฅํ ์ํคํ ์ณ๋ฅผ ๋ง๋๋ ๊ฒ์ด AI ๋ชจ๋ธ ์๋น์ ํต์ฌ point ์ค ํ๋์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ ์ธํ ์ NCP Cloud Server์ Docker ์ปจํ ์ด๋์ธ P40 GPU Server์ ์ฌ๋ผ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์์ ์ผ๋ก ๋์ํ๋๋ก ์ธํ ํ์๋ ค๋ฉด Config ๋๋ ์ฝ๋ ๋ด์ ๊ฒฝ๋ก ์ค์ ์ ๋ณ๊ฒฝํด์ฃผ์ ์ผํฉ๋๋ค.
-
๊ฐ์ฅ ๋จผ์ Inference, Train ๊ฐ ์๋ฒ์ git clone์ ๋ฐ๊ณ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์๋ฒ ์ธํ / ์ต์ด์ Client-Inference ์ปจํ ์ด๋ ์์ฑ์ ์ํํฉ๋๋ค.
-
์ ์ ๊ฐ Inference ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, Flask ์ปจํ ์ด๋(Client ์ปจํ ์ด๋)๊ฐ ํด๋น ๋ฐ์ดํฐ๋ฅผ Inference ์ปจํ ์ด๋(์๋ฒ ์ปจํ ์ด๋)๋ก ์ ๋ฌํ์ฌ Score ์์ธก์ ์ํํฉ๋๋ค.
-
update_data_dag
- Inference ๊ณผ์ ์์ AWS S3์ ์ ๋ฐ์ดํธํ ๋ฐ์ดํฐ๋ฅผ ์์๋์๋ค๊ฐ, ์ฃผ๊ธฐ์ ์ผ๋ก S3๋ก ์ ๋ก๋ํ์ฌ Versioning ํฉ๋๋ค. ์ด ๋ S3 ๋ฒํท ๋ค์์ ๋ฐ๋์ ๋ณธ์ธ์ S3 Bucket Name์ผ๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
-
retrain_and_push_dag
- Train server์์ S3์ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ๊ณ , ํ์ต์ ์ํํ์ฌ ๋ชจ๋ธ ํ์ผ์ ์์ฑํ ๋ค ์ด๋ฅผ ๋ค์ S3์ ์ ๋ก๋ํ์ฌ Versioningํฉ๋๋ค.
-
update_inference_dag
- Inference Server์์ ๋ชจ๋ธํ์ผ์ ๋ด๋ ค๋ฐ๊ณ , ์ด๋ฅผ ๊ธฐ์กด์ ์ฝ๋์ ํจ๊ป BentoML๋ก Packing & Containerizingํ์ฌ ์ด๋ฏธ์ง๋ก ๋น๋ํ ํ Docker Hub์ pushํฉ๋๋ค. ์ด ๋ ํ์ฌ Docker Hub ๋ด์ Image Repository ์ธํ ์ ๋ณธ์ธ์ ๋ ํฌ์งํ ๋ฆฌ๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
- ๊ฐ Inference ์ปจํ ์ด๋๋ Service ๋จ์๋ก ๋ฌถ์ฌ Docker Swarm์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, Docker Image๋ฅผ Pull๋ฐ์ ๋ณ๊ฒฝ์ ์ด ์๊ธด Image๋ฅผ ๊ธฐ์ค์ผ๋ก Inference Service๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ดํ์๋ 2-5์ ๊ณผ์ ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ๋ณตํ์ฌ ๋ชจ๋ธ์ ์ฌํ์ตํ๊ณ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ณผ์ ์ Apache Airflow Dags์ ์ํด ์ํ/๊ด๋ฆฌ๋ฉ๋๋ค.
ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ ์ต์๋จ์๋ ๋๊ฐ์ Initialization ์ ์คํฌ๋ฆฝํธ๊ฐ ์กด์ฌํฉ๋๋ค. ์ด ๋ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๊ฐ Inference Server์ Train Server๋ฅผ ์ต์ด ์ธํ ํฉ๋๋ค. ์ดํ, Airflow Webserver๋ฅผ ์ด์ฉํ์ฌ Dags๋ฅผ ์ํํจ์ผ๋ก์จ ์๋น ํ์ดํ๋ผ์ธ์ ์ํํ ์ ์์ต๋๋ค.
๐ ํ ๋๋ ํ ๋ฆฌ : /root/
โ๏ธ ์ค์น ํจํค์ง
- Docker
- Airflow
- SQLite3
Description
- ํจํค์ง ์ธํ ๋ฐ Airflow Scheduler ๋ฐ๋ชฌ ์คํ
- GUI Web server ๋ฐ๋ชฌ ์คํ(default port
8080
) - ์ต์ด์ Client-Inference ์ปจํ ์ด๋ ์๋น์ค๋ค์ Docker Swarm์ผ๋ก Deploy
- ์คํ ๊ณผ์ ์์ aws configure๋ฅผ ์ค์ ํด์ผ S3 ์ ๋ก๋/๋ค์ด๋ก๋ ๊ธฐ๋ฅ์ ์ ์์ ์ผ๋ก ์ํ ๊ฐ๋ฅ
๐ ํ ๋๋ ํ ๋ฆฌ : /opt/ml/
โ๏ธ ์ค์น ํจํค์ง
- Docker
- Airflow
- SQLite3
Description
- ํจํค์ง ์ธํ ๋ฐ Airflow Scheduler ๋ฐ๋ชฌ ์คํ
- GUI Web server ๋ฐ๋ชฌ ์คํ(default port
6006
) - ์คํ ๊ณผ์ ์์ aws configure๋ฅผ ์ค์ ํด์ผ S3 ์ ๋ก๋/๋ค์ด๋ก๋ ๊ธฐ๋ฅ์ ์ ์์ ์ผ๋ก ์ํ ๊ฐ๋ฅ
์๋ Dag๋ค์ ์ฐจ๋ก๋๋ก ์ํํ์ จ์ ๋ ํ Cycle์ด ์์ฑ๋ฉ๋๋ค.
Inference ๊ณผ์ ์์ ์์ธ ์ ์ Interaction ๋ก๊ทธ๋ค์ ๊ธฐ์กด ๋ฐ์ดํฐ์ ํฉ์ณ์ S3์ ์ ๋ก๋ํฉ๋๋ค.
S3์ ์ ๋ฐ์ดํธ๋ ์ ์ Interaction ๋ก๊ทธ๋ค์ ๋ถ๋ฌ์ ์ฌํ์ต๋ ๋ชจ๋ธ์ S3์ ์ ๋ก๋ ํฉ๋๋ค.
S3์ ์ ์ฅ๋ Retrain ๋ ๋ชจ๋ธ์ Inference server๋ก ์ฝ์ด์ rolling update๋ฅผ ์งํํฉ๋๋ค.
- easydict==1.9
- numpy==1.19.5
- pandas==1.1.5
- sklearn==0.0
- torch==1.6.0
- transformers==4.6.1
- bentoml==0.12.1
- boto3==1.17.78
- apache-airflow
- sqlalchemy < 1.4.0
- attrdict
โโโ client # Components of Flask
โย ย โโโ Dockerfile
โย ย โโโ app
โย ย โย ย โโโ main.py
โย ย โย ย โโโ requirements.txt
โย ย โย ย โโโ static
โย ย โย ย โย ย โโโ ...
โย ย โย ย โโโ templates
โย ย โย ย โย ย โโโ index.html
โย ย โย ย โโโ uwsgi.ini
โย ย โโโ start.sh # Build and Run client server container
โ
โโโ dags # Airflow DAGs
โย ย โโโ retrain_and_push_dag.py
โย ย โโโ update_data_dag.py
โย ย โโโ update_inference_server_dag.py
โ
โโโ data # Data WH upload/download & save data
โย ย โโโ ...
โโโ models # Data WH upload/download & save model
โย ย โโโ ...
โ
โโโ docker-compose.yml
โโโ docker_manual
โย ย โโโ docker_commands.sh # Summary of docker commands
โย ย โโโ service-init.sh # Start inference with docker swarm
โ
โโโ config # Model Config JSON Files
โย ย โโโ ...
โโโ asset # Encoder class npy files
โย ย โโโ ..
โโโ dkt # Baseline codes
โย ย โโโ ...
โโโ args.py # Get user arguments
โโโ train.py # Training model
โโโ requirements.txt
โ
โโโ questions.csv
โโโ inference.py # Inferenece using question.csv
โโโ packer.py # Packing model, encoders to bentoml service class
โโโ service.py # Compose inference api
โ
โโโ init_for_inference_server.sh # Initialize for Inference server
โโโ init_for_train_server.sh # Initialize for Train server
โโโ README.md
Flask๋ฅผ ์ด์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค์ ๋๋ค. Interactionํ๋ ํ๋ฉด์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์ด ํํธ๋ฅผ ์์ ํ์๋ฉด ๋ฉ๋๋ค.
Airflow์ Dag๋ก ๋ฑ๋ก๋ ํ์ผ๋ค์ด ์กด์ฌํ๋ ๋๋ ํ ๋ฆฌ์
๋๋ค.
cp
์ปค๋งจ๋๋ฅผ ์ด์ฉํ์ฌ initialization ๊ณผ์ ์์ airflow/dags/
๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌ๋ฉ๋๋ค.
๋ฐ์ดํฐ๊ฐ ์ ์ Interaction์ ํตํด ์๋กญ๊ฒ ์ถ๊ฐ๋์์ ๋, S3์ Upload/Download๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋, Uploadํ csv ๋ฐ์ดํฐ / Downloadํ csv ๋ฐ์ดํฐ๋ฅผ saveํฉ๋๋ค.
๋ชจ๋ธ์ด ์๋กญ๊ฒ ์ถ๊ฐ๋์์ ๋, S3์ Upload/Download๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋, Uploadํ ๋ชจ๋ธ / Downloadํ ๋ชจ๋ธ์ saveํฉ๋๋ค.
Docker ๋ช
๋ น์ด๋ฅผ ์ ๋ฆฌํด๋ docker_commands.sh
๊ณผ ์ด๊ธฐ Inference ์ปจํ
์ด๋ ์๋น์ค ์ธํ
์ ์ํ service_init.sh
๋ก ์ด๋ฃจ์ด์ ธ์์ต๋๋ค.
Train ๋ฐ Inference๋ฅผ ์ํ argument configuration ํ์ผ๋ค๋ก ์ด๋ฃจ์ด์ ธ์์ต๋๋ค.
Training ๊ณผ์ ์์ Categorical data๋ฅผ ๋ณํํ๋ Encoder ์ ๋ณด๊ฐ npy ํ์ผ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
DKT Task ์ํ์ ์ํ Trainer, Model, Metric, Loss ๋ฑ์ ์ฝ๋๊ฐ ์๋ baseline code ๋๋ ํ ๋ฆฌ์ ๋๋ค.