(self, iterable, print_freq, header=None, logger=None)
| 233 | self.meters[name] = meter |
| 234 | |
| 235 | def log_every(self, iterable, print_freq, header=None, logger=None): |
| 236 | if logger is None: |
| 237 | print_func = print |
| 238 | else: |
| 239 | print_func = logger.info |
| 240 | |
| 241 | i = 0 |
| 242 | if not header: |
| 243 | header = '' |
| 244 | start_time = time.time() |
| 245 | end = time.time() |
| 246 | iter_time = SmoothedValue(fmt='{avg:.4f}') |
| 247 | data_time = SmoothedValue(fmt='{avg:.4f}') |
| 248 | space_fmt = ':' + str(len(str(len(iterable)))) + 'd' |
| 249 | if torch.cuda.is_available(): |
| 250 | log_msg = self.delimiter.join([ |
| 251 | header, '[{0' + space_fmt + '}/{1}]', 'eta: {eta}', '{meters}', |
| 252 | 'time: {time}', 'data: {data}', 'max mem: {memory:.0f}' |
| 253 | ]) |
| 254 | else: |
| 255 | log_msg = self.delimiter.join([ |
| 256 | header, '[{0' + space_fmt + '}/{1}]', 'eta: {eta}', '{meters}', |
| 257 | 'time: {time}', 'data: {data}' |
| 258 | ]) |
| 259 | MB = 1024.0 * 1024.0 |
| 260 | |
| 261 | for obj in iterable: |
| 262 | data_time.update(time.time() - end) |
| 263 | yield obj |
| 264 | # import pdb; pdb.set_trace() |
| 265 | iter_time.update(time.time() - end) |
| 266 | if i % print_freq == 0 or i == len(iterable) - 1: |
| 267 | eta_seconds = iter_time.global_avg * (len(iterable) - i) |
| 268 | eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) |
| 269 | if torch.cuda.is_available(): |
| 270 | print_func( |
| 271 | log_msg.format( |
| 272 | i, |
| 273 | len(iterable), |
| 274 | eta=eta_string, |
| 275 | meters=str(self), |
| 276 | time=str(iter_time), |
| 277 | data=str(data_time), |
| 278 | memory=torch.cuda.max_memory_allocated() / MB)) |
| 279 | else: |
| 280 | print_func( |
| 281 | log_msg.format(i, |
| 282 | len(iterable), |
| 283 | eta=eta_string, |
| 284 | meters=str(self), |
| 285 | time=str(iter_time), |
| 286 | data=str(data_time))) |
| 287 | i += 1 |
| 288 | end = time.time() |
| 289 | total_time = time.time() - start_time |
| 290 | total_time_str = str(datetime.timedelta(seconds=int(total_time))) |
| 291 | print_func('{} Total time: {} ({:.4f} s / it)'.format( |
| 292 | header, total_time_str, total_time / len(iterable))) |
no test coverage detected