gpu 서버에서 인물 분류 속도 최적화 시도 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. 개요

  • cpu 서버에서 15.08초 걸렸던 인물 분류 기능이 gpu 서버에서 1.91초로 7.9배 단축됨. 추가적인 속도 최적화 방안 탐색하고자 함.

2. 도입한 기법

a. 코사인 거리 → 코사인 유사도

가. 기존 방식

  • scikit-learncosine_distances 사용
  • 거리 기반: 값이 작을수록 유사
  • CPU 연산으로 처리됨

나. 변경 후

  • torch.nn.functional.cosine_similarity 사용
  • 유사도 기반: 값이 클수록 유사
  • GPU 연산으로 전환 (PyTorch 텐서 연산)

다. 기대 효과

  • CPU → GPU 전환으로 거리 계산 병렬화
  • 특히 얼굴 수가 많을수록 (O(n^2) 연산량) 가속 효과 커짐

b. DBSCAN (scikit-learn) → cuML DBSCAN (GPU)

가. 기존 방식

  • sklearn.cluster.DBSCAN 사용
  • 코사인 거리 + CPU 기반
  • 대량 샘플에서 느림 (수천 개 이상부터 병목)

나. 변경 후

  • cuml.cluster.DBSCAN 사용 (RAPIDS cuML)
  • 동일한 eps, min_samples 조건
  • 내부적으로 GPU에서 벡터 거리 계산 및 군집화 수행

다. 기대 효과

  • DBSCAN거리 기반 탐색을 GPU 병렬화
  • n_samples가 많을수록 10배 이상의 속도 향상 가능
  • cuML은 CUDA 기반 라이브러리이므로 GPU가용 자원을 적극 활용

라. 추가로 설치한 것

pip install cuml-cu11 --extra-index-url=https://pypi.nvidia.com
  • cuML을 이용해서 DBSCAN을 하기 위해 cuml 설치

    • 버전 정보:
  • 기존에 cuML 이용 시, cuda 런타임 라이브러리(libcudart.so.11.0)을 찾지 못해 cuML이 gpu 초기화 불가.

    → cuda toolkit 11.0 설치 및 환경변수 설정

    sudo apt update
    sudo apt install nvidia-cuda-toolkit
    

마. 실제 결과

  • cnML DBSCAN을 사용하였을 때, 클러스터 결과가 빈 값이 도출되는 것을 확인. 이에 우선순위가 높은 작업들을 먼저 처리하기 위해 추가 원인 탐색 보류.