이미지 처리 모델 최적화 전략 - 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)
  • 장점:
    • 태그는 고정되어 있으므로 텍스트 임베딩은 한 번만 생성 후 캐싱하면 됨
    • 추론 시간 단축 + 메모리 효율 개선

🧩 왜 우리 서비스에 딱 맞나?

  • 이미지 임베딩 캐시: 유사 사진 분석, 태깅 등에서 동일 이미지 중복 계산 제거 → 실시간 반응성 향상
  • 텍스트 임베딩 캐시: 태깅 연산에서 매번 텍스트 임베딩을 생성하지 않아도 됨 → 처리 시간 단축