# RESTful API 기반의 LLM 추론 아키텍처 FastAPI를 이용해 클라이언트가 RESTful API를 통해 서비스와 상호작용하도록 설계되었습니다. - **독립성**: 주요 기능(파일 업로드, 모델 추론, 작업 상태 확인)이 각기 독립된 API 엔드포인트로 구현되었습니다. --- ## 아키텍처 구성 요소 ### (1) API 계층 - **FastAPI**: - 클라이언트와 직접 상호작용하는 API 레이어. - 비동기 요청을 처리하고 데이터 유효성 검사를 수행. - **주요 엔드포인트**: - `/start-inference/`: CSV 및 모델 리스트 파일 업로드 후 추론 작업 시작. - `/merge-results/`: 배치별로 나뉜 결과를 단일 파일로 결합 - `/download-latest/`: 가장 최근에 완료된 결과 파일 다운로드. ### (2) 작업 처리 계층 - **RQ (Redis Queue)**: - 긴 작업(예: 대규모 LLM 추론)을 처리하기 위한 비동기 태스크 큐. - 작업 상태를 추적 가능하며, 확장성을 제공. - **주요 태스크**: - `run_inference`: 모델 로드 및 배치 기반 추론 처리. ### (3) 모델 및 비즈니스 로직 계층 - **LLM 모듈 (`vllm`)**: - LLM 모델(예: Llama, EXAONE)을 로드하고 추론을 수행. - GPU 메모리 최적화 및 모델 동적 로딩 지원. - **템플릿 포맷팅 모듈 (`template.py`)**: - 각 모델에 특화된 입력 텍스트 포맷팅. - 사용자가 정의한 규칙 기반의 텍스트 전처리 지원. ### (4) 데이터 계층 - **파일 저장소**: - 업로드된 파일은 `/LLM_asyncio/uploaded` 디렉토리에 저장. - 추론 결과는 `/LLM_asyncio/processed` 디렉토리에 저장. - **에러 처리 데이터**: - 추론 실패 또는 에러 발생 행은 `/LLM_asyncio/errors` 디렉토리에 저장하여 추적 가능. --- ## 상태 **제안됨** --- ## 콘텍스트 대규모 텍스트 데이터 추론은 높은 처리 비용과 시간이 소요됩니다. 이를 효율적으로 처리하기 위해 비동기 작업 관리, GPU 자원 활용 최적화, 배치 기반 설계를 도입하였습니다. --- ## 결정 - **성능**: GPU 메모리 효율을 극대화하고 배치 기반 추론으로 처리 시간을 단축. - **확장성**: Redis Queue와 다중 워커를 활용하여 대규모 요청 처리에 유연하게 대응. - **안정성**: 오류 행 데이터를 별도로 저장하고 추적 가능하여 처리 안정성을 보장. - **유지보수성**: 템플릿 기반 설계를 통해 다양한 모델에 대한 호환성을 확보. --- ## 결과 - **사용자 경험 향상**: - 작업 상태를 실시간으로 확인하고 결과를 쉽게 다운로드할 수 있어 효율적인 워크플로우 제공. - **확장 가능성**: - Redis와 RQ 워커를 추가하여 높은 트래픽 상황에도 대응 가능. --- ## 컴플라이언스 - **모델 및 데이터**: 각 모델 사용 규약 및 데이터 처리 가이드라인 준수. --- ## 노트 - **결정자**: 그래픽스개발팀 / 김용연 - **결정 날짜**: [2025.01.06] `