MCPcopy Create free account
hub / github.com/csuhan/OneLLM / MetricLogger

Class MetricLogger

util/misc.py:101–182  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

99
100
101class MetricLogger(object):
102 def __init__(self, delimiter="\t"):
103 self.meters = defaultdict(SmoothedValue)
104 self.delimiter = delimiter
105
106 def update(self, **kwargs):
107 for k, v in kwargs.items():
108 if v is None:
109 continue
110 if isinstance(v, torch.Tensor):
111 v = v.item()
112 assert isinstance(v, (float, int))
113 self.meters[k].update(v)
114
115 def __getattr__(self, attr):
116 if attr in self.meters:
117 return self.meters[attr]
118 if attr in self.__dict__:
119 return self.__dict__[attr]
120 raise AttributeError("'{}' object has no attribute '{}'".format(
121 type(self).__name__, attr))
122
123 def __str__(self):
124 loss_str = []
125 for name, meter in self.meters.items():
126 loss_str.append(
127 "{}: {}".format(name, str(meter))
128 )
129 return self.delimiter.join(loss_str)
130
131 def synchronize_between_processes(self):
132 for meter in self.meters.values():
133 meter.synchronize_between_processes()
134
135 def add_meter(self, name, meter):
136 self.meters[name] = meter
137
138 def log_every(self, iterable, print_freq, header=None, start_iter=0):
139 i = start_iter
140 if not header:
141 header = ''
142 start_time = time.time()
143 end = time.time()
144 iter_time = SmoothedValue(fmt='{avg:.4f}')
145 data_time = SmoothedValue(fmt='{avg:.4f}')
146 log_msg = [
147 header,
148 '[{0' + '}/{1}]',
149 '{meters}',
150 'time: {time}',
151 'data: {data}'
152 ]
153 if torch.cuda.is_available():
154 log_msg.append('max mem: {memory:.0f}')
155 log_msg = self.delimiter.join(log_msg)
156 MB = 1024.0 * 1024.0
157 for obj in iterable:
158 data_time.update(time.time() - end)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected