Esempio n. 1
0
def test_concurent_producers(producer, storage, random_dt):
    """Test concurrent production of new trials."""
    trials_in_db_before = len(storage._fetch_trials({}))
    new_trials_in_db_before = len(storage._fetch_trials({"status": "new"}))

    # Set so that first producer's algorithm generate valid point on first time
    # And second producer produce same point and thus must produce next one two.
    # Hence, we know that producer algo will have _num == 1 and
    # second producer algo will have _num == 2
    producer.algorithm.algorithm.possible_values = [("gru", "rnn"),
                                                    ("gru", "gru")]
    # Make sure it starts from index 0
    producer.algorithm.seed_rng(0)

    assert producer.experiment.pool_size == 1

    second_producer = Producer(producer.experiment)
    second_producer.algorithm = copy.deepcopy(producer.algorithm)

    producer.update()
    second_producer.update()

    producer.produce()
    second_producer.produce()

    # Algorithm was required to suggest some trials
    num_new_points = producer.algorithm.algorithm._num
    assert num_new_points == 1  # pool size
    num_new_points = second_producer.algorithm.algorithm._num
    assert num_new_points == 2  # pool size

    # `num_new_points` new trials were registered at database
    assert len(storage._fetch_trials({})) == trials_in_db_before + 2
    assert len(storage._fetch_trials({"status":
                                      "new"})) == new_trials_in_db_before + 2
    new_trials = list(
        storage._fetch_trials({
            "status": "new",
            "submit_time": random_dt
        }))
    assert new_trials[0].experiment == producer.experiment.id
    assert new_trials[0].start_time is None
    assert new_trials[0].end_time is None
    assert new_trials[0].results == []
    assert new_trials[0].params == {
        "/decoding_layer": "gru",
        "/encoding_layer": "rnn",
    }

    assert new_trials[1].params == {
        "/decoding_layer": "gru",
        "/encoding_layer": "gru",
    }
Esempio n. 2
0
def test_concurent_producers(producer, database, random_dt):
    """Test concurrent production of new trials."""
    trials_in_db_before = database.trials.count()
    new_trials_in_db_before = database.trials.count({'status': 'new'})

    print(producer.experiment.fetch_trials({}))

    # Set so that first producer's algorithm generate valid point on first time
    # And second producer produce same point and thus must produce next one two.
    # Hence, we know that producer algo will have _num == 1 and
    # second producer algo will have _num == 2
    producer.algorithm.algorithm.possible_values = [('rnn', 'gru'),
                                                    ('gru', 'gru')]
    # Make sure it starts from index 0
    producer.algorithm.seed_rng(0)

    assert producer.experiment.pool_size == 1

    second_producer = Producer(producer.experiment)
    second_producer.algorithm = copy.deepcopy(producer.algorithm)

    producer.update()
    second_producer.update()

    print(producer.algorithm.algorithm._index)
    print(second_producer.algorithm.algorithm._index)
    producer.produce()
    print(producer.algorithm.algorithm._index)
    print(second_producer.algorithm.algorithm._index)
    second_producer.produce()

    # Algorithm was required to suggest some trials
    num_new_points = producer.algorithm.algorithm._num
    assert num_new_points == 1  # pool size
    num_new_points = second_producer.algorithm.algorithm._num
    assert num_new_points == 2  # pool size

    # `num_new_points` new trials were registered at database
    assert database.trials.count() == trials_in_db_before + 2
    assert database.trials.count({'status':
                                  'new'}) == new_trials_in_db_before + 2
    new_trials = list(
        database.trials.find({
            'status': 'new',
            'submit_time': random_dt
        }))
    assert new_trials[0]['experiment'] == producer.experiment.name
    assert new_trials[0]['start_time'] is None
    assert new_trials[0]['end_time'] is None
    assert new_trials[0]['results'] == []
    assert new_trials[0]['params'] == [{
        'name': '/encoding_layer',
        'type': 'categorical',
        'value': 'rnn'
    }, {
        'name': '/decoding_layer',
        'type': 'categorical',
        'value': 'gru'
    }]

    assert new_trials[1]['params'] == [{
        'name': '/encoding_layer',
        'type': 'categorical',
        'value': 'gru'
    }, {
        'name': '/decoding_layer',
        'type': 'categorical',
        'value': 'gru'
    }]
Esempio n. 3
0
def test_concurent_producers(producer, database, random_dt):
    """Test concurrent production of new trials."""
    trials_in_db_before = database.trials.count()
    new_trials_in_db_before = database.trials.count({"status": "new"})

    # Set so that first producer's algorithm generate valid point on first time
    # And second producer produce same point and thus must produce next one two.
    # Hence, we know that producer algo will have _num == 1 and
    # second producer algo will have _num == 2
    producer.algorithm.algorithm.possible_values = [("gru", "rnn"),
                                                    ("gru", "gru")]
    # Make sure it starts from index 0
    producer.algorithm.seed_rng(0)

    assert producer.experiment.pool_size == 1

    second_producer = Producer(producer.experiment)
    second_producer.algorithm = copy.deepcopy(producer.algorithm)

    producer.update()
    second_producer.update()

    producer.produce()
    second_producer.produce()

    # Algorithm was required to suggest some trials
    num_new_points = producer.algorithm.algorithm._num
    assert num_new_points == 1  # pool size
    num_new_points = second_producer.algorithm.algorithm._num
    assert num_new_points == 2  # pool size

    # `num_new_points` new trials were registered at database
    assert database.trials.count() == trials_in_db_before + 2
    assert database.trials.count({"status":
                                  "new"}) == new_trials_in_db_before + 2
    new_trials = list(
        database.trials.find({
            "status": "new",
            "submit_time": random_dt
        }))
    assert new_trials[0]["experiment"] == producer.experiment.name
    assert new_trials[0]["start_time"] is None
    assert new_trials[0]["end_time"] is None
    assert new_trials[0]["results"] == []
    assert new_trials[0]["params"] == [
        {
            "name": "/decoding_layer",
            "type": "categorical",
            "value": "gru"
        },
        {
            "name": "/encoding_layer",
            "type": "categorical",
            "value": "rnn"
        },
    ]

    assert new_trials[1]["params"] == [
        {
            "name": "/decoding_layer",
            "type": "categorical",
            "value": "gru"
        },
        {
            "name": "/encoding_layer",
            "type": "categorical",
            "value": "gru"
        },
    ]