gpu 서버에서 인물 분류 속도 최적화 시도 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. 개요
- cpu 서버에서 15.08초 걸렸던 인물 분류 기능이 gpu 서버에서 1.91초로 7.9배 단축됨. 추가적인 속도 최적화 방안 탐색하고자 함.
2. 도입한 기법
a. 코사인 거리 → 코사인 유사도
가. 기존 방식
scikit-learn
의cosine_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을 사용하였을 때, 클러스터 결과가 빈 값이 도출되는 것을 확인. 이에 우선순위가 높은 작업들을 먼저 처리하기 위해 추가 원인 탐색 보류.