이미지 처리 모델 최적화 전략 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. 배치 처리
CPU 기준, CLIP + 배치 처리 전략)
🎯 서비스 맥락
- 사용자는 여행이나 일상 사진을 한 번에 20장~100장 업로드
- CPU 환경에서도 충분히 서빙 가능한 시간을 확보할 필요가 있음.
💡 왜 CLIP + CPU 환경에서도 배치 처리가 효과적인가?
항목 | 설명 |
---|---|
✅ 연산 파이프라인 최적화 | CLIP의 이미지 임베딩은 한 장 처리보다 여러 장 처리 시 훨씬 효율적. 내부적으로 병렬 연산 최적화가 적용됨 |
✅ CPU 코어 활용 증가 | 배치로 묶으면 PyTorch 내부 스레드가 병렬로 작동해 CPU의 멀티코어 활용도가 증가 |
✅ 컨텍스트 전환 비용 절감 | 이미지를 하나씩 처리하면 매번 처리 그래프와 메모리 캐시가 재활용되기 어려움. 배치 처리 시 메모리 일관성 유지 |
📊 CLIP CPU 환경 실험 요약
배치 크기 | 총 시간 | 1장당 처리 시간 |
---|---|---|
1 | 8.49초 | 0.0849초 |
16 | 4.27초 | 0.0428초 ✅ |
32 | 3.53초 | 0.0353초 ✅ |
→ 배치 32 기준, 단건 처리 대비 2.4배 빠름
→ GPU 없이도 현실적인 응답 시간 확보 가능
🧩 왜 우리 서비스에 딱 맞나?
- CPU만으로도 배치 처리 시 충분히 빠른 결과 제공 가능
- 서비스 초기, GPU 없이도 저비용 고효율 시스템 설계 가능
- 추후 GPU 확장 시에도 같은 구조로 확장 가능성 보장
2. 캐싱
CPU 기준, CLIP + 캐싱 전략)
🎯 서비스 맥락
- 우리 서비스는 모델의 임베딩과 태깅 기능을 분리함으로써, 동일한 임베딩을 활용해 중복/유사 사진 감지까지 병렬적으로 수행할 수 있음
- 임베딩 캐싱을 통해 실시간 사용자 요청에도 효율적으로 대응할 수 있는 구조를 제공
💡 이미지 임베딩 결과 캐싱
- 내용: 같은 이미지를 다시 분석할 때 CLIP 임베딩을 재계산하지 않도록 결과를 저장해두는 전략.
- 어디에 활용되는가:
- 유사 사진 검색
- 태그 유사도 기반 추천
- 클러스터링 등 임베딩 기반 후처리
- 장점 : CLIP은 CPU에서 100장 처리에 수 초가 걸림 → 재사용으로 누적 시간 절감 효과 큼
💡 태그 텍스트 임베딩 캐싱
- 내용: CLIP의
encode_text()
결과인 태그 임베딩을 한 번만 계산해서 재사용 - 어디에 활용되는가:
- 이미지-태그 유사도 계산 (
image_embedding @ tag_embeddings.T
)
- 이미지-태그 유사도 계산 (
- 장점:
- 태그는 고정되어 있으므로 텍스트 임베딩은 한 번만 생성 후 캐싱하면 됨
- 추론 시간 단축 + 메모리 효율 개선
🧩 왜 우리 서비스에 딱 맞나?
- 이미지 임베딩 캐시: 유사 사진 분석, 태깅 등에서 동일 이미지 중복 계산 제거 → 실시간 반응성 향상
- 텍스트 임베딩 캐시: 태깅 연산에서 매번 텍스트 임베딩을 생성하지 않아도 됨 → 처리 시간 단축