Skip to content

Commit f6f610f

Browse files
authored
Fix performance test (#3149)
* more narrow timing of simulations * reduce tolerance Closes #3145.
1 parent 8d42dcb commit f6f610f

3 files changed

Lines changed: 53 additions & 28 deletions

File tree

.github/workflows/test_performance.yml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
# import test model
5353
- name: Import test model
5454
run: |
55-
AMICI_IMPORT_NPROCS=2 check_time.sh petab_import python tests/performance/test.py import
55+
AMICI_IMPORT_NPROCS=2 tests/performance/performance_test.py petab_import
5656
5757
- name: "Upload artifact: CS_Signalling_ERBB_RAS_AKT_petab"
5858
uses: actions/upload-artifact@v7
@@ -63,59 +63,59 @@ jobs:
6363
# install model package
6464
- name: Install test model
6565
run: >
66-
check_time.sh install_model tests/performance/test.py compile;
66+
tests/performance/performance_test.py install_model;
6767
for opt in O0 O1 O2;
6868
do
69-
check_time.sh install_model_${opt} tests/performance/test.py compile_${opt};
69+
tests/performance/performance_test.py install_model_${opt};
7070
done
7171
7272
# run simulations
7373
- name: forward_simulation
7474
run: >
75-
check_time.sh forward_simulation tests/performance/test.py forward_simulation;
75+
tests/performance/performance_test.py forward_simulation;
7676
for opt in O0 O1 O2;
7777
do
78-
check_time.sh forward_simulation tests/performance/test.py forward_simulation_${opt};
78+
tests/performance/performance_test.py forward_simulation_${opt};
7979
done
8080
- name: forward_sensitivities
8181
run: >
82-
check_time.sh forward_sensitivities tests/performance/test.py forward_sensitivities;
82+
tests/performance/performance_test.py forward_sensitivities;
8383
for opt in O0 O1 O2;
8484
do
85-
check_time.sh forward_sensitivities tests/performance/test.py forward_sensitivities_${opt};
85+
tests/performance/performance_test.py forward_sensitivities_${opt};
8686
done
8787
- name: adjoint_sensitivities
8888
run: >
89-
check_time.sh adjoint_sensitivities tests/performance/test.py adjoint_sensitivities;
89+
tests/performance/performance_test.py adjoint_sensitivities;
9090
for opt in O0 O1 O2;
9191
do
92-
check_time.sh adjoint_sensitivities tests/performance/test.py adjoint_sensitivities_${opt};
92+
tests/performance/performance_test.py adjoint_sensitivities_${opt};
9393
done
9494
- name: forward_simulation_non_optimal_parameters
9595
run: |
96-
check_time.sh forward_simulation_non_optimal_parameters tests/performance/test.py forward_simulation_non_optimal_parameters;
96+
tests/performance/performance_test.py forward_simulation_non_optimal_parameters;
9797
for opt in O0 O1 O2;
9898
do
99-
check_time.sh forward_simulation_non_optimal_parameters tests/performance/test.py forward_simulation_non_optimal_parameters_${opt};
99+
tests/performance/performance_test.py forward_simulation_non_optimal_parameters_${opt};
100100
done
101101
- name: adjoint_sensitivities_non_optimal_parameters
102102
run: |
103-
check_time.sh adjoint_sensitivities_non_optimal_parameters tests/performance/test.py adjoint_sensitivities_non_optimal_parameters;
103+
tests/performance/performance_test.py adjoint_sensitivities_non_optimal_parameters;
104104
for opt in O0 O1 O2;
105105
do
106-
check_time.sh adjoint_sensitivities_non_optimal_parameters tests/performance/test.py adjoint_sensitivities_non_optimal_parameters_${opt};
106+
tests/performance/performance_test.py adjoint_sensitivities_non_optimal_parameters_${opt};
107107
done
108108
- name: forward_steadystate_sensitivities_non_optimal_parameters
109109
run: |
110-
check_time.sh forward_steadystate_sensitivities_non_optimal_parameters tests/performance/test.py forward_steadystate_sensitivities_non_optimal_parameters;
110+
tests/performance/performance_test.py forward_steadystate_sensitivities_non_optimal_parameters;
111111
for opt in O0 O1 O2;
112112
do
113-
check_time.sh forward_steadystate_sensitivities_non_optimal_parameters tests/performance/test.py forward_steadystate_sensitivities_non_optimal_parameters_${opt};
113+
tests/performance/performance_test.py forward_steadystate_sensitivities_non_optimal_parameters_${opt};
114114
done
115115
- name: adjoint_steadystate_sensitivities_non_optimal_parameters
116116
run: |
117-
check_time.sh adjoint_steadystate_sensitivities_non_optimal_parameters tests/performance/test.py adjoint_steadystate_sensitivities_non_optimal_parameters;
117+
tests/performance/performance_test.py adjoint_steadystate_sensitivities_non_optimal_parameters;
118118
for opt in O0 O1 O2;
119119
do
120-
check_time.sh adjoint_steadystate_sensitivities_non_optimal_parameters tests/performance/test.py adjoint_steadystate_sensitivities_non_optimal_parameters_${opt};
120+
tests/performance/performance_test.py adjoint_steadystate_sensitivities_non_optimal_parameters_${opt};
121121
done
Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import shutil
66
import subprocess
77
import sys
8+
import time
89
from pathlib import Path
910

1011
import amici
1112
import amici.exporters.sundials.de_export
1213
import amici.importers.sbml
1314
import petab.v1 as petab
15+
import yaml
1416
from amici.importers.petab.v1._petab_import import import_model_sbml
1517
from amici.sim.sundials import (
1618
AMICI_SUCCESS,
@@ -21,6 +23,10 @@
2123
run_simulation,
2224
)
2325

26+
reference_times_file = Path(__file__).parent / "reference.yml"
27+
with open(reference_times_file) as f:
28+
reference_times: dict[str, float] = yaml.safe_load(f)
29+
2430

2531
def parse_args():
2632
arg = sys.argv[1]
@@ -153,11 +159,15 @@ def main():
153159
model_dir_compiled = Path(f"model_performance_test_{suffix}")
154160
model_name = "model_performance_test"
155161

156-
if arg == "import":
162+
start_time = time.time()
163+
164+
if arg == "petab_import":
157165
run_import(model_name, model_dir_source)
166+
check_time(arg, time.time() - start_time)
158167
return
159-
elif arg == "compile":
168+
elif arg == "install_model":
160169
compile_model(model_dir_source, model_dir_compiled)
170+
check_time(f"{arg}{suffix}", time.time() - start_time)
161171
return
162172
else:
163173
model_module = amici.import_model_module(
@@ -176,6 +186,21 @@ def main():
176186
rdata = run_simulation(model, solver, edata)
177187

178188
check_results(rdata)
189+
check_time(arg, time.time() - start_time)
190+
191+
192+
def check_time(task: str, time: float):
193+
reference_time = reference_times[task]
194+
if time <= reference_time:
195+
print(
196+
f"Time for task {task} is {time:.2f}s, "
197+
f"which is within the reference time of {reference_time:.2f}s."
198+
)
199+
else:
200+
raise AssertionError(
201+
f"Time for task {task} is {time:.2f}s, "
202+
f"which exceeds the reference time of {reference_time:.2f}s."
203+
)
179204

180205

181206
if __name__ == "__main__":

tests/performance/reference.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
# Reference wall times (seconds) with some buffer
2-
create_sdist: 16
3-
install_sdist: 150
2+
create_sdist: 10
3+
install_sdist: 110
44
petab_import: 720
55
install_model: 60
66
install_model_O0: 40
77
install_model_O1: 45
88
install_model_O2: 60
9-
forward_simulation: 2
10-
forward_sensitivities: 2
11-
adjoint_sensitivities: 2.5
12-
forward_simulation_non_optimal_parameters: 2
13-
adjoint_sensitivities_non_optimal_parameters: 5
14-
forward_steadystate_sensitivities_non_optimal_parameters: 5
15-
adjoint_steadystate_sensitivities_non_optimal_parameters: 4
9+
forward_simulation: 1
10+
forward_sensitivities: 1
11+
adjoint_sensitivities: 1
12+
forward_simulation_non_optimal_parameters: 1
13+
adjoint_sensitivities_non_optimal_parameters: 2
14+
forward_steadystate_sensitivities_non_optimal_parameters: 3
15+
adjoint_steadystate_sensitivities_non_optimal_parameters: 2

0 commit comments

Comments
 (0)