[멀티 프로세스] GPU 서버 워커 프로세스 3→2 감축 테스트 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

1. 개요

  • 이전 병목 식별 테스트를 통해 멀티 프로세스 환경에서 cpu, gpu 사용량이 매우 높은 것 확인
    • 병목: 리소스 경합 문제
  • gpu 서버의 워커 프로세스 3 → 2로 줄여서 경합 완화하고자 함

2. 테스트

a. gpu 서버 워커 프로세스 2개

가. k6 report

멀티gpuimage

나. 지연 시간 측정

gpu worker 3 gpu worker 2 비교
P95(s) 17 12 29.41%
gpu 싱글 프로세스 gpu 워커 프로세스 3개 gpu 워커 프로세스 2개 비교 (워커 2개 기준)
디코딩 단일: 15.78 ms / 최소: 7.27 ms / 평균: 24.80 ms / 최대: 278.22 ms 단일: 16.18 ms / 최소: 6.86 ms / 평균: 30.47 ms / 최대: 380.92 ms 최소값: 7.07 ms / 평균값: 24.82 ms / 최대값: 378.64 ms 단일 프로세스 = 워커 2 < 워커 3
로딩 단일: 232.66 ms / 최소: 10.08 ms / 평균: 204.48 ms / 최대: 541.40 ms 최소: 1.09 ms / 평균: 105.82 ms / 최대: 996.07 ms 최소값: 9.61 ms / 평균값: 89.08 ms / 최대값: 981.62 ms 워커 2 < 단일 프로세스 < 워커 3
로딩+디코딩 단일: 232.66 ms / 최소: 76.89 ms / 평균: 300.36 ms / 최대: 647.85 ms 단일: 238.69 ms / 최소: 1.01 ms / 평균: 320.69 ms / 최대: 985.95 ms 최소값: 1.00 ms / 평균값: 421.73 ms / 최대값: 956.48 ms 단일 < 워커 3 < 워커 2 * 디코딩, 로딩 각각의 평균은 워커 2가 낮으나, 분산이 커서 전체 평균은 큰 것으로 예상
전처리 단일: 63.96 ms / 최소: 36.01 ms / 평균: 105.93 ms / 최대: 641.05 ms 단일: 66.06 ms / 최소: 1.04 ms / 평균: 262.54 ms / 최대: 991.44 ms 최소값: 38.84 ms / 평균값: 227.55 ms / 최대값: 807.82 ms 단일 프로세스 < 워커 2 < 워커 3
임베딩 단일: 183.38 ms / 최소: 66.22 ms / 평균: 218.94 ms / 최대: 562.11 ms 단일: 183.63 ms / 최소: 1.00 ms / 평균: 466.93 ms / 최대: 999.76 ms 최소값: 1.00 ms / 평균값: 455.31 ms / 최대값: 999.15 ms 단일 프로세스 < 워커 2 < 워커 3
  • 워커 2개로 제한 후, 디코딩, 로딩 각각의 평균은 개선됨. 단일 프로세스 수준이거나 그보다 지연 시간 짧음
  • 그러나 요청 간 처리 시간 분산이 높아 ‘로딩+디코딩’ 합산 평균은 높음
  • 전처리, 임베딩은 단일 프로세스 대비 지연 시간이 크게 증가함
  • 개선점
    • 요청 간 처리 시간 분산이 높은 이유 탐색하여 개선
    • 전처리, 임베딩 최적화

다. 리소스 사용량 측정

멀티gpu1image 1

gpu 서버 리소스 사용량 (워커 2 기준, 나머지 자료는 이전 글에 첨부)

gpu cpu gpu mem cpu mem
워커 2 (%) 97.46 85.95 25.61 53.32
워커 3 (%) 98.9 91.73 32.85 66.59
싱글 (%) 86.96 80.06 33.23 53.07
비교 싱글 < 워커2< 워커3 싱글 < 워커2< 워커3 싱글 < 워커2< 워커3 싱글 = 워커2< 워커3
  • 워커를 2개로 제한한 후 gpu, cpu 사용량이 완화됨
  • 연산량이 감축되었기 때문
    • 근거: gpu mem은 연산 실행될 때 증가하는데 gpu mem 사용량 감소함
  • 의문점: 싱글 프로세스 대비 워커 2개일 때 cpu mem이 크게 증가하지 않음
    • 모델이 2개 로딩되었는데 왜 메모리 사용량이 크게 늘지 않았는지

3. 결론 (추가 테스트 및 진행 방향)

  • 아직 gpu 리소스 사용량이 너무 높음
  • cpu 서버의 워커도 2개로 제한하여 두 서버의 워커 수를 맞춰 요청량과 처리 속도를 비슷한 수준으로 조정해보고 속도, 리소스 사용량 체크