Repository navigation
1.3.0
Compatibility
- Require BoTorch==0.18.0 (#5216)
- Requires PyTorch>=2.4.0
- Utilizes NumPyro for faster fully-Bayesian model fitting, requiring JAX as a dependency
- Storage: Add
step_sizetoSQAParameterclass, and as a column to theparameter_v2table in the DB (#5212).
API Changes (ax/api)
Client.attach_data(and thereforeClient.complete_trial) now auto-registers metrics inraw_datathat are not part of
the optimization config as tracking metrics, matching the documented contract. Previously this raisedUserInputError(#5135)Client.configure_optimization/ objective and outcome-constraint strings now support linear equality constraints (w^T x == b) (#5174)
Docs
- New example starting an Ax experiment from dataframe data (#5098)
Core (ax/core)
ObjectiveandOutcomeConstraintare now expression-based and no longer holdMetricinstances;
metrics live only on theExperiment. Construct them with an expression string, e.g.
Objective(expression="ne1 + 2*ne2")orOutcomeConstraint(expression="qps >= 7000")
(single, scalarized, and multi-objective are all expressed this way). Old-style constructors still
work but discard theMetricafter init.Objective.metricis removed -- get a metric's name from
the expression and look it up viaExperiment.get_metric(name). This is a step toward deprecating
ScalarizedObjective,MultiObjective,ScalarizedOutcomeConstraint, andObjectiveThreshold(#5000, #5122, #5045, #5041)
Note: We are aware of some edge-case bugs in this setup and we may be iterating on this in future releases.ParameterConstraintgains a newequality=kwarg for linear equality constraints (w^T x == b); equality constraints are honored inSearchSpacemembership checks (#5173, #5175)- Make all
mark_*methods onBaseTrialno-op when the status is unchanged, and avoid rewriting timestamps when the status is unchanged (#5097, #5074) - Runner lifecycle for search space editing: new
Runner.updateandRunner.on_search_space_updatemethods, a typedRunnerConfiginfrastructure, and anUNSETsentinel (#5131, #5132, #5133, #5130) - Support for Language-in-the-Loop labeling trials, with data-freshness hashing/stamping and stale-data handling (#4986, #4992, #5144)
AddExecutionViabilitytransform (lives in adapter; relies on core trial/metric plumbing) (#4547)
Generation (ax/generators, ax/adapter, ax/generation_strategy)
- Replace Pyro with NumPyro (JAX-backed) for fully Bayesian NUTS inference -- roughly 25x faster fit on CPU with equivalent model quality (#5087)
- Threaded equality constraints from
ParameterConstraintall the way down to BoTorch (#5176, #5177, #5179, #5178, #5182) - Open-sourced the Transfer Learning stack:
TransferLearningAdapter(registered asGenerators.BOTL) (#5052, #5048, #5096, #5047) - Heterogeneous TL now defaults to
MultiTaskGP+LearnedFeatureImputation(ImputedMultiTaskGP) (#5106, #5183, #5193, #5192) - Dispatch
qEUBOfor preferential BO (#5093) and supportPairwiseGPinModelListpipelines (#5092) GenerationStrategy.fit(experiment, data)public method encapsulating the transition-then-fit pattern (#4922)- New
InSampleUniformGeneratorfor model-free in-sample candidate selection (#4987) FreshLILOLabelChecktransition criterion and hash-based filtering of stale LILO data in the adapter (#4994, #4993)- Expand the model space for numeric ordered
ChoiceParameters (#5210)
Breaking
- Removed the deprecated
steps=kwarg fromGenerationStrategy.__init__(usenodes=) (#5142) - Removed the deprecated
use_updateargument toGenerationStep(#5187) - Removed the deprecated
generated_pointsargument toRandomGenerator(#5186) - Re-index
TorchOptConfig.objective_thresholdsfrom(n_outcomes,)to(n_objectives,)(#5018)
Analysis (ax/analysis, ax/plot)
- New
TransferLearningAnalysiswith paste/diff comparison links (#4918, #4980) - New
UtilityRankingPlotfor preference metrics; preference metrics handled across the analysis layer (#5166, #5165) - New
NotApplicableStateAnalysisCard(#5035, #5036, #5051, #5163) SensitivityAnalysisPlotaesthetic improvements; use total-order sensitivity for high-dimensional experiments (#5015, #5115)
Storage (ax/storage)
- Add
step_sizetoSQAParameterclass, and as a column to theparameter_v2table in the DB (#5212). This will be leveraged in the next version. - SQLAlchemy 2.0 migration: migrate SQA declarative classes to SA 2.0
Mapped[T], make the SQA store SA 2.0-compatible (#5205, #5201, #5169, #5203, #5206) - Support equality constraints in JSON and SQA storage (#5181)
Legacy API (ax/service)
Note: These are deprecated and may be removed in a future release.
optimize()is rewritten as a thin wrapper overax.api.client.Client; theOptimizationLoopclass is removed. Theoptimize()signature and return type are preserved (#5143)- Removed
AxClient.get_optimization_trace-- superseded byUtilityProgressionAnalysis(#5168) - Search space editing on
AxClient: newadd_parameters,update_parameters, anddisable_parametersmethods to mutate the search space after trials have started; parameter constraints can be added alongside new parameters (#4945, #5023)
Orchestration (ax/orchestration)
- Removed
Scheduler,SchedulerOptions, andSchedulerInternalError-- deprecated since Ax 1.0.0; use theOrchestratorinstead (#5188)