def test_log_batch_same_metric_repeated_single_req(self): fs = FileStore(self.test_root) run = self._create_run(fs) metric0 = Metric(key="metric-key", value=1, timestamp=2, step=0) metric1 = Metric(key="metric-key", value=2, timestamp=3, step=0) fs.log_batch(run.info.run_id, params=[], metrics=[metric0, metric1], tags=[]) self._verify_logged(fs, run.info.run_id, params=[], metrics=[metric0, metric1], tags=[])
def test_log_batch_allows_tag_overwrite(self): fs = FileStore(self.test_root) run = self._create_run(fs) fs.log_batch(run.info.run_id, metrics=[], params=[], tags=[RunTag("t-key", "val")]) fs.log_batch(run.info.run_id, metrics=[], params=[], tags=[RunTag("t-key", "newval")]) self._verify_logged(fs, run.info.run_id, metrics=[], params=[], tags=[RunTag("t-key", "newval")])
def test_log_batch_tags_idempotency(self): fs = FileStore(self.test_root) run = self._create_run(fs) fs.log_batch(run.info.run_id, metrics=[], params=[], tags=[RunTag("t-key", "t-val")]) fs.log_batch(run.info.run_id, metrics=[], params=[], tags=[RunTag("t-key", "t-val")]) self._verify_logged(fs, run.info.run_id, metrics=[], params=[], tags=[RunTag("t-key", "t-val")])
def test_log_batch(self): fs = FileStore(self.test_root) run = fs.create_run(experiment_id=FileStore.DEFAULT_EXPERIMENT_ID, user_id='user', start_time=0, tags=[]) run_id = run.info.run_id metric_entities = [ Metric("m1", 0.87, 12345, 0), Metric("m2", 0.49, 12345, 0) ] param_entities = [Param("p1", "p1val"), Param("p2", "p2val")] tag_entities = [RunTag("t1", "t1val"), RunTag("t2", "t2val")] fs.log_batch(run_id=run_id, metrics=metric_entities, params=param_entities, tags=tag_entities) self._verify_logged(fs, run_id, metric_entities, param_entities, tag_entities)
def test_log_batch(self): fs = FileStore(self.test_root) run = fs.create_run( experiment_id=Experiment.DEFAULT_EXPERIMENT_ID, user_id='user', run_name=None, source_type='source_type', source_name='source_name', entry_point_name='entry_point_name', start_time=0, source_version=None, tags=[], parent_run_id=None) run_uuid = run.info.run_uuid metric_entities = [Metric("m1", 0.87, 12345), Metric("m2", 0.49, 12345)] param_entities = [Param("p1", "p1val"), Param("p2", "p2val")] tag_entities = [RunTag("t1", "t1val"), RunTag("t2", "t2val")] fs.log_batch( run_id=run_uuid, metrics=metric_entities, params=param_entities, tags=tag_entities) run = fs.get_run(run_uuid) tags = [(t.key, t.value) for t in run.data.tags] metrics = [(m.key, m.value, m.timestamp) for m in run.data.metrics] params = [(p.key, p.value) for p in run.data.params] assert set(tags) == set([("t1", "t1val"), ("t2", "t2val")]) assert set(metrics) == set([("m1", 0.87, 12345), ("m2", 0.49, 12345)]) assert set(params) == set([("p1", "p1val"), ("p2", "p2val")])
def test_log_batch_internal_error(self): # Verify that internal errors during log_batch result in MlflowExceptions fs = FileStore(self.test_root) run = self._create_run(fs) def _raise_exception_fn(*args, **kwargs): # pylint: disable=unused-argument raise Exception("Some internal error") with mock.patch("mlflow.store.file_store.FileStore.log_metric") as log_metric_mock, \ mock.patch("mlflow.store.file_store.FileStore.log_param") as log_param_mock, \ mock.patch("mlflow.store.file_store.FileStore.set_tag") as set_tag_mock: log_metric_mock.side_effect = _raise_exception_fn log_param_mock.side_effect = _raise_exception_fn set_tag_mock.side_effect = _raise_exception_fn for kwargs in [{"metrics": [Metric("a", 3, 1)]}, {"params": [Param("b", "c")]}, {"tags": [RunTag("c", "d")]}]: log_batch_kwargs = {"metrics": [], "params": [], "tags": []} log_batch_kwargs.update(kwargs) print(log_batch_kwargs) with self.assertRaises(MlflowException) as e: fs.log_batch(run.info.run_uuid, **log_batch_kwargs) self.assertIn(str(e.exception.message), "Some internal error") assert e.exception.error_code == ErrorCode.Name(INTERNAL_ERROR)
def test_log_batch_accepts_empty_payload(self): fs = FileStore(self.test_root) run = self._create_run(fs) fs.log_batch(run.info.run_uuid, metrics=[], params=[], tags=[]) self._verify_logged(fs, run.info.run_uuid, metrics=[], params=[], tags=[])
def test_log_batch_allows_tag_overwrite_single_req(self): fs = FileStore(self.test_root) run = self._create_run(fs) tags = [RunTag("t-key", "val"), RunTag("t-key", "newval")] fs.log_batch(run.info.run_uuid, metrics=[], params=[], tags=tags) self._verify_logged(fs, run.info.run_uuid, metrics=[], params=[], tags=[tags[-1]])