def test_save_restore(self): config = {'n_samples': 10, 'parameter_config': [{'name': 'x'}]} m = rp.RandomProposer(config) path = tempfile.mkdtemp() self.assertIn(m.get_param()['x'], [0, 1]) sav = os.path.join(path, 'test.pkl') m.save(sav) n = rp.RandomProposer(config) n.reload(sav) self.assertIn(n.get_param()['x'], [0, 1]) os.remove(sav) os.rmdir(path)
def test_random_choice(self): d = [str(i) for i in range(10)] f = rp._random_choice(d) for i in range(100): self.assertIn(f(), d) self.assertRaises(ValueError, rp._random_choice, [])
def test_random_int(self): d = [1, 10] all_opt = set(range(1, 11)) f = rp._random_int(d) t = set(f() for _ in range(10000)) self.assertSetEqual(all_opt, t, "Low chance to miss numbers") self.assertRaises(ValueError, rp._random_int, [1, 2, 3])
def test_random_float(self): d = [-10, 10] f = rp._random_float(d) for i in range(100): v = f() self.assertLessEqual(v, d[1]) self.assertLessEqual(d[0], v) self.assertRaises(ValueError, rp._random_float, [1, 2, 3])
def test_init(self): config = {} self.assertRaises(KeyError, rp.RandomProposer, config) config['n_samples'] = 10 self.assertRaises(KeyError, rp.RandomProposer, config) config['parameter_config'] = [{}] self.assertRaises(KeyError, rp.RandomProposer, config) config['parameter_config'] = [{"name": "a"}] self.assertTrue(rp.RandomProposer(config))
def test_reset(self): config = {'n_samples': 10, 'random_seed': 10, 'parameter_config': [{'name': 'x', 'type': 'int'}]} m = rp.RandomProposer(config) for i in range(10): m.get() v = m.get() self.assertIs(v, None) m.reset() self.assertIn(m.get()['x'], [0, 1]) self.assertEqual(m.counter, 1)
def test_failed(self): config = { 'n_samples': 10, 'random_seed': 10, 'parameter_config': [{ 'name': 'x', 'type': 'int' }] } p = rp.RandomProposer(config) c = p.get() job = Job("none", c) p.failed(job)
def test_ssh_session(self): pkey = pkg_resources.resource_filename("mockssh", 'server-key') data_folder = pkg_resources.resource_filename(__name__, 'data') users = { "mockuser": pkey, } scores = {} mutex = Lock() config = { 'workingdir': data_folder, 'n_parallel': 2, 'resource': 'node', 'proposer': 'random', 'script': os.path.join(data_folder, "script", "rosenbrock_hpo.py"), 'n_samples': 10, 'random_seed': 10, 'parameter_config': [{ 'name': 'x', 'type': 'float', 'range': [-5, 5] }, { 'name': 'y', 'type': 'float', 'range': [-5, 5] }], "runtime_args": { "prescript": "export CUDA_VISIBLE_DEVICES=-1", "postscript": "echo $CUDA_VISIBLE_DEVICES", "overwrite": 'true' } } m = rp.RandomProposer(config) def callback_fun(score, jid): mutex.acquire() scores[jid] = score mutex.release() with mockssh.Server(users) as server1, mockssh.Server( users) as server2: mngr = SSHResourceManager(None, config['n_parallel'], auppath=data_folder, reconn_wait_time=3, max_retries=3) mngr.mapping[1] = "[email protected]:" + str( server1.port) + " " + pkey mngr.mapping[2] = "[email protected]:" + str( server2.port) + " " + pkey for i in range(0, config['n_samples'], 2): proposal = m.get() job1 = Job(config['script'], BasicConfig(**proposal), config['workingdir']) job1.jid = i mngr.run(job1, 1, None, callback_fun, overwrite=True) proposal = m.get() job2 = Job(config['script'], BasicConfig(**proposal), config['workingdir']) job2.jid = i + 1 mngr.run(job2, 2, None, callback_fun, overwrite=True) mngr.executor.shutdown(wait=True) for key in scores: self.assertTrue(scores[key] != "ERROR")