When running benchmarks with specific model requirements (e.g., memory limits or sample size constraints), use the custom_model_constraints parameter. This is particularly useful for Hyperparameter Optimization (HPO) runs where you might want to split a single benchmark into multiple jobs based on data scale.
Key constraint keys include:
max_n_samples_train_per_foldmin_n_samples_train_per_foldmax_n_featuresmax_n_classesregression_support (boolean)
Example of splitting a benchmark into a 'small data' run and a 'large data' run using the same benchmark_name:
# Run 1 — small data (<= 50k train), all configs
BenchmarkSetup(
benchmark_name="tabpfnv25_hpo_14112025",
models=[("RealTabPFN-v2.5", "all")],
num_gpus=1,
configs_per_job=10,
custom_model_constraints={
"REALTABPFN-V2.5": {
"max_n_samples_train_per_fold": 50_000,
"max_n_features": 2000,
"max_n_classes": 10,
}
},
).setup_jobs()
# Run 2 — large data (50k-100k train), 25 configs, big GPUs
BenchmarkSetup(
benchmark_name="tabpfnv25_hpo_14112025",
models=[("RealTabPFN-v2.5", 25)],
configs_per_job=1,
custom_model_constraints={
"REALTABPFN-V2.5": {
"max_n_samples_train_per_fold": 100_000,
"max_n_features": 2000,
"max_n_classes": 10,
"min_n_samples_train_per_fold": 50_001,
}
},
slurm_gpu_partition="alldlc2_gpu-h200",
fake_memory_for_estimates=140,
parallel_benchmark_fix="_large_vram",
).setup_jobs()