λ₯λ¬λμ μ΄μ©ν μ§μ μν μΆμ (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 λλ ν 리μ λλ€.