A. 실행 프로세스
(실험 하고자 하는 GPU/Model 조합 전부에 대해 각각 실행해야함)
- compute time.py
1. compute time.py 파일을 실행하여 실험을 진행하고자 하는 GPU/Model 환경에서 각 배치 크기에 대해 compute time을 측정하여 txt 파일로 저장 (1, 10, 20 ... 등 일부 배치 크기에 대해서만 실행됨)
- compute time predict.ipynb
2. compute time predict.ipynb 파일에 compute time.py에서 생성된 txt 파일을 업로드하여 실행한다.
1에서 측정된 일부 배치 크기의 compute time을 사용하여 regression 모델을 실행하고, 모든 배치 (1~100) 크기에 대해 compute time을 예측한다.
3. 모든 배치 크기에 대해 compute time 정보를 2에서 얻었기 때문에 해당 정보를 사용하여 각각의 배치 크기에 맞는 request rate를 계산한다.
(각각의 배치 크기에 맞는 request rate는 해당 배치 크기만큼 요청이 들어오는 시간과 처리되는 시간이 같은 시점이다.
ex. 배치 크기가 10이고 해당 배치 크기에 대해 2에서 예측된 compute time이 10초라 가정하면 10초 동안 10개의 요청이 들어오는 상황에서 최적이다. => 배치 크기 10의 적정 request rate : 1개/초)
4. 배치 크기가 주어졌을때 적정 request rate 정보를 3에서 얻었기 때문에, 이를 역으로 활용하여 request rate정보가 주어졌을때 이에 맞는 배치 크기를 결정한다. 이때 그래프에서 최대 지점까지가 해당 서버에서 감당할 수 있는 request rate 한계 지점이다.
5. 위의 정보를 txt 파일로 저장한다.
- triton inference server
6. triton server를 실행하기에 앞서 compute time predict.ipynb에서 생성된 txt 파일을 서버에 업로드한다.
(이때 txt파일명은 http_server.cc 코드에서 지정되어 있기 때문에 해당 이름으로 설정한다.)
7. http_server.cc 코드에서는 클라이언트가 보내는 요청을 저장하여 현재 요청 비율을 계산한다. 이후 txt파일을 참고하여 현재 요청 비율에 맞는 배치 크기를 결정한다.
8. dynamic_schedular.cc코드에서는 7에서 결정된 배치 크기를 읽어 현재 배치 크기로 변경한다.
B. Evaluation
모든 실험은 실험하고자 하는 GPU/Model 조합에 대해 모두 실행해야함
수정된 triton을 실행하기 위해서는 A의 실행 프로세스를 각각의 GPU/Model에 대해서 실행해야함 -> yj_server에서 진행
기존의 triton을 실행할 때는 각각의 GPU/Model 환경에서 config파일을 수정하여 배치를 고정적으로 사용함 -> yj_server2에서 진행
1. 요청 비율이 동적으로 변하는 상황 (twitter load 사용)
수정된 triton을 사용하여 배치 크기가 동적으로 변경될때의 결과와 배치 크기가 4, 8, 16 등으로 고정되어 있을때의 결과를 비교
-> 예상결과 : 수정된 triton server는 요청이 적은 시점에는 배치 크기를 줄이고 요청이 많은 시점에는 배치 크기를 늘려서 모든 상황에서 최적 결과를 보임 하지만 고정된 배치 크기의 결과는 배치가 작은 실험에서 요청이 많이 들어오면 서버가 과부화되고, 배치가 큰 실험에서 요청이 적게 들어오면 queue time이 증가한다.
2. 요청 비율이 정적인 상황
요청 비율이 낮은 상황 / 높은 상황에서
수정된 triton / 배치크기 4,8,16 등으로 고정되어 있을때의 결과를 비교
-> 예상 결과 : 요청 비율이 낮은 상황에서는 수정된 triton의 결과가 배치크기 4와 같이 낮은 배치 크기를 고정으로 사용할 때와 결과가 비슷해야함
요청비율이 높은 상황에서는 수정된 triton의 결과가 배치크기 16와 같이 높은 배치 크기를 고정으로 사용할 때와 결과가 비슷해야함