def test_skips_non_scalar_events_in_scalar_time_series(self): events = [ event_pb2.Event(file_version="brain.Event:2"), event_pb2.Event(summary=scalar_v2.scalar_pb("scalar1", 5.0)), event_pb2.Event(summary=scalar_v2.scalar_pb("scalar2", 5.0)), event_pb2.Event( summary=histogram_v2.histogram_pb("scalar2", [5.0])), ] run_proto = write_service_pb2.WriteScalarRequest.Run() self._populate_run_from_events(run_proto, events) tag_counts = {tag.name: len(tag.points) for tag in run_proto.tags} self.assertEqual(tag_counts, {"scalar1": 1, "scalar2": 1})
def test_remembers_first_metadata_in_scalar_time_series(self): scalar_1 = event_pb2.Event(summary=scalar_v2.scalar_pb("loss", 4.0)) scalar_2 = event_pb2.Event(summary=scalar_v2.scalar_pb("loss", 3.0)) scalar_2.summary.value[0].ClearField("metadata") events = [ event_pb2.Event(file_version="brain.Event:2"), scalar_1, scalar_2, ] run_proto = write_service_pb2.WriteScalarRequest.Run() self._populate_run_from_events(run_proto, events) tag_counts = {tag.name: len(tag.points) for tag in run_proto.tags} self.assertEqual(tag_counts, {"loss": 2})
def test_upload_preserves_wall_time(self): logdir = self.get_temp_dir() with tb_test_util.FileWriter(logdir) as writer: # Add a raw event so we can specify the wall_time value deterministically. writer.add_event( event_pb2.Event( step=1, wall_time=123.123123123, summary=scalar_v2.scalar_pb("foo", 5.0), ) ) mock_client = _create_mock_client() mock_rate_limiter = mock.create_autospec(util.RateLimiter) uploader = uploader_lib.TensorBoardUploader( mock_client, logdir, mock_rate_limiter ) uploader.create_experiment() uploader._upload_once() mock_client.WriteScalar.assert_called_once() request = mock_client.WriteScalar.call_args[0][0] # Just check the wall_time value; everything else is covered in the full # logdir test below. self.assertEqual( 123123123123, request.runs[0].tags[0].points[0].wall_time.ToNanoseconds(), )
def test_break_at_scalar_point_boundary(self): mock_client = _create_mock_client() point_count = 2000 # comfortably saturates a single 1024-byte request events = [] for step in range(point_count): summary = scalar_v2.scalar_pb("loss", -2.0 * step) if step > 0: summary.value[0].ClearField("metadata") events.append(event_pb2.Event(summary=summary, step=step)) run_to_events = {"train": events} builder = _create_request_sender("123", mock_client) builder.send_requests(run_to_events) requests = [c[0][0] for c in mock_client.WriteScalar.call_args_list] for request in requests: _clear_wall_times(request) self.assertGreater(len(requests), 1) self.assertLess(len(requests), point_count) total_points_in_result = 0 for request in requests: self.assertLen(request.runs, 1) run = request.runs[0] self.assertEqual(run.name, "train") self.assertLen(run.tags, 1) tag = run.tags[0] self.assertEqual(tag.name, "loss") for point in tag.points: self.assertEqual(point.step, total_points_in_result) self.assertEqual(point.value, -2.0 * point.step) total_points_in_result += 1 self.assertLessEqual(request.ByteSize(), uploader_lib._MAX_REQUEST_LENGTH_BYTES) self.assertEqual(total_points_in_result, point_count)
def test_skips_events_from_disallowed_plugins(self): event = event_pb2.Event(step=1, wall_time=123.456, summary=scalar_v2.scalar_pb("foo", 5.0)) run_proto = write_service_pb2.WriteScalarRequest.Run() self._populate_run_from_events( run_proto, [event], allowed_plugins=frozenset("not-scalars")) expected_run_proto = write_service_pb2.WriteScalarRequest.Run() self.assertProtoEquals(run_proto, expected_run_proto)
def test_v2_summary(self): event = event_pb2.Event( step=1, wall_time=123.456, summary=scalar_v2.scalar_pb("foo", 5.0) ) run_proto = write_service_pb2.WriteScalarRequest.Run() self._populate_run_from_events(run_proto, [event]) expected_run_proto = write_service_pb2.WriteScalarRequest.Run() foo_tag = expected_run_proto.tags.add() foo_tag.name = "foo" foo_tag.metadata.plugin_data.plugin_name = "scalars" foo_tag.points.add( step=1, wall_time=test_util.timestamp_pb(123456000000), value=5.0 ) self.assertProtoEquals(run_proto, expected_run_proto)
def scalar_event(tag, value): return event_pb2.Event(summary=scalar_v2.scalar_pb(tag, value))
def make_event(step, wall_time, tag, value): return event_pb2.Event( step=step, wall_time=wall_time, summary=scalar_v2.scalar_pb(tag, value), )