Emopic-AI 저장소에는 Emopic 프로젝트에 사용되는 Multi-Label Classification Model과 Captioning 모델을 serving 하는 코드가 작성되어 있습니다. 현재 소스코드는 redis를 queue로 사용하는 비동기 추론 패턴으로 구성되어 있습니다. 동기 추론 패턴을 확인하시려면 링크를 확인해 주세요
-
서버를 시작하기전에 훈련된 모델이 필요합니다. 모델들을 다운받거나 참고사이트를 확인해 훈련시켜주세요.
-
로컬에서 서버를 실행시키기 보단 도커를 사용해 서버를 실행시키는 것을 추천합니다.
- Emopic AI는 미리 만들어진 docker-image를 제공합니다
$ docker build -t {image-name} \
--build-args CUDA_VER=11.8.0 \
--build-args CUDA_PATH_VER=11.8 \
--build-args CUDNN_VER=8 \
--build-args UBUNTU_VER=20.04 \
--build-args PYTHON_VER=38
-
필요한 소스코드는 docker-compose의 volume을 이용해 컨테이너 안으로 넣습니다. 그래서 컨테이너를 띄운 뒤에도 소스코드를 수정할 수 있습니다.
-
총 9개의 컨테이너가 동작합니다. 내부 컨테이너간에 통신은 grpc 프로토콜을 사용합니다.
1. nginx (reverse proxy) 2. redis (job queue) 3. router (fastapi server) 4. class-client (class 서버에 요청을 보내는 client) 5. class-server (classsification을 수행하는 ML server) 6. caption-client (caption 서버에 요청을 보내는 client) 7. caption-server (captioning을 수행하는 ML server) 8. mysql-class-client (classification 결과를 DB에 전송하는 client) 9. mysql-caption-client (captioning 결과를 DB에 전송하는 client)
git clone https://github.com/Memento-Makers/Emopic-AI.git
- 다운로드 받거나 학습시킨 모델을 각 폴더(caption, classification)의 resources 폴더에 넣어 주세요.
- 밑의 .env파일에 사용하려는 모델 경로를 작성해주세요.
-
config 폴더 안의 .env 파일을 원하는 값으로 수정해주세요.
-
database에 대한 정보는 사용하시려는 db 정보와 일치시켜 주세요 (mysql이 아닌 다른 db를 사용하신다면 관련된 라이브러리 설치와 src/database안의 소스코드를 db에 맞게 수정해주세요)
-
env
REDIS_HOST=redis-queue REDIS_PORT=6379 REDIS_DB=0 REDIS_DECODE_RESPONSES=True API_TITLE=Emopic Inference Server API_DESCRIPTION=emopic ML serving API_VERSION=0.1 CAPTION_PROCESS_NUM=2 CLASS_PROCESS_NUM=2 MYSQL_HOST=host.docker.internal MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD= MYSQL_DB=emopic CLASS_MODEL_HOST=class-server CLASS_MODEL_PORT=8600 CAPTION_MODEL_HOST=caption-server CAPTION_MODEL_PORT=8500 CLASS_MODEL_PATH=resources/coco_XL_model.pth CAPTION_MODEL_PATH=resources/rf_model.pth CAPTION_TOKEN_PATH=demo_coco_tokens.pickle # Log CAPTION_SERVER_LOG_PATH=/app/log/caption_server.log CLASS_SERVER_LOG_PATH=/app/log/class_server.log CAPTION_CLIENT_LOG_PATH=/app/log/caption_client.log CLASS_CLIENT_LOG_PATH=/app/log/class_client.log MYSQL_CLASS_CLIENT_LOG_PATH=/app/log/mysql_class_client.log MYSQL_CAPTION_CLIENT_LOG_PATH=/app/log/mysql_caption_client.log DEEPL_AUTH_KEY=your_key
- 기본적으로 docker-compose.yml 파일이 있는 폴더에 log 폴더를 생성해주시고 각 컨테이너 별로 로그가 저장될 수 있게 컨테이너 이름별로 폴더를 만들어 주세요. (docker-compose.yml 파일을 참고해 주세요)
docker compose up -d
- Mutli-Label Classification
- Caption