병목 요소 식별 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. CLIP 예상 병목 지점 식별
단계 | 설명 | 병목 원인 | 영향 |
---|---|---|---|
① 입력 이미지 로딩 | 서버로부터 전달받은 URL로 이미지 로딩 | - 네트워크 지연- 외부 서버 상태 의존- 동시 요청 시 연결 대기 발생 | 이미지 처리 전체 파이프라인 지연의 시작점처리 속도 변동성 발생 |
② 이미지 전처리 | CLIP 모델 추론에 활용하기 위해 이미지 리사이즈 및 정규화 | - PIL or torchvision 변환 속도 제한- 배치 크기 증가 시 일시적 메모리 사용량 증가 | 연속 추론 시 버퍼링 지연RAM 점유율 일시 상승 가능 |
③ CLIP 모델 이미지 임베딩 | CLIP 모델을 활용해 이미지 → 벡터 임베딩 | - PyTorch 모델 실행의 CPU 병렬 연산- torch.set_num_threads() 설정 누락 시 CPU 과점유 | 멀티 태스크 동시 수행 시 CPU 자원 경합일시적인 처리 시간 증가 |
④ 중복 사진 필터링 | 이미지 임베딩 간 코사인 유사도 분석 및 그룹화 | - cosine_similarity의 전체 임베딩 비교 (N x N 연산)- DBSCAN 클러스터링의 거리 계산 부하 | 이미지 수 증가 시 계산량 급증처리 시간 선형 이상으로 증가 가능 |
⑤ 저품질 사진 필터링 | CLIP IQA 프롬프트와 유사도 비교 | - 텍스트 프롬프트 수가 많을 경우 cosine_similarity 연산량 증가- numpy 변환/복사 오버헤드 | 기준 프롬프트 수에 비례하여 성능 저하텍스트 임베딩 고정시 캐싱 필요 |
⑥ 카테고리 분류 | 이미지 클러스터링 후 카테고리 텍스트 임베딩과 유사도 비교 | - KNN 기반 군집화 시 이웃 계산 부하- 대표 벡터 평균 계산 시 메모리 복사 | 유사도 기반 분류 정확도는 높지만 처리 시간 증가배치 수 증가 시 확연히 느려짐 |
⑦ 하이라이트 스코어링 | Linear Probing 방식으로 이미지마다 하이라이트 스코어링 | - 선형 회귀 자체는 경량이나, 예측 대상 수가 많을 경우 batch 처리 필요- 미처리된 경우 torch → numpy 변환 비용 발생 | 대량 이미지 입력 시 예측 병렬화 필요전처리 단계보다 가볍지만 누적 부하 가능 |
[ 요약 ]
- 핵심 병목 지점은 일반적으로
③ 이미지 임베딩
,④ 중복 필터링
,⑥ 카테고리 분류
에서 발생할 가능성이 높음 - 특히 DBSCAN, cosine_similarity (NxN), 군집 기반 평균 연산은 입력 수 증가에 따라 처리 시간이 선형 이상으로 늘어나는 연산이라 최적화 우선 대상
- 반대로 Linear Probing, IQA는 상대적으로 고정된 연산이기 때문에 확장이 쉬움
2. 예상 병목 지점 식별
단계 | 설명 | 병목 원인 | 영향 |
---|---|---|---|
① GCS 이미지 다운로드 | GCS URL 이용 | 순차적 HTTP 요청, 네트워크 지연 | 이미지 수 증가 시 전체 대기 시간 급증 |
② 얼굴 인식 (HOG) | 이미지당 얼굴 탐지 | CPU 단일 연산, 반복 호출 | 이미지 해상도 및 얼굴 수에 따라 지연 |
③ 임베딩 추출 | 얼굴 → 128D 벡터 | Numpy 기반 연산 부하 | 탐지된 얼굴 수에 비례하여 증가 |
④ 거리 계산 (cosine) | N x N pairwise 계산 |
O(n²) 복잡도, 메모리 부담 |
사진 장수 증가 시 처리 시간 급증 |
⑤ DBSCAN 클러스터링 | 거리 기반 그룹화 | 연산량 + 메모리 사용 ↑ | 하이퍼파라미터 설정에 민감 |
⑥ GCS 업로드 | 결과 이미지 저장 및 업로드 | 순차적 HTTP PUT 요청 | 이미지 수만큼 반복 요청, 대기 발생 |
3. stable diffusion 병목 요소 식별
단계 | 설명 | 병목 원인 | 영향 |
---|---|---|---|
① 입력 이미지 로딩 및 base64 변환 | GCS → 이미지 로컬 로딩 → base64 인코딩 | - 고해상도 이미지 I/O- CPU 연산 기반 인코딩 | 초기 요청 준비 시간 증가 |
② Gemini 프롬프트 생성 | 텍스트 프롬프트 생성 (Gemini API 호출) | API 응답 지연 (네트워크/API 지연) | 전체 처리 시간에 비례 영향 |
③ Stable Diffusion 서버 요청 (POST) | GPU 서버로 스타일 변환 요청 | 네트워크 RTT + JSON payload 전송 시간 | T4 서버 외부 요청 시 병목 발생 가능 |
④ Stable Diffusion 연산 (실제 생성) | GPU에서 이미지 변환 | 모델 크기, ControlNet 모듈 수, 해상도 | 전체 시간의 대부분 |
⑤ base64 응답 디코딩 및 저장 | 응답 이미지 base64 → 디코딩, 저장, GCS 업로드 | CPU 연산 + I/O 지연 | 마지막 단계 지연 가능 |