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(FILESTORE_PACKAGE + ".FileStore.log_metric") as log_metric_mock, \ mock.patch(FILESTORE_PACKAGE + ".FileStore.log_param") as log_param_mock, \ mock.patch(FILESTORE_PACKAGE + ".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, 0)] }, { "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_id, **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_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_params_idempotency(self): fs = FileStore(self.test_root) run = self._create_run(fs) params = [Param("p-key", "p-val")] fs.log_batch(run.info.run_id, metrics=[], params=params, tags=[]) fs.log_batch(run.info.run_id, metrics=[], params=params, tags=[]) self._verify_logged(fs, run.info.run_id, metrics=[], params=params, tags=[])
def test_log_batch_nonexistent_run(self): fs = FileStore(self.test_root) nonexistent_uuid = uuid.uuid4().hex with self.assertRaises(MlflowException) as e: fs.log_batch(nonexistent_uuid, [], [], []) assert e.exception.error_code == ErrorCode.Name(RESOURCE_DOES_NOT_EXIST) assert ("Run '%s' not found" % nonexistent_uuid) in e.exception.message
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_accepts_empty_payload(self): fs = FileStore(self.test_root) run = self._create_run(fs) fs.log_batch(run.info.run_id, metrics=[], params=[], tags=[]) self._verify_logged(fs, run.info.run_id, metrics=[], params=[], tags=[])
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)