diff --git a/.github/workflows/reusable_tutorials.yml b/.github/workflows/reusable_tutorials.yml index 1a82d0338b..dd5e223e37 100644 --- a/.github/workflows/reusable_tutorials.yml +++ b/.github/workflows/reusable_tutorials.yml @@ -45,4 +45,4 @@ jobs: uv pip install scipy==${{ inputs.scipy_version }} --system - name: Run tutorials with smoke test run: | - python scripts/run_tutorials.py -p "$(pwd)" -s -n test3.ipynb + python scripts/run_tutorials.py -p "$(pwd)" -s -n test2.ipynb diff --git a/tutorials/test2.ipynb b/tutorials/test2.ipynb index 54ed64984a..335837f708 100644 --- a/tutorials/test2.ipynb +++ b/tutorials/test2.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "id": "babee257", "metadata": { "execution": { @@ -29,21 +29,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "[KeOps] Warning : omp.h header is not in the path, disabling OpenMP. To fix this, you can set the environment\n", - " variable OMP_PATH to the location of the header before importing keopscore or pykeops,\n", - " e.g. using os.environ: import os; os.environ['OMP_PATH'] = '/path/to/omp/header'\n", - "[KeOps] Warning : Cuda libraries were not detected on the system or could not be loaded ; using cpu only mode\n", - "CPU times: user 4.2 s, sys: 1.65 s, total: 5.85 s\n", - "Wall time: 16.7 s\n" + "CPU times: user 56.7 ms, sys: 23.8 ms, total: 80.6 ms\n", + "Wall time: 166 ms\n" ] }, { "data": { "text/plain": [ - "'1.15.0'" + "'1.7.3'" ] }, - "execution_count": 1, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -93,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "id": "0899558f", "metadata": { "execution": { @@ -120,152 +116,177 @@ "name": "stdout", "output_type": "stream", "text": [ - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/saitcakmak/botorch/botorch/acquisition/monte_carlo.py:496: NumericsWarning: qNoisyExpectedImprovement has known numerical issues that lead to suboptimal optimization performance. It is strongly recommended to simply replace\n", + " 196165 function calls (180446 primitive calls) in 0.268 seconds\n", + "\n", + " Ordered by: cumulative time\n", + " List reduced from 457 to 46 due to restriction <0.1>\n", + "\n", + " ncalls tottime percall cumtime percall filename:lineno(function)\n", + " 1 0.000 0.000 0.268 0.268 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:415(optimize_acqf)\n", + " 1 0.000 0.000 0.268 0.268 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:547(_optimize_acqf)\n", + " 1 0.000 0.000 0.268 0.268 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:258(_optimize_acqf_batch)\n", + " 1 0.000 0.000 0.264 0.264 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:294(_optimize_batch_candidates)\n", + " 1 0.000 0.000 0.263 0.263 /opt/anaconda3/lib/python3.9/site-packages/botorch/generation/gen.py:43(gen_candidates_scipy)\n", + " 1 0.000 0.000 0.260 0.260 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/utils/timeout.py:17(minimize_with_timeout)\n", + " 1 0.000 0.000 0.260 0.260 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_minimize.py:45(minimize)\n", + " 1 0.002 0.002 0.260 0.260 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/lbfgsb.py:210(_minimize_lbfgsb)\n", + " 260 0.003 0.000 0.255 0.001 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/optimize.py:65(_compute_if_needed)\n", + " 131 0.000 0.000 0.254 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:231(_update_fun)\n", + " 130 0.000 0.000 0.254 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:136(update_fun)\n", + " 130 0.000 0.000 0.254 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:129(fun_wrapped)\n", + " 130 0.000 0.000 0.254 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/optimize.py:72(__call__)\n", + " 130 0.000 0.000 0.254 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:264(fun_and_grad)\n", + " 130 0.002 0.000 0.251 0.002 /opt/anaconda3/lib/python3.9/site-packages/botorch/generation/gen.py:175(f_np_wrapper)\n", + " 660/132 0.001 0.000 0.151 0.001 /opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/module.py:1494(_call_impl)\n", + " 132 0.000 0.000 0.150 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/utils/transforms.py:326(decorated)\n", + " 132 0.001 0.000 0.150 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/utils/transforms.py:266(decorated)\n", + " 130 0.001 0.000 0.148 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/generation/gen.py:229(f)\n", + " 132 0.001 0.000 0.147 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/acquisition/monte_carlo.py:325(forward)\n", + " 130 0.001 0.000 0.097 0.001 /opt/anaconda3/lib/python3.9/site-packages/torch/autograd/__init__.py:204(grad)\n", + " 130 0.096 0.001 0.096 0.001 {method 'run_backward' of 'torch._C._EngineBase' objects}\n", + " 132 0.001 0.000 0.089 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/models/gpytorch.py:340(posterior)\n", + " 132 0.002 0.000 0.073 0.001 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/models/exact_gp.py:251(__call__)\n", + " 132 0.003 0.000 0.053 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/acquisition/monte_carlo.py:296(_forward_cached)\n", + " 132 0.002 0.000 0.051 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/models/exact_prediction_strategies.py:259(exact_prediction)\n", + " 132 0.001 0.000 0.038 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/acquisition/cached_cholesky.py:119(_get_f_X_samples)\n", + " 396/264 0.000 0.000 0.038 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/module.py:30(__call__)\n", + " 132 0.007 0.000 0.037 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/utils/low_rank.py:85(sample_cached_cholesky)\n", + " 924/792 0.001 0.000 0.037 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/utils/memoize.py:54(g)\n", + " 396/264 0.001 0.000 0.035 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:22(wrapped)\n", + " 132 0.000 0.000 0.028 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:408(to_dense)\n", + " 264 0.001 0.000 0.027 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/kernel.py:453(__call__)\n", + " 132 0.001 0.000 0.027 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:342(evaluate_kernel)\n", + " 132 0.001 0.000 0.023 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/scale_kernel.py:108(forward)\n", + " 132 0.004 0.000 0.021 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/matern_kernel.py:86(forward)\n", + " 132 0.000 0.000 0.014 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/models/gp_regression.py:174(forward)\n", + " 264 0.000 0.000 0.011 0.000 /opt/anaconda3/lib/python3.9/site-packages/pyro/distributions/distribution.py:19(__call__)\n", + " 264 0.001 0.000 0.011 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/distributions/multivariate_normal.py:45(__init__)\n", + " 132 0.000 0.000 0.010 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/kernel.py:306(covar_dist)\n", + " 132 0.000 0.000 0.010 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/kernel.py:51(dist)\n", + " 132 0.000 0.000 0.010 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/models/model.py:226(eval)\n", + " 132 0.007 0.000 0.010 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/models/exact_prediction_strategies.py:293(exact_predictive_covar)\n", + " 132 0.009 0.000 0.009 0.000 {method 'max' of 'torch._C._TensorBase' objects}\n", + " 132 0.000 0.000 0.009 0.000 /opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/module.py:2291(eval)\n", + " 132 0.000 0.000 0.009 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/models/model.py:231(train)\n", "\n", - "\t qNoisyExpectedImprovement \t --> \t qLogNoisyExpectedImprovement \n", "\n", - "instead, which fixes the issues and has the same API. See https://arxiv.org/abs/2310.20708 for details.\n", - " legacy_ei_numerics_warning(legacy_name=type(self).__name__)\n" + "CPU times: user 260 ms, sys: 73.1 ms, total: 333 ms\n", + "Wall time: 296 ms\n" ] }, + { + "data": { + "text/plain": [ + "'1.7.3'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "acqf = qNoisyExpectedImprovement(model, train_X)\n", + "\n", + "# eval and maximise acq functions\n", + "with cProfile.Profile() as pr:\n", + " optimize_acqf(\n", + " acq_function=acqf,\n", + " bounds=bounds_norm,\n", + " q=5,\n", + " num_restarts=5,\n", + " raw_samples=5,\n", + " sequential=False,\n", + " )\n", + "\n", + "sortby = SortKey.CUMULATIVE\n", + "ps = pstats.Stats(pr).sort_stats(sortby)\n", + "ps.print_stats(.1)\n", + "\n", + "scipy.__version__" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ba5144b0", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - "X.shape=torch.Size([5, 5, 2]), X.dtype=torch.float64, X.stride()=(10, 2, 1)\n", - " 116178 function calls (111929 primitive calls) in 0.176 seconds\n", + " 290123 function calls (267684 primitive calls) in 0.358 seconds\n", "\n", " Ordered by: cumulative time\n", - " List reduced from 563 to 56 due to restriction <0.1>\n", + " List reduced from 503 to 50 due to restriction <0.1>\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", - " 1 0.000 0.000 0.176 0.176 /Users/saitcakmak/botorch/botorch/optim/optimize.py:479(optimize_acqf)\n", - " 1 0.000 0.000 0.176 0.176 /Users/saitcakmak/botorch/botorch/optim/optimize.py:630(_optimize_acqf)\n", - " 1 0.000 0.000 0.176 0.176 /Users/saitcakmak/botorch/botorch/optim/optimize.py:310(_optimize_acqf_batch)\n", - " 1 0.000 0.000 0.171 0.171 /Users/saitcakmak/botorch/botorch/optim/optimize.py:353(_optimize_batch_candidates)\n", - " 1 0.000 0.000 0.171 0.171 /Users/saitcakmak/botorch/botorch/generation/gen.py:44(gen_candidates_scipy)\n", - " 1 0.000 0.000 0.166 0.166 /Users/saitcakmak/botorch/botorch/optim/utils/timeout.py:19(minimize_with_timeout)\n", - " 1 0.000 0.000 0.166 0.166 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_minimize.py:53(minimize)\n", - " 1 0.013 0.013 0.166 0.166 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_slsqp_py.py:216(_minimize_slsqp)\n", - " 54 0.000 0.000 0.150 0.003 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_differentiable_functions.py:293(_update_fun)\n", - " 97 0.001 0.000 0.150 0.002 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_optimize.py:71(_compute_if_needed)\n", - " 53 0.000 0.000 0.150 0.003 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_differentiable_functions.py:16(wrapped)\n", - " 53 0.000 0.000 0.150 0.003 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_optimize.py:78(__call__)\n", - " 53 0.001 0.000 0.148 0.003 /Users/saitcakmak/botorch/botorch/generation/gen.py:182(f_np_wrapper)\n", - " 97 0.000 0.000 0.147 0.002 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_optimize.py:303(eval)\n", - " 53 0.000 0.000 0.146 0.003 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_differentiable_functions.py:323(fun)\n", - " 110/55 0.000 0.000 0.102 0.002 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/nn/modules/module.py:1732(_wrapped_call_impl)\n", - " 110/55 0.000 0.000 0.102 0.002 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/nn/modules/module.py:1740(_call_impl)\n", - " 55 0.000 0.000 0.102 0.002 /Users/saitcakmak/botorch/botorch/utils/transforms.py:340(decorated)\n", - " 55 0.000 0.000 0.102 0.002 /Users/saitcakmak/botorch/botorch/utils/transforms.py:278(decorated)\n", - " 55 0.002 0.000 0.101 0.002 /Users/saitcakmak/botorch/botorch/acquisition/monte_carlo.py:254(forward)\n", - " 55 0.000 0.000 0.099 0.002 /Users/saitcakmak/botorch/botorch/acquisition/monte_carlo.py:277(_non_reduced_forward)\n", - " 53 0.000 0.000 0.098 0.002 /Users/saitcakmak/botorch/botorch/generation/gen.py:238(f)\n", - " 55 0.001 0.000 0.096 0.002 /Users/saitcakmak/botorch/botorch/acquisition/monte_carlo.py:592(_get_samples_and_objectives)\n", - " 55 0.000 0.000 0.050 0.001 /Users/saitcakmak/botorch/botorch/acquisition/cached_cholesky.py:123(_get_f_X_samples)\n", - " 55 0.002 0.000 0.050 0.001 /Users/saitcakmak/botorch/botorch/utils/low_rank.py:85(sample_cached_cholesky)\n", - " 53 0.000 0.000 0.048 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/autograd/__init__.py:358(grad)\n", - " 53 0.000 0.000 0.046 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/autograd/graph.py:816(_engine_run_backward)\n", - " 53 0.046 0.001 0.046 0.001 {method 'run_backward' of 'torch._C._EngineBase' objects}\n", - " 55 0.000 0.000 0.042 0.001 /Users/saitcakmak/botorch/botorch/models/gpytorch.py:407(posterior)\n", - " 55 0.000 0.000 0.030 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:50(psd_safe_cholesky)\n", - " 55 0.000 0.000 0.030 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:12(_psd_safe_cholesky)\n", - " 55 0.001 0.000 0.029 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/models/exact_gp.py:252(__call__)\n", - " 55 0.029 0.001 0.029 0.001 {built-in method torch._C._linalg.linalg_cholesky_ex}\n", - " 55 0.001 0.000 0.020 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/models/exact_prediction_strategies.py:308(exact_prediction)\n", - " 385/330 0.000 0.000 0.015 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/utils/memoize.py:54(g)\n", - " 165/110 0.000 0.000 0.015 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:22(wrapped)\n", - " 55 0.000 0.000 0.012 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:408(to_dense)\n", - " 55 0.000 0.000 0.012 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:342(evaluate_kernel)\n", - " 165/110 0.000 0.000 0.011 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/module.py:30(__call__)\n", - " 110 0.000 0.000 0.008 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/kernels/kernel.py:459(__call__)\n", - " 990 0.004 0.000 0.007 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/functional.py:79(broadcast_shapes)\n", - " 661 0.001 0.000 0.007 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/nn/modules/module.py:1935(__setattr__)\n", - " 55 0.001 0.000 0.006 0.000 /Users/saitcakmak/botorch/botorch/models/transforms/outcome.py:372(untransform_posterior)\n", - " 55 0.001 0.000 0.006 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/linear_operator/operators/_linear_operator.py:2788(__getitem__)\n", - " 55 0.000 0.000 0.006 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/kernels/rbf_kernel.py:68(forward)\n", - " 990/550 0.001 0.000 0.006 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_tensor.py:32(__init__)\n", - "2035/1595 0.001 0.000 0.005 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/linear_operator/operators/_linear_operator.py:2291(shape)\n", - " 1 0.000 0.000 0.005 0.005 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_optimize.py:203(_prepare_scalar_function)\n", - " 1 0.000 0.000 0.005 0.005 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/scipy/optimize/_differentiable_functions.py:166(__init__)\n", - " 1 0.000 0.000 0.005 0.005 /Users/saitcakmak/botorch/botorch/optim/initializers.py:245(gen_batch_initial_conditions)\n", - " 55 0.000 0.000 0.005 0.000 /Users/saitcakmak/botorch/botorch/models/gp_regression.py:239(forward)\n", - " 165 0.000 0.000 0.005 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/pyro/distributions/distribution.py:21(__call__)\n", - " 55 0.000 0.000 0.004 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/kernels/kernel.py:312(covar_dist)\n", - " 165 0.001 0.000 0.004 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/distributions/multivariate_normal.py:45(__init__)\n", - " 55 0.001 0.000 0.004 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/kernels/kernel.py:26(sq_dist)\n", - " 55 0.000 0.000 0.004 0.000 /Users/saitcakmak/botorch/botorch/models/model.py:248(eval)\n", + " 1 0.000 0.000 0.358 0.358 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:415(optimize_acqf)\n", + " 1 0.000 0.000 0.358 0.358 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:547(_optimize_acqf)\n", + " 1 0.000 0.000 0.358 0.358 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:258(_optimize_acqf_batch)\n", + " 1 0.000 0.000 0.347 0.347 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/optimize.py:294(_optimize_batch_candidates)\n", + " 1 0.000 0.000 0.347 0.347 /opt/anaconda3/lib/python3.9/site-packages/botorch/generation/gen.py:43(gen_candidates_scipy)\n", + " 1 0.000 0.000 0.346 0.346 /opt/anaconda3/lib/python3.9/site-packages/botorch/optim/utils/timeout.py:17(minimize_with_timeout)\n", + " 1 0.000 0.000 0.346 0.346 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_minimize.py:45(minimize)\n", + " 1 0.003 0.003 0.345 0.345 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/lbfgsb.py:210(_minimize_lbfgsb)\n", + " 284 0.003 0.000 0.338 0.001 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/optimize.py:65(_compute_if_needed)\n", + " 142 0.000 0.000 0.338 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:264(fun_and_grad)\n", + " 143 0.000 0.000 0.337 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:231(_update_fun)\n", + " 142 0.000 0.000 0.337 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:136(update_fun)\n", + " 142 0.000 0.000 0.337 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/_differentiable_functions.py:129(fun_wrapped)\n", + " 142 0.000 0.000 0.337 0.002 /opt/anaconda3/lib/python3.9/site-packages/scipy/optimize/optimize.py:72(__call__)\n", + " 142 0.003 0.000 0.333 0.002 /opt/anaconda3/lib/python3.9/site-packages/botorch/generation/gen.py:175(f_np_wrapper)\n", + " 864/144 0.002 0.000 0.206 0.001 /opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/module.py:1494(_call_impl)\n", + " 144 0.000 0.000 0.205 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/utils/transforms.py:326(decorated)\n", + " 144 0.002 0.000 0.205 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/utils/transforms.py:266(decorated)\n", + " 144 0.004 0.000 0.200 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/acquisition/monte_carlo.py:325(forward)\n", + " 142 0.001 0.000 0.196 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/generation/gen.py:229(f)\n", + " 284/142 0.001 0.000 0.129 0.001 /opt/anaconda3/lib/python3.9/site-packages/torch/autograd/__init__.py:204(grad)\n", + " 284/142 0.098 0.000 0.127 0.001 {method 'run_backward' of 'torch._C._EngineBase' objects}\n", + " 144 0.001 0.000 0.114 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/models/gpytorch.py:340(posterior)\n", + " 144 0.003 0.000 0.094 0.001 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/models/exact_gp.py:251(__call__)\n", + " 144 0.002 0.000 0.065 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/models/exact_prediction_strategies.py:259(exact_prediction)\n", + " 144 0.000 0.000 0.055 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/acquisition/acquisition.py:160(get_posterior_samples)\n", + " 144 0.000 0.000 0.053 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/sampling/normal.py:34(forward)\n", + " 432/288 0.001 0.000 0.049 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/module.py:30(__call__)\n", + " 1008/864 0.001 0.000 0.048 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/utils/memoize.py:54(g)\n", + " 144 0.001 0.000 0.047 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/posteriors/gpytorch.py:105(rsample_from_base_samples)\n", + " 432/288 0.001 0.000 0.045 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:22(wrapped)\n", + " 144 0.003 0.000 0.044 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/distributions/multivariate_normal.py:198(rsample)\n", + " 144 0.000 0.000 0.037 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:408(to_dense)\n", + " 288 0.001 0.000 0.036 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/kernel.py:453(__call__)\n", + " 144 0.001 0.000 0.036 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:342(evaluate_kernel)\n", + " 284/142 0.000 0.000 0.033 0.000 /opt/anaconda3/lib/python3.9/site-packages/torch/autograd/function.py:264(apply)\n", + " 284/142 0.002 0.000 0.033 0.000 /Users/saitcakmak/linear_operator/linear_operator/functions/_matmul.py:33(backward)\n", + " 144 0.001 0.000 0.031 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/scale_kernel.py:108(forward)\n", + " 142 0.004 0.000 0.028 0.000 /Users/saitcakmak/linear_operator/linear_operator/operators/_linear_operator.py:339(_bilinear_derivative)\n", + " 144 0.007 0.000 0.028 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/matern_kernel.py:86(forward)\n", + " 430/286 0.001 0.000 0.025 0.000 /Users/saitcakmak/linear_operator/linear_operator/operators/_linear_operator.py:1815(matmul)\n", + " 288 0.021 0.000 0.021 0.000 {method 'max' of 'torch._C._TensorBase' objects}\n", + " 288/144 0.001 0.000 0.020 0.000 /Users/saitcakmak/linear_operator/linear_operator/utils/memoize.py:54(g)\n", + " 430/286 0.001 0.000 0.019 0.000 /opt/anaconda3/lib/python3.9/site-packages/torch/autograd/function.py:501(apply)\n", + " 144 0.001 0.000 0.019 0.000 /Users/saitcakmak/linear_operator/linear_operator/operators/_linear_operator.py:2126(root_decomposition)\n", + " 430/286 0.003 0.000 0.018 0.000 {built-in method apply}\n", + " 144 0.001 0.000 0.017 0.000 /opt/anaconda3/lib/python3.9/site-packages/botorch/models/gp_regression.py:174(forward)\n", + " 286 0.000 0.000 0.017 0.000 /Users/saitcakmak/linear_operator/linear_operator/operators/triangular_linear_operator.py:104(_matmul)\n", + " 430/286 0.001 0.000 0.016 0.000 /Users/saitcakmak/linear_operator/linear_operator/functions/_matmul.py:9(forward)\n", + " 144 0.000 0.000 0.016 0.000 /Users/saitcakmak/linear_operator/linear_operator/operators/_linear_operator.py:1299(cholesky)\n", "\n", "\n", - "CPU times: user 1.13 s, sys: 437 ms, total: 1.57 s\n", - "Wall time: 254 ms\n" + "CPU times: user 342 ms, sys: 88.3 ms, total: 430 ms\n", + "Wall time: 369 ms\n" ] }, { "data": { "text/plain": [ - "'1.15.0'" + "'1.7.3'" ] }, - "execution_count": 2, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -273,7 +294,7 @@ "source": [ "%%time\n", "\n", - "acqf = qNoisyExpectedImprovement(model, train_X)\n", + "acqf = qNoisyExpectedImprovement(model, train_X, cache_root=False)\n", "\n", "# eval and maximise acq functions\n", "with cProfile.Profile() as pr:\n", @@ -295,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "id": "fb5c4839", "metadata": { "execution": { @@ -318,55 +339,54 @@ "name": "stdout", "output_type": "stream", "text": [ - " 195202 function calls (187502 primitive calls) in 0.282 seconds\n", + " 192002 function calls (176502 primitive calls) in 0.382 seconds\n", "\n", " Ordered by: cumulative time\n", - " List reduced from 297 to 30 due to restriction <0.1>\n", + " List reduced from 290 to 29 due to restriction <0.1>\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", - " 200/100 0.000 0.000 0.178 0.002 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/nn/modules/module.py:1732(_wrapped_call_impl)\n", - " 200/100 0.001 0.000 0.177 0.002 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/nn/modules/module.py:1740(_call_impl)\n", - " 100 0.000 0.000 0.177 0.002 /Users/saitcakmak/botorch/botorch/utils/transforms.py:340(decorated)\n", - " 100 0.000 0.000 0.177 0.002 /Users/saitcakmak/botorch/botorch/utils/transforms.py:278(decorated)\n", - " 100 0.005 0.000 0.175 0.002 /Users/saitcakmak/botorch/botorch/acquisition/monte_carlo.py:254(forward)\n", - " 100 0.001 0.000 0.170 0.002 /Users/saitcakmak/botorch/botorch/acquisition/monte_carlo.py:277(_non_reduced_forward)\n", - " 100 0.002 0.000 0.158 0.002 /Users/saitcakmak/botorch/botorch/acquisition/monte_carlo.py:592(_get_samples_and_objectives)\n", - " 100 0.000 0.000 0.103 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/_tensor.py:525(backward)\n", - " 100 0.000 0.000 0.103 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/autograd/__init__.py:242(backward)\n", - " 100 0.000 0.000 0.101 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/autograd/graph.py:816(_engine_run_backward)\n", - " 100 0.100 0.001 0.100 0.001 {method 'run_backward' of 'torch._C._EngineBase' objects}\n", - " 100 0.001 0.000 0.088 0.001 /Users/saitcakmak/botorch/botorch/models/gpytorch.py:407(posterior)\n", - " 100 0.001 0.000 0.065 0.001 /Users/saitcakmak/botorch/botorch/acquisition/cached_cholesky.py:123(_get_f_X_samples)\n", - " 100 0.006 0.000 0.064 0.001 /Users/saitcakmak/botorch/botorch/utils/low_rank.py:85(sample_cached_cholesky)\n", - " 100 0.002 0.000 0.063 0.001 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/models/exact_gp.py:252(__call__)\n", - " 100 0.002 0.000 0.045 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/models/exact_prediction_strategies.py:308(exact_prediction)\n", - " 700/600 0.001 0.000 0.035 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/utils/memoize.py:54(g)\n", - " 300/200 0.000 0.000 0.034 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:22(wrapped)\n", - " 100 0.000 0.000 0.030 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:408(to_dense)\n", - " 100 0.001 0.000 0.029 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:342(evaluate_kernel)\n", - " 300/200 0.001 0.000 0.026 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/module.py:30(__call__)\n", - " 200 0.001 0.000 0.020 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/kernels/kernel.py:459(__call__)\n", - " 100 0.000 0.000 0.016 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/kernels/rbf_kernel.py:68(forward)\n", - " 1200 0.002 0.000 0.013 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/nn/modules/module.py:1935(__setattr__)\n", - " 1800 0.008 0.000 0.013 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/torch/functional.py:79(broadcast_shapes)\n", - " 300 0.012 0.000 0.012 0.000 {method 'matmul' of 'torch._C.TensorBase' objects}\n", - " 100 0.002 0.000 0.012 0.000 /Users/saitcakmak/botorch/botorch/models/transforms/outcome.py:372(untransform_posterior)\n", - " 100 0.001 0.000 0.012 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/linear_operator/operators/_linear_operator.py:2788(__getitem__)\n", - " 100 0.000 0.000 0.011 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/kernels/kernel.py:312(covar_dist)\n", - "1800/1000 0.001 0.000 0.011 0.000 /opt/anaconda3/envs/botorch/lib/python3.10/site-packages/gpytorch/lazy/lazy_tensor.py:32(__init__)\n", + " 100 0.000 0.000 0.192 0.002 /opt/anaconda3/lib/python3.9/site-packages/torch/_tensor.py:428(backward)\n", + " 100 0.000 0.000 0.191 0.002 /opt/anaconda3/lib/python3.9/site-packages/torch/autograd/__init__.py:106(backward)\n", + " 200/100 0.141 0.001 0.190 0.002 {method 'run_backward' of 'torch._C._EngineBase' objects}\n", + " 600/100 0.002 0.000 0.188 0.002 /opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/module.py:1494(_call_impl)\n", + " 100 0.000 0.000 0.188 0.002 /opt/anaconda3/lib/python3.9/site-packages/botorch/utils/transforms.py:326(decorated)\n", + " 100 0.001 0.000 0.188 0.002 /opt/anaconda3/lib/python3.9/site-packages/botorch/utils/transforms.py:266(decorated)\n", + " 100 0.005 0.000 0.184 0.002 /opt/anaconda3/lib/python3.9/site-packages/botorch/acquisition/monte_carlo.py:325(forward)\n", + " 100 0.001 0.000 0.097 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/models/gpytorch.py:340(posterior)\n", + " 100 0.002 0.000 0.082 0.001 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/models/exact_gp.py:251(__call__)\n", + " 100 0.002 0.000 0.060 0.001 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/models/exact_prediction_strategies.py:259(exact_prediction)\n", + " 100 0.000 0.000 0.060 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/acquisition/acquisition.py:160(get_posterior_samples)\n", + " 100 0.000 0.000 0.059 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/sampling/normal.py:34(forward)\n", + " 200/100 0.000 0.000 0.056 0.001 /opt/anaconda3/lib/python3.9/site-packages/torch/autograd/function.py:264(apply)\n", + " 200/100 0.002 0.000 0.055 0.001 /Users/saitcakmak/linear_operator/linear_operator/functions/_matmul.py:33(backward)\n", + " 100 0.001 0.000 0.055 0.001 /opt/anaconda3/lib/python3.9/site-packages/botorch/posteriors/gpytorch.py:105(rsample_from_base_samples)\n", + " 100 0.007 0.000 0.053 0.001 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/distributions/multivariate_normal.py:198(rsample)\n", + " 100 0.013 0.000 0.052 0.001 /Users/saitcakmak/linear_operator/linear_operator/operators/_linear_operator.py:339(_bilinear_derivative)\n", + " 300/200 0.000 0.000 0.045 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/module.py:30(__call__)\n", + " 700/600 0.001 0.000 0.045 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/utils/memoize.py:54(g)\n", + " 300/200 0.001 0.000 0.042 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:22(wrapped)\n", + " 100 0.000 0.000 0.036 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:408(to_dense)\n", + " 100 0.001 0.000 0.035 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/lazy/lazy_evaluated_kernel_tensor.py:342(evaluate_kernel)\n", + " 200 0.001 0.000 0.035 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/kernel.py:453(__call__)\n", + " 100 0.001 0.000 0.031 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/scale_kernel.py:108(forward)\n", + " 300/200 0.001 0.000 0.030 0.000 /Users/saitcakmak/linear_operator/linear_operator/operators/_linear_operator.py:1815(matmul)\n", + " 100 0.005 0.000 0.028 0.000 /opt/anaconda3/lib/python3.9/site-packages/gpytorch/kernels/matern_kernel.py:86(forward)\n", + " 300/200 0.001 0.000 0.026 0.000 /opt/anaconda3/lib/python3.9/site-packages/torch/autograd/function.py:501(apply)\n", + " 300/200 0.002 0.000 0.025 0.000 {built-in method apply}\n", + " 200 0.000 0.000 0.025 0.000 /Users/saitcakmak/linear_operator/linear_operator/operators/triangular_linear_operator.py:104(_matmul)\n", "\n", "\n", - "CPU times: user 1.15 s, sys: 629 ms, total: 1.78 s\n", - "Wall time: 286 ms\n" + "CPU times: user 363 ms, sys: 171 ms, total: 534 ms\n", + "Wall time: 387 ms\n" ] }, { "data": { "text/plain": [ - "'1.15.0'" + "'1.7.3'" ] }, - "execution_count": 3, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" }