[멀티 프로세스] CPU‐GPU 서버 모두 워커 프로세스 2 테스트 - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. 개요
- gpu 서버의 워커 프로세스를 3 → 2개로 줄인 결과, 17s → 12s로 P95가 감소
- 그러나 여전히 gpu 사용량이 높아 gpu 리소스 경합 상태
- 이에 cpu 서버의 워커 프로세스도 2개로 맞춰서 너무 많은 요청 처리로 인해 경합 상태가 발생하는 현상을 완화시키고자 함
2. 테스트: cpu - gpu 서버 모두 워커 프로세스 2개
10:18-10:27: cpu-gpu server worker process 2
a. k6 report
cpu worker: 2, gpu worker: 2
cpu worker: 3, gpu worker: 2
b. 지연 시간
worker 수 | cpu:3, gpu:2 | cpu:2, gpu:2 | 비교 |
---|---|---|---|
P95(s) | 12 | 10 | 16.67% 단축 |
avg | 2 | 3 | 1.5% 증가 |
- cpu 워커 수도 2개로 제한하여 요청량을 제한하여 리소스 경합 상태가 완화됨
- 이로 인해 경합 심화로 인한 outlier는 감소
- 그러나 avg 증가함
- 들어오는 요청 자체는 그대로인데 워커를 줄여서 처리 병렬성 감소
- gpu 서버 측면에서는 경합 완화이더라도 categories 요청 처리는 cpu 서버에서만 진행됨.
- 그런데 cpu 워커 감소로 categories 요청 처리까지 병렬성 제한함
- gpu 서버 embedding 경합 완화의 효과(긍정)와 cpu 서버 categories 처리 속도 제한(부정)을 동시에 가짐
gpu 싱글 프로세스 | gpu 워커 프로세스 2개 (cpu 워커 3개) | cpu gpu 모두 워커 프로세스 2개 | 비교 | |
---|---|---|---|---|
디코딩 | 단일: 15.78 ms / 최소: 7.27 ms / 평균: 24.80 ms / 최대: 278.22 ms | 최소값: 7.07 ms / 평균값: 24.82 ms / 최대값: 378.64 ms | 최소값: 6.99 ms / 평균값: 22.82 ms / 최대값: 318.49 ms | cpu2<cpu3<single |
로딩 | 단일: 232.66 ms / 최소: 10.08 ms / 평균: 204.48 ms / 최대: 541.40 ms | 최소값: 9.61 ms / 평균값: 89.08 ms / 최대값: 981.62 ms | 최소값: 9.89 ms / 평균값: 70.68 ms / 최대값: 887.73 ms | cpu2<cpu3<single |
로딩+디코딩 | 단일: 232.66 ms / 최소: 76.89 ms / 평균: 300.36 ms / 최대: 647.85 ms | 최소값: 1.00 ms / 평균값: 421.73 ms / 최대값: 956.48 ms | 최소값: 84.90 ms / 평균값: 216.89 ms / 최대값: 961.73 ms | cpu2<cpu3<single |
전처리 | 단일: 63.96 ms / 최소: 36.01 ms / 평균: 105.93 ms / 최대: 641.05 ms | 최소값: 38.84 ms / 평균값: 227.55 ms / 최대값: 807.82 ms | 최소값: 35.77 ms / 평균값: 208.62 ms / 최대값: 765.75 ms | single<cpu2<cpu3 |
임베딩 | 단일: 183.38 ms / 최소: 66.22 ms / 평균: 218.94 ms / 최대: 562.11 ms | 최소값: 1.00 ms / 평균값: 455.31 ms / 최대값: 999.15 ms | 최소값: 1.01 ms / 평균값: 448.39 ms / 최대값: 998.20 ms | single<cpu2<cpu3 |
- cpu - gpu 워커 수를 맞추지 않았을 때는 디코딩, 로딩 각각의 시간은 줄었으나 경합 상태로 인해 outlier 증가해 로딩+디코딩 시간 증가했음
- cpu 워커 수 2개로 제한한 후, 리소스 경합이 완화되어 로딩+디코딩 처리 시간이 싱글 프로세스(경합 매우 적은)보다 작아짐
- 전처리, 임베딩 역시 지연시간이 완화되었으나, 추가적인 최적화 가능성 확인해볼만 함
c. 리소스 사용량
- 위에서 지연 시간이 보인 양상을 리소스 사용량을 기반으로 설명할 수 있음:
- 로딩 & 디코딩 시간 완화: cpu 리소스에 여유가 생겨서 경합 해결
- 전처리, 임베딩 시간 완화되지 않은 이유: gpu 기반 테스크는 gpu 사용률이 현재 max이기 때문에 경합이 발생하고 있어 최적화가 어렵다
3. 결론: 최종 결정 - cpu, gpu worker process 2개씩
- 최종 멀티 프로세스 구조를 아래와 같이 선정했다:
- cpu 서버: gunicorn 기반 워커 프로세스 2개
- gpu 서버: uvicorn 기반 워커 프로세스 2개
- 전처리 작업을 gpu에서 하는 버전으로 테스트했는데, 사이먼으로부터 cpu에서 전처리하는 버전을 받아서 재테스트해볼만 함
- cpu 리소스 여유가 있어서 속도 향상이 기대됨
- 전처리 작업이 cpu로 이동하면 gpu 경합이 완화되어 임베딩 작업 역시 속도 향상될 것 기대됨