ddps-lab / edge-inference

Evaluation of inference model performance on edge devices
Apache License 2.0
2 stars 3 forks source link

flask 서버에 yolo v5 모델 올리기 #67

Open kh3654po opened 1 year ago

kh3654po commented 1 year ago

현재 yolo v5 모델을 flask 서버에 띄우는것을 성공해서 테스트한 결과 공유드립니다. 아래와 같은데 xavier2 장비에 서버를 2개 열었을때 추론시간이 1개 열었을때 추론시간보다 느려진것을 볼 수 있습니다. 다른 모델을 테스트 할 때는 차이가 보이지 않았는데 원인을 파악해봐야 할 거 같습니다.

yolo v5 1개 요청

yolo v5 10개 요청

kmu-leeky commented 1 year ago

석현아. 수치 관련해서 확인을 했으면 하는데, 10개 요청의 경우 글로 서술한 시간과 캡쳐를 한 시간이 서로 매치가 안되네. 캡쳐 할때 값만 보이지말고 실제 실행 명령어까지 포함해서 해주면 어떤 시나리오인지 파악할수 있어서 도움이 될것 같아. 앞으로는 앞뒤 전후 명령어도 함께 보여주면 좋겠다

그리고 지금 보면 TX2 가 나노보다 느린것으로 판단되는데 그 이유를 추측해 볼수 있을까?

kh3654po commented 1 year ago

yolo v5를 tf로 실행해본 결과 공유드립니다.

xavier2 장비 2개의 서버에 요청 10개를 전송

  • 서버 2대에 총 10개 즉 각각의 서버에 5개의 요청을 전송
  • 평균 추론 시간은 0.09초 image image

xavier2 장비 1개의 서버에 요청 10개를 전송

  • 서버 1대에 총 10개 요청 전송
  • 서버 2대일 때 보다 평균 0.01초정도 빠름 image image

tx2 장비에 요청 10개 전송

  • 1대의 서버에 10개 요청 전송
  • 평균 추론시간 0.13초 -> 이전의 느렸던 추론시간이 tf로 전환 후 사라졌습니다. image image

현재 추론 서버에 yolo가 추가되면서 코드구조 변경이 필요해졌습니다. 현재의 구조에서는 nano1에서 yolo만 로드하는게 안돼서 mobilenet과 같이 로드해 측정해보려다가 실패했습니다. nano에서는 서버 코드를 리팩토링한 후에 nano에서 테스트해보고 바로 결과 공유해드리겠습니다. 완료된 후에는 서버에 nlp 모델도 추가하겠습니다

kh3654po commented 1 year ago

코드 리팩토링을 마치고 테스트해본 결과 yolo v5는 nano1 장비에서 메모리 부족으로 로드하지 못했습니다. nano에서는 현재 mobilenet, mobilet v2만 사용가능합니다.

kmu-leeky commented 1 year ago

석현아. TF 를 사용하면서 전반적으로 성능이 안정적으로 된게 보이네. 이전에 Torch 에서 실험을 할때도 요청들을 정해진 시간내에 균등하게 보냈던거였나? 아마도 지금 TF 에서는 10개 정도의 요청이 0.1초 간격으로 발생하다보니, 요청이 쌓이지않고 바로바로 처리가 되서 큰 차이를 보이지는 않는것 같아. 서빙 프로세스 갯수의 영향을 본다면 모델 갯수를 조금 더 늘려보는것도 좋겠다.

나노에서는 모델의 제약이 큰듯하니 그냥 모바일넷만 처리하게끔 실험 시나리오를 잡아도 괜찮을것 같아.

kh3654po commented 1 year ago

넵 이전의 실험에서도 요청들을 정해진 시간내에서 균등하게 보냈습니다. 10개의 요청과 100개의 요청의 추론시간 차이를 확인해본 결과 서버를 1개 실행 했을 경우는 10개의 요청과 100개의 요청의 추론시간은 같았습니다. 다만 xavier2 장비에서 서버 2개를 실행하고 요청을 보냈을 때 추론시간이 느려진 것을 확인했습니다. jtop으로 모니터링 해본 결과 cpu, mem은 여유가 있고 서버의 개수에 따라 큰 차이를 보이지 않았습니다. gpu 같은 경우는 둘다 100% 활용하는데 이 점으로 보아 2개의 서버를 사용할 때는 컨텍스트스위칭으로 인한 오버헤드로 추론 시간이 늘어난 것으로 보입니다. 이전에 실험 했을 때 2개의 서버가 더 빨랐는데 그때와의 차이는 추론을 병렬로 하냐 하지 않느냐 차이입니다. 앞으로 실험을 할때는 모든 장비에서 1개의 서버만 사용하는게 좋을거 같습니다. 앞서 말씀드린 테스트 결과는 23/03/22 weekly report에 기록했습니다.

kmu-leeky commented 1 year ago

요청을 100개까지 보내봤구나. "이전에 실험 했을 때 2개의 서버가 더 빨랐는데 그때와의 차이는 추론을 병렬로 하냐 하지 않느냐 차이" 이전에는 모바일네에서 할때여서 더 빨랐던 측면도 있지 않을까? 지금은 object detection 이고. 그리고 추론을 병렬로 하는건 프로세스가 2개라면 무조건 병렬로 하는것이지 않아? 모바일넷 (이전), yolo (지금) 상관없이?