vision/m4/utils/training/timer.py (47 lines of code) (raw):

import datetime import time import torch def format_secs_to_time(time_delta): """converts seconds delta as generated by 2 snapshots of time.time() into hh:mm:ss""" return str(datetime.timedelta(seconds=time_delta)).split(".")[0] def format_secs_to_sec_fractions(time_delta): """converts seconds delta as generated by 2 snapshots of time.time() into ss.msec""" return f"{time_delta:0.2f}" def format_secs_to_sec(time_delta): """converts seconds delta as generated by 2 snapshots of time.time() into ss""" return int(time_delta) class Timer(object): def __init__(self): self.start_time = None self.last_time = None def start(self): self.start_time = time.time() self.last_time = self.start_time def delta(self): """delta since last delta call""" now = time.time() delta = now - self.last_time self.last_time = now return delta def elapsed(self): return time.time() - self.start_time def stop(self): elapsed = self.elapsed() self.start_time = None self.last_time = None return elapsed class DeviceAgnosticTimer(object): def __init__(self): self.is_cuda_available = torch.cuda.is_available() def start(self): if self.is_cuda_available: self.start_event = torch.cuda.Event(enable_timing=True) self.end_event = torch.cuda.Event(enable_timing=True) self.start_event.record() else: self.start_event = time.time() def stop(self): if self.is_cuda_available: self.end_event.record() torch.cuda.synchronize() diff = self.start_event.elapsed_time(self.end_event) / 1000 else: self.end_event = time.time() diff = self.end_event - self.start_event return diff