ddps-lab / edge-inference

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

기존 실험 metric 결과와 차이점 확인 및 추가 실험을 통한 metric 결과 값 수정 #52

Closed jungae-park closed 2 years ago

jungae-park commented 2 years ago

각 edge 장비 재설치 후 gpu에 접근을 하며 추론하는지 확인을 하던 중에 중요한 사실을 놓치고 있어 보고드립니다.

xavier,nano는 재설치를 진행하면 jetpack을 같이 설치해주어 cuda, cudnn이 설치되고 별다른 조치 없이 gpu에 접근이 가능하였고, 추론 하여 결과 metric을 정리하였었습니다. 그러나 다른 장비들과 달리 tx1, tx2 장비는 재설치 후 jetpack이 자동으로 설치되지 않아 gpu에 접근하지 못하고 있었던 사실을 확인하였습니다.

그래서 tx1 장비에 추가로 jetpack을 수동으로 설치 후, gpu에 접근 가능한 것을 확인하여 추론을 해보았는데 결과가 이전과 많이 달랐습니다.

[이전 실험 결과]

***** TF-FP32 matric *****
user_batch_size = 1
accuracy = 0.93 
model_load_time = 58.66154599   
dataset_load_time = 1.593460083 
inference_time = 208.2208807    
inference_time(avg) = 0.2068657527  
IPS = 3.724726716   
IPS(inf) = 4.83405294

[현재 재설치 및 jetpack 추가 설치 후 실험 결과]

***** TF-FP32 matric *****
user_batch_size = 1
accuracy = 0.93
model_load_time = 59.926010608673096
dataset_load_time = 1.6062180995941162
inference_time = 99.50904369354248
inference_time(avg) = 0.09781955647468567
IPS = 6.209582934647488
IPS(inf) = 10.222904662819504

성능 차이가 확실히 달라졌으며, 기존 실험 결과를 분석하는 과정에서 세 번째 라인의 의미처럼 tx1,tx2 장비보다 nano 장비의 flops가 낮지만 IPS 값이 높은 이유가 설명이 되지 않았고 이상하였는데 tx1,tx2 장비가 gpu에 제대로 접근을 하지 못해 생긴 것으로 판단됩니다. image

다시 mobilenet v1 모델 추론 결과를 살펴보니 nano 장비보다 tx2의 아키텍처와 장비 스펙의 Flops이 더 좋은 만큼 성능 결과도 그에 맞게 달라진 것을 확인하여 다른 모델들도 배치 추론을 다시하여 metric 결과 값을 수정하려고 합니다.

한 가지 문제점은 tx1 장비의 경우도 jetpack을 수동으로 설치해주어 cuda,cudnn을 통해 gpu에 접근 및 추론이 가능하도록 해야하는데, tx1 장비는 이미 내장되어 있는 disk 용량이 16GB로 jetpack을 추가로 설치하기에 용량이 부족합니다. 그래서 외장 sd card (128GB)를 붙여 root에 설치되는 라이브러리를 외장 sd card에 설치하고 라이브러리 PATH를 변경시켜 사용하도록 시도해보고 있습니다.

그래서 아래와 같이 작업을 해보려고 합니다.

  1. tx2 장비의 모델별 배치 추론 결과 다시 정리
  2. tx1 장비 + 외장 sd-card 추가 및 jetpack 설치 후 배치 추론 결과 다시 정리 (xavier, nano 장비에서의 모델별 배치 추론은 gpu를 사용하며 배치 추론한 것이 확실하여 다시 결과값을 정리하지 않아도 됩니다.)
kmu-leeky commented 2 years ago

오케이 정애야. 잘 발견했네. 요약하면 tx2 의 경우 jetpack 이 설치가 되어이지 않았었고, 그렇다보니 추론시에 gpu 를 제대로 사용하지 않고 있었다는 걸로 예상된다는거지? 혹시 이전 실험을 할때 gpu 사용량등을 확인한적이 있을까? 만약 없었다면 지금 환경에서 jetpack 이 설치된 tx2 에서 gpu 사용량 측정, 설치안된 tx1 에서 gpu 사용량 측정을 해서 비교해보면 좋겠다.

tx1 이 그런 상황이라면 굳이 어렵게 설치하지 않아도 괜찮을것 같아. tx2 가 있기도 하고, tx2 로 측정을 해보고 추가로 필요할것 같으면 진행해보자.

다음 궁금한점은 jetpack 이 어떤 기능을 제공해주는거야? jetpack 이 gpu 에서 추론을 실행하기 위해서 반드시 필요한 장치라면 왜 이전에 jetpack 설치없이 tx2 에서 추론 진행시 아무런 에러가 안났을까? 추론 코드에서 명시적으로 gpu 를 사용하는 부분은 없는건가?

jungae-park commented 2 years ago

네 맞습니다. tx1,tx2 장비가 jetpack이 설치되어 있지 않아 추론시 gpu를 제대로 사용하고 있지 않았습니다. JetPack은 Jeston 전용 OS이고 애플리케이션을 동작하기 위해 필요한 라이브러리를 포함하고 있습니다. (cuda, cudnn,opencv 등) 그런데, tx1과 tx2 장비의 경우는 예전에 출시된 장비이기도하여 필수로 포함되어 설치되는 라이브러리가 다른 장비에 비해 적은 것 같습니다. 이전에는 추론 코드에 gpu 장치를 확인하고 메모리를 할당하여 실행하였는데,

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  tf.config.experimental.set_virtual_device_configuration(gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=0.18*1024)])

이때 추론시 에러가 나지 않아 gpu를 제대로 잘 사용하고 있다고 생각하였으나 아니였던 것 같습니다. 그래서 이전 실험을 할때 gpu를 사용하면서 추론을 했는지 기록 해놓은 메시지가 있는지 찾아보았는데 없었습니다.

jetpack이 설치된 tx2에서 모델 별 배치 추론을 하며 메트릭 결과값을 정리하면서 jetpack이 설치된 tx2에서 gpu 사용량과 jetpack이 설치되지 않은 tx1에서 gpu 사용량을 측정해서 비교해보겠습니다. 그리고 필요시 tx1 장비에 jetpack 설치를 고려해보겠습니다.

kmu-leeky commented 2 years ago

오케이 정애야. tx1 에 설치는 낮은 우선순위로줘도 좋을것 같아. 위의 코드를 보면 if gpus 구문이 있는데, 가능하면 디버깅문을 추가해서 해당 if 문이 실행되는지 else 파트가 실행되는지 보는것도 좋겠다. 우선은 tx2 는 jetpack 설치, tx1 은 설치 X 로 해서 원인 분석 및 성능파악을 하면 좋겠다.

jungae-park commented 2 years ago
kmu-leeky commented 2 years ago

오케이 정애야 잘 확정했다. TX1 는 상대적으로 이전 모델이기도 하니 이제부터는 TX2 위주로 실험 결과를 정리하고 분석하는게 어떨가 싶어.

jungae-park commented 2 years ago

네 교수님 그럼 tx2 장비 위주로 실험 결과를 정리하고 분석해보겠습니다.