예제 #1
0
    def test_disable_resource_tracking(self):
        run = Run(system_tracking_interval=None)
        run_hash = run.hash
        run.track(1, name='metric')
        time.sleep(.1)  # allow tracker to add resource usage metrics
        del run

        metrics = list(
            self.repo.query_metrics(
                f'run.hash == "{run_hash}" and metric.name.startswith("__")'))
        self.assertListEqual([], metrics)
예제 #2
0
    def test_meta_run_tree_contexts_and_names(self):
        train_context = {'subset': 'train'}
        val_context = {'subset': 'val'}
        empty_context = {}

        run = Run(repo=self.repo, system_tracking_interval=None)
        run.track(1, name='metric 1', context=train_context)
        run.track(1, name='metric 2', context=train_context)
        run.track(1, name='metric 1', context=val_context)
        run.track(1, name='metric 2', context=val_context)
        run.track(1, name='metric 3', context=val_context)
        run.track(0, name='metric')

        meta_container_path = os.path.join(self.repo.path, 'meta', 'chunks', run.hash)
        rc = RocksContainer(meta_container_path, read_only=True)
        tree = ContainerTreeView(rc)

        contexts = tree.view(('meta', 'chunks', run.hash, 'contexts')).collect()
        for ctx in [train_context, val_context, empty_context]:
            self.assertIn(Context(ctx).idx, contexts)
            self.assertDictEqual(contexts[Context(ctx).idx], ctx)

        traces = tree.view(('meta', 'chunks', run.hash, 'traces', Context(train_context).idx)).collect()
        self.assertSetEqual({'metric 1', 'metric 2'}, set(traces.keys()))
        traces = tree.view(('meta', 'chunks', run.hash, 'traces', Context(val_context).idx)).collect()
        self.assertSetEqual({'metric 1', 'metric 2', 'metric 3'}, set(traces.keys()))
        traces = tree.view(('meta', 'chunks', run.hash, 'traces', Context(empty_context).idx)).collect()
        self.assertSetEqual({'metric'}, set(traces.keys()))
예제 #3
0
    def test_default_tracking_interval(self):
        run = Run()  # default tracking interval 10s
        run_hash = run.hash
        run.track(1, name='metric')
        time.sleep(.1)  # allow tracker to add resource usage metrics
        del run

        metrics = list(
            self.repo.query_metrics(
                f'run.hash == "{run_hash}" and metric.name.startswith("__")'))
        self.assertEqual(4, len(metrics))
        expected_metrics = {
            '__system__cpu', '__system__disk_percent',
            '__system__memory_percent', '__system__p_memory_percent'
        }
        self.assertSetEqual(expected_metrics, set(m.name for m in metrics))
예제 #4
0
    def test_custom_tracking_interval(self):
        run = Run(system_tracking_interval=1)
        run_hash = run.hash
        run.track(1, name='metric')
        time.sleep(3)  # allow tracker to add resource usage metrics
        del run

        metrics = list(
            self.repo.query_metrics(
                f'run.hash == "{run_hash}" and metric.name.startswith("__")'))
        self.assertEqual(4, len(metrics))
        expected_metrics = {
            '__system__cpu', '__system__disk_percent',
            '__system__memory_percent', '__system__p_memory_percent'
        }
        self.assertSetEqual(expected_metrics, set(m.name for m in metrics))
        for metric in metrics:
            # 3 sec. runtime, 1 sec. interval
            self.assertGreaterEqual(len(metric.values), 3)
            self.assertLessEqual(len(metric.values), 4)
예제 #5
0
    def test_numpy_scalar_types_track(self):
        """covers https://github.com/aimhubio/aim/issues/1206"""

        run = Run(system_tracking_interval=None)
        run.track(np.array([1.0]), name='single_item_array')
        run.track(np.array([[[1.0]]]), name='single_item_3d_array')
        run.track(np.float64(1.0), name='numpy_float64')
        run.track(np.float32(1.0), name='numpy_float32')

        repo = Repo.default_repo()
        metric_names = {metric.name for metric in repo.query_metrics()}
        expected_metric_names = {
            'single_item_array', 'single_item_3d_array', 'numpy_float64',
            'numpy_float32'
        }
        self.assertSetEqual(expected_metric_names, metric_names)
