모델 efficiency를 측정하다가, 아래와 같은 수치가 필요해져서 한번 정리해놓는다.
# GPU memory consumption
def to_MB(a):
return a/1024.0/1024.0
print(f"After model to device: {to_MB(torch.cuda.memory_allocated()):.2f}MB")
위에서 출력된 nividia-smi 와 다르니 주의해아한다. 왜냐면 nvidia-smi는 reserved memory를 반환하고, 위 코드는 allocated memory를 반환하기 때문이다. 흔히 reserved memory는 캐시까지 포함한 메모리를 일컫는다고 한다.
# Parameter count
이건 단순 trainable parameter의 개수를 count 해주는 코드이다.
model_parameters = filter(lambda p: p.requires_grad, model.parameters())
params = sum([np.prod(p.size()) for p in model_parameters])
# Training/Inference time
아래와 같이 python의 time 모듈로 측정하지 않도록 주의하자.
s = time.time()
_ = model(dummy_input)
curr_time = (time.time()-s )*1000
그 대신 아래와 같이 torch.cuda.Event를 이용하면 된다.
starter, ender = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) # Time evaluation
starter.record()
# 측정하고 싶은 모델 프로세스
ender.record()
torch.cuda.synchronize()
curr_time = starter.elapsed_time(ender)
print(curr_time)
이 글을 보는 사람들의 연구와 paper 작성을 응원합니다 !!! 🔥
반응형
'PyTorch👩🏻💻' 카테고리의 다른 글
[PyTorch] 데코레이터랑 친해지기 @torch.jit.script / @torch.no_grad.. (0) | 2023.07.29 |
---|---|
[PyTorch] mmcv 설치하기 / cuda 버전에 맞게 mmcv downgrade하기 / mmcv._ext error 해결 (4) | 2023.05.19 |
[PyTorch] nvcc가 안될 때 ~/.bashrc 수정해 환경변수 설정하기 (1) | 2023.03.27 |
[PyTorch] Multi-GPU 사용하기 (torch.distributed.launch) (0) | 2022.06.10 |
[TIL] OpenPCDet 가상환경 세팅하기 (cuda11.1 + spconv) (1) | 2022.06.10 |