/benchmarks

Some performance tests for actuarial applications

Primary LanguagePythonMIT LicenseMIT

Benchmarking

We provide benchmarks to encourage collaboration and competition in making actuarial software run faster than ever before.

Containerized benchmarks

We currently only have 1 benchmark, we are working to expand the benchmarks. Open a discussion in this repository if you have any thoughts to share.

Time measurement is currently the best of 3 runs.

benchmark classification container A100-SXM4-40GB H100-SXM5-80GB
BasicTerm_ME 100 Million recursive PyTorch link 15.8284s 7.205s
BasicTerm_ME 100 Million compiled iterative JAX link 3.448s 1.551s

Notes

  • BasicTerm_ME 100 Million
    • You can find lifelib's modelpoint file with 10,000 modelpoints as model_point_table.xlsx. We use these modelpoints, but repeat them 10,000 times for 100,000,000 modelpoints.

GitHub-hosted runners

These benchmarks run in GitHub-hosted runners in GitHub actions. Used for benchmarks that are not computationally intensive.

Benchmarks in this repository:

The below results are generated by the benchmarking scripts in the folders for each language. These scripts are run automatically by GitHub Actions and populate the results below.

basic_term_benchmark:
- Julia array basic_term:
    minimum time: TrialEstimate(30.279 ms)
    result: 1.4489630534602132e7
  Julia recursive basic_term:
    minimum time: TrialEstimate(84.812 ms)
    result: 1.4489630534602132e7
- Python array numpy basic_term_m:
    minimum time: 83.45314299992879 milliseconds
    result: 14489630.534603368
  Python array pytorch basic_term_m:
    minimum time: 51.54931000004126 milliseconds
    result: 14489630.534603368
  Python lifelib basic_term_m:
    minimum time: 618.0503439999256 milliseconds
    result: 14489630.534601536
  Python recursive numpy basic_term_m:
    minimum time: 63.08064000006652 milliseconds
    result: 14489630.534603368
  Python recursive pytorch basic_term_m:
    minimum time: 75.6699999999455 milliseconds
    result: 14489630.53460337
basic_term_me_benchmark:
- Python heavylight numpy basic_term_me:
    minimum time: 354.6492100000478 milliseconds
    result: 215146132.0684811
  Python lifelib basic_term_me:
    minimum time: 1191.792300999964 milliseconds
    result: 215146132.06848112
  Python recursive numpy basic_term_me:
    minimum time: 309.30894900006933 milliseconds
    result: 215146132.0684814
exposures:
- Julia ExperienceAnalysis.jl:
    minimum time: TrialEstimate(29.659 ms)
    num_rows: 141281
- R actxps:
    min: 486.248656 ms
    num_rows: 141281
mortality:
- Julia MortalityTables.jl:
    minimum time: TrialEstimate(229.507 μs)
    result: 1904.4865526636793
- Python PyMort:
    minimum time: 9.425531999909253 milliseconds
    result: 1904.4865526636793
savings_benchmark:
- Julia Benchmarks savings:
    minimum time: TrialEstimate(119.226 ms)
    result: 3.507113709040273e12
- Python lifelib cashvalue_me_ex4:
    minimum time: 596.2715760000492 milliseconds
    result: 3507113709040.141
  Python recursive numpy cashvalue_me_ex4:
    minimum time: 543.3022800000344 milliseconds
    result: 3507113709040.124