예제 #6
0
    def test_run_trace_dtype_and_last_value(self):
        run = Run()
        run.track(1.0, name='metric 1', context={})
        run.track(2.0, name='metric 1', context={})
        run.track(3.0, name='metric 1', context={})
        run.track(1.0, name='metric 1', context={'subset': 'train'})

        meta_container_path = os.path.join(self.repo.path, 'meta', 'chunks', run.hash)
        rc = RocksContainer(meta_container_path, read_only=True)
        tree = ContainerTreeView(rc)
        metric_1_dict = tree.view(('meta', 'chunks', run.hash, 'traces', Context({}).idx, 'metric 1')).collect()
        self.assertEqual(3.0, metric_1_dict['last'])
        self.assertEqual('float', metric_1_dict['dtype'])

        metric_1_dict = tree.view(('meta', 'chunks', run.hash, 'traces',
                                   Context({'subset': 'train'}).idx, 'metric 1')).collect()
        self.assertEqual(1.0, metric_1_dict['last'])
예제 #7
0
 def test_reject_non_scalar_arrays_track(self):
     run = Run(system_tracking_interval=None)
     with self.assertRaises(ValueError):
         run.track(np.array([1.0, 2.0]), name='fail')
예제 #8
0
    def test_series_tree_values(self):
        # sequential steps
        run = Run()
        run.track(1.0, name='metric 1', context={})
        run.track(2.0, name='metric 1', context={})
        run.track(3.0, name='metric 1', context={})

        series_container_path = os.path.join(self.repo.path, 'seqs', 'chunks', run.hash)
        rc = RocksContainer(series_container_path, read_only=True)
        tree = ContainerTreeView(rc)
        traces_dict = tree.view(('seqs', 'chunks', run.hash, Context({}).idx, 'metric 1')).collect()
        self.assertSetEqual({'val', 'epoch', 'time'}, set(traces_dict.keys()))
        self.assertEqual(3, len(traces_dict['val']))
        self.assertEqual(3, len(traces_dict['epoch']))
        self.assertEqual(3, len(traces_dict['time']))
        self.assertEqual(1.0, traces_dict['val'][0])
        self.assertEqual(2.0, traces_dict['val'][1])
        self.assertEqual(3.0, traces_dict['val'][2])

        # user-specified steps
        run = Run()
        run.track(1.0, name='metric 1', step=10, context={})
        run.track(2.0, name='metric 1', step=20, context={})
        run.track(3.0, name='metric 1', step=30, context={})

        series_container_path = os.path.join(self.repo.path, 'seqs', 'chunks', run.hash)
        rc = RocksContainer(series_container_path, read_only=True)
        tree = ContainerTreeView(rc)
        traces_dict = tree.view(('seqs', 'chunks', run.hash, Context({}).idx, 'metric 1')).collect()
        self.assertEqual(31, len(traces_dict['val']))  # last index is 30
        # sparse array
        self.assertTrue(all(x is None for x in traces_dict['val'][0:10]))
        self.assertEqual(1.0, traces_dict['val'][10])
        self.assertTrue(all(x is None for x in traces_dict['val'][11:20]))
        self.assertEqual(2.0, traces_dict['val'][20])
        self.assertTrue(all(x is None for x in traces_dict['val'][21:30]))
        self.assertEqual(3.0, traces_dict['val'][30])
        val_array_view = tree.view(('seqs', 'chunks', run.hash, Context({}).idx, 'metric 1')).array('val')
        self.assertEqual(31, len(val_array_view))
        self.assertEqual(3, len(list(val_array_view)))
        self.assertEqual(1.0, val_array_view[10])
        self.assertEqual(2.0, val_array_view[20])
        self.assertEqual(3.0, val_array_view[30])

        # user-specified steps, unordered
        run = Run()
        run.track(3.0, name='metric 1', step=30, context={})
        run.track(1.0, name='metric 1', step=10, context={})
        run.track(2.0, name='metric 1', step=20, context={})

        series_container_path = os.path.join(self.repo.path, 'seqs', 'chunks', run.hash)
        rc = RocksContainer(series_container_path, read_only=True)
        tree = ContainerTreeView(rc)
        traces_dict = tree.view(('seqs', 'chunks', run.hash, Context({}).idx, 'metric 1')).collect()
        self.assertEqual(31, len(traces_dict['val']))  # last index is 30
        # sparse array
        self.assertTrue(all(x is None for x in traces_dict['val'][0:10]))
        self.assertEqual(1.0, traces_dict['val'][10])
        self.assertTrue(all(x is None for x in traces_dict['val'][11:20]))
        self.assertEqual(2.0, traces_dict['val'][20])
        self.assertTrue(all(x is None for x in traces_dict['val'][21:30]))
        self.assertEqual(3.0, traces_dict['val'][30])