(
self, iterable, print_freq, header=None, n_iterations=None, start_iteration=0
)
| 78 | pass |
| 79 | |
| 80 | def log_every( |
| 81 | self, iterable, print_freq, header=None, n_iterations=None, start_iteration=0 |
| 82 | ): |
| 83 | i = start_iteration |
| 84 | if not header: |
| 85 | header = "" |
| 86 | start_time = time.time() |
| 87 | end = time.time() |
| 88 | iter_time = SmoothedValue(fmt="{avg:.6f}") |
| 89 | data_time = SmoothedValue(fmt="{avg:.6f}") |
| 90 | |
| 91 | if n_iterations is None: |
| 92 | n_iterations = len(iterable) |
| 93 | |
| 94 | space_fmt = ":" + str(len(str(n_iterations))) + "d" |
| 95 | |
| 96 | log_list = [ |
| 97 | header, |
| 98 | "[{0" + space_fmt + "}/{1}]", |
| 99 | "eta: {eta}", |
| 100 | "{meters}", |
| 101 | "time: {time}", |
| 102 | "data: {data}", |
| 103 | ] |
| 104 | if torch.cuda.is_available(): |
| 105 | log_list += ["max mem: {memory:.0f}"] |
| 106 | |
| 107 | log_msg = self.delimiter.join(log_list) |
| 108 | MB = 1024.0 * 1024.0 |
| 109 | for obj in iterable: |
| 110 | data_time.update(time.time() - end) |
| 111 | yield obj |
| 112 | iter_time.update(time.time() - end) |
| 113 | if i % print_freq == 0 or i == n_iterations - 1: |
| 114 | self.dump_in_output_file( |
| 115 | iteration=i, iter_time=iter_time.avg, data_time=data_time.avg |
| 116 | ) |
| 117 | eta_seconds = iter_time.global_avg * (n_iterations - i) |
| 118 | eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) |
| 119 | if torch.cuda.is_available(): |
| 120 | logger.info( |
| 121 | log_msg.format( |
| 122 | i, |
| 123 | n_iterations, |
| 124 | eta=eta_string, |
| 125 | meters=str(self), |
| 126 | time=str(iter_time), |
| 127 | data=str(data_time), |
| 128 | memory=torch.cuda.max_memory_allocated() / MB, |
| 129 | ) |
| 130 | ) |
| 131 | else: |
| 132 | logger.info( |
| 133 | log_msg.format( |
| 134 | i, |
| 135 | n_iterations, |
| 136 | eta=eta_string, |
| 137 | meters=str(self), |
no test coverage detected