| |
| |
| |
| |
| |
| import caffe2.contrib.playground.meter as Meter |
| from caffe2.python import workspace |
| |
| |
| class ComputeLoss(Meter.Meter): |
| def __init__(self, opts=None, blob_name=''): |
| self.blob_name = blob_name |
| self.opts = opts |
| self.iter = 0 |
| self.value = 0 |
| |
| def Reset(self): |
| self.iter = 0 |
| self.value = 0 |
| |
| def Add(self): |
| """Average values of a blob on each gpu""" |
| value = 0 |
| for idx in range(self.opts['distributed']['first_xpu_id'], |
| self.opts['distributed']['first_xpu_id'] + |
| self.opts['distributed']['num_xpus']): |
| value += workspace.FetchBlob('{}_{}/{}'. |
| format(self.opts['distributed']['device'], idx, self.blob_name)) |
| self.value += value |
| self.iter += 1 |
| |
| def Compute(self): |
| result = self.opts['distributed']['num_shards'] * self.value / self.iter |
| self.Reset() |
| return result |