Skip to content

[GENERAL SUPPORT]: Slow MultiObjective Small Space Parallel Get TrialsΒ #4043

@chanansh

Description

@chanansh

Question

I have a budget of batch_size=150 parallel runs on the blackbox.
I have setup a strategy to have SOBOL with batch_size followed by BOTORCH
The generation of the N trials by ax.get_next_trials is so slow, making the optimisation useless.
What am I doing wrong?
The objective is MO with 2 scalars (no noise).
The feature space is very small (see below just 2500 possible values).
It takes about 5-10 second per trial on M3 macbook pro (only one cpu is used).

Please provide any relevant code snippet if applicable.

search_space = SearchSpace(
    parameters=[
        # This is a discrete choice of 34 integer values, sorted in ascending order.
        ChoiceParameter(
            name="parameter_A",
            values=[128, 256, 384, 512, 640, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096, 6144, 8192],
            is_ordered=True,
            value_type="int"
        ),
        # This represents a search over powers of 2, from 2^1 to 2^6.
        RangeParameter(
            name="parameter_B",
            lower=1,
            upper=6,
            value_type="int",
        ),
        # This represents 2^0.
        ChoiceParameter(
            name="parameter_C",
            values=[0],
            is_ordered=True,
            value_type="int"
        ),
        # This represents a search over powers of 2, from 2^0 to 2^5.
        RangeParameter(
            name="parameter_D",
            lower=0,
            upper=5,
            value_type="int",
        ),
        # This represents a search over powers of 2, from 2^0 to 2^3.
        RangeParameter(
            name="parameter_E",
            lower=0,
            upper=3,
            value_type="int",
        ),
        # This represents a search over powers of 2, from 2^0 to 2^6.
        RangeParameter(
            name="parameter_F",
            lower=0,
            upper=6,
            value_type="int",
        ),
        # This represents a search over powers of 2, from 2^0 to 2^5.
        RangeParameter(
            name="parameter_G",
            lower=0,
            upper=5,
            value_type="int",
        )
    ]
)

linear_constraints=[
    (["parameter_D", "parameter_E", "parameter_F", "parameter_G"], "==", 6)
]


# generation strategy

        gs = GenerationStrategy(steps=[
            GenerationStep(model=Generators.SOBOL, num_trials=sobol_trials, max_parallelism=batch_size),
            GenerationStep(
                model=Generators.BOTORCH_MODULAR, 
                num_trials=-1, 
                max_parallelism=batch_size
            ),
        ])

Code of Conduct

  • I agree to follow this Ax's Code of Conduct

Metadata

Metadata

Labels

questionFurther information is requested

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions