76 lines
3.1 KiB
Markdown
Executable File
76 lines
3.1 KiB
Markdown
Executable File
# RESTful API 기반의 LLM 추론 아키텍처
|
|
FastAPI를 이용해 클라이언트가 RESTful API를 통해 서비스와 상호작용하도록 설계되었습니다.
|
|
|
|
- **독립성**: 주요 기능(파일 업로드, 모델 추론, 작업 상태 확인)이 각기 독립된 API 엔드포인트로 구현되었습니다.
|
|
|
|
---
|
|
|
|
## 아키텍처 구성 요소
|
|
|
|
### (1) API 계층
|
|
- **FastAPI**:
|
|
- 클라이언트와 직접 상호작용하는 API 레이어.
|
|
- 비동기 요청을 처리하고 데이터 유효성 검사를 수행.
|
|
- **주요 엔드포인트**:
|
|
- `/start-inference/`: CSV 및 모델 리스트 파일 업로드 후 추론 작업 시작.
|
|
- `/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] ` |