(self, iterable, print_freq, header=None)
| 369 | self.meters[name] = meter |
| 370 | |
| 371 | def log_every(self, iterable, print_freq, header=None): |
| 372 | i = 0 |
| 373 | if not header: |
| 374 | header = '' |
| 375 | |
| 376 | start_time = time.time() |
| 377 | end = time.time() |
| 378 | iter_time = SmoothedValue(fmt='{avg:.6f}') |
| 379 | data_time = SmoothedValue(fmt='{avg:.6f}') |
| 380 | space_fmt = ':' + str(len(str(len(iterable)))) + 'd' |
| 381 | if torch.cuda.is_available(): |
| 382 | log_msg = self.delimiter.join([ |
| 383 | header, |
| 384 | '[{0' + space_fmt + '}/{1}]', |
| 385 | 'eta: {eta}', |
| 386 | '{meters}', |
| 387 | 'time: {time}', |
| 388 | 'data: {data}', |
| 389 | 'mem: {memory:.0f} ' |
| 390 | 'mem reserved: {memory_res:.0f} ' |
| 391 | ]) |
| 392 | else: |
| 393 | log_msg = self.delimiter.join([ |
| 394 | header, |
| 395 | '[{0' + space_fmt + '}/{1}]', |
| 396 | 'eta: {eta}', |
| 397 | '{meters}', |
| 398 | 'time: {time}', |
| 399 | 'data: {data}' |
| 400 | ]) |
| 401 | MB = 1024.0 * 1024.0 |
| 402 | for obj in iterable: |
| 403 | data_time.update(time.time() - end) |
| 404 | yield obj |
| 405 | iter_time.update(time.time() - end) |
| 406 | len_iterable = len(iterable) |
| 407 | if i % print_freq == 0 or i == len_iterable - 1: |
| 408 | eta_seconds = iter_time.global_avg * (len_iterable - i) |
| 409 | eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) |
| 410 | if torch.cuda.is_available(): |
| 411 | print(log_msg.format( |
| 412 | i, len_iterable, eta=eta_string, |
| 413 | meters=str(self), |
| 414 | time=str(iter_time), data=str(data_time), |
| 415 | memory=torch.cuda.memory_allocated() / MB, |
| 416 | memory_res=torch.cuda.memory_reserved() / MB)) |
| 417 | else: |
| 418 | print(log_msg.format( |
| 419 | i, len_iterable, eta=eta_string, |
| 420 | meters=str(self), |
| 421 | time=str(iter_time), data=str(data_time))) |
| 422 | i += 1 |
| 423 | end = time.time() |
| 424 | total_time = time.time() - start_time |
| 425 | total_time_str = str(datetime.timedelta(seconds=int(total_time))) |
| 426 | print('{} Total time: {} ({:.6f} s / it)'.format( |
| 427 | header, total_time_str, total_time / len(iterable))) |
no test coverage detected