From 45abf135f8d69a6188662bd14ebaff0310fa5392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sat, 26 Apr 2025 10:12:19 +0200 Subject: [PATCH 1/9] Add OPF benchmark --- perf/opf/Project.toml | 6 ++++++ perf/opf/opf.jl | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 perf/opf/Project.toml create mode 100644 perf/opf/opf.jl diff --git a/perf/opf/Project.toml b/perf/opf/Project.toml new file mode 100644 index 0000000000..710eb8dd4a --- /dev/null +++ b/perf/opf/Project.toml @@ -0,0 +1,6 @@ +[deps] +BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" +Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" +JuMP = "4076af6c-e467-56ae-b986-b466b2749572" +MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +PowerModels = "c36e90e8-916a-50a6-bd94-075b64ef4655" diff --git a/perf/opf/opf.jl b/perf/opf/opf.jl new file mode 100644 index 0000000000..52f23a0695 --- /dev/null +++ b/perf/opf/opf.jl @@ -0,0 +1,30 @@ +ROSETTA_OPF_DIR = "/home/blegat/git/rosetta-opf" +include(joinpath(ROSETTA_OPF_DIR, "jump.jl")) +model = opf_model(parse_data(joinpath(ROSETTA_OPF_DIR, "data/opf_warmup.m"))) +import MathOptInterface as MOI +JuMP.optimize!(model) +ipopt = JuMP.unsafe_backend(model) +ipopt.nlp_model +ad = ipopt.nlp_data.evaluator +x = ipopt.inner.x +g = zeros(length(ipopt.nlp_data.constraint_bounds)) +bench0(ad, x, g) +bench1(ad, x, g) +bench2(ad, x, g) + +function bench0(ad, x, y) + @time MOI.eval_constraint(ad, g, x) +end + +function bench1(ad, x, y) + J = @time MOI.jacobian_structure(ad) + V = zeros(length(J)) + @time MOI.eval_constraint_jacobian(ad, V, x) +end + +function bench2(ad, x, y) + J = @time MOI.hessian_lagrangian_structure(ad) + V = zeros(length(J)) + σ = 1.0 + @time MOI.eval_hessian_lagrangian(ad, V, x, σ, y) +end From ce486313b8cb1bfbaef62bc188c2058ef118ef68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sun, 27 Apr 2025 21:54:32 +0200 Subject: [PATCH 2/9] Add bench --- perf/opf/opf.jl | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/perf/opf/opf.jl b/perf/opf/opf.jl index 52f23a0695..cbc709ba04 100644 --- a/perf/opf/opf.jl +++ b/perf/opf/opf.jl @@ -1,19 +1,21 @@ +import MathOptInterface as MOI ROSETTA_OPF_DIR = "/home/blegat/git/rosetta-opf" include(joinpath(ROSETTA_OPF_DIR, "jump.jl")) model = opf_model(parse_data(joinpath(ROSETTA_OPF_DIR, "data/opf_warmup.m"))) -import MathOptInterface as MOI +JuMP.set_attribute(model, "max_iter", 1) JuMP.optimize!(model) ipopt = JuMP.unsafe_backend(model) ipopt.nlp_model ad = ipopt.nlp_data.evaluator x = ipopt.inner.x g = zeros(length(ipopt.nlp_data.constraint_bounds)) -bench0(ad, x, g) -bench1(ad, x, g) -bench2(ad, x, g) function bench0(ad, x, y) + if !isnothing(ad.backend.objective) + @time MOI.eval_objective(ad, x) + end @time MOI.eval_constraint(ad, g, x) + return end function bench1(ad, x, y) @@ -28,3 +30,15 @@ function bench2(ad, x, y) σ = 1.0 @time MOI.eval_hessian_lagrangian(ad, V, x, σ, y) end + +function bench_opt(model) + @time JuMP.optimize!(model) +end + +JuMP.set_attribute(model, "max_iter", 1) +@profview_allocs JuMP.optimize!(model) + +bench_opt(model) +bench0(ad, x, g) +bench1(ad, x, g) +bench2(ad, x, g) From ae37715398e9c27dd6b6256fc4e0ba5bf55e0ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Mon, 28 Apr 2025 10:21:58 +0200 Subject: [PATCH 3/9] Add odow's bench --- perf/opf/Project.toml | 1 + perf/opf/opf2.jl | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 perf/opf/opf2.jl diff --git a/perf/opf/Project.toml b/perf/opf/Project.toml index 710eb8dd4a..a0dc6dc081 100644 --- a/perf/opf/Project.toml +++ b/perf/opf/Project.toml @@ -3,4 +3,5 @@ BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" JuMP = "4076af6c-e467-56ae-b986-b466b2749572" MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +PGLib = "07a8691f-3d11-4330-951b-3c50f98338be" PowerModels = "c36e90e8-916a-50a6-bd94-075b64ef4655" diff --git a/perf/opf/opf2.jl b/perf/opf/opf2.jl new file mode 100644 index 0000000000..f2b7bcd8b7 --- /dev/null +++ b/perf/opf/opf2.jl @@ -0,0 +1,32 @@ +using Revise +import Ipopt +import JuMP +import MathOptInterface as MOI +import PGLib +import PowerModels + +model = JuMP.direct_model(Ipopt.Optimizer()) +pm = PowerModels.instantiate_model( + PGLib.pglib("pglib_opf_case10000_goc"), + PowerModels.ACPPowerModel, + PowerModels.build_opf; + jump_model = model, +); + +ipopt = JuMP.backend(model) +x = MOI.get(ipopt, MOI.ListOfVariableIndices()) +m, n = length(ipopt.nlp_model.constraints), length(x) + +evaluator = MOI.Nonlinear.Evaluator( + ipopt.nlp_model, + MOI.Nonlinear.SparseReverseMode(), + x, +) +MOI.initialize(evaluator, [:Grad, :Jac, :Hess]) + +H_struct = MOI.hessian_lagrangian_structure(evaluator) +H = zeros(length(H_struct)) +mu = rand(m) +sigma = 0.0 +x_v = rand(n) +@time MOI.eval_hessian_lagrangian(evaluator, H, x_v, sigma, mu) From 48f4d53c2ae76a8e1d0ac84b11c48b4f9c55c059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Mon, 28 Apr 2025 10:45:12 +0200 Subject: [PATCH 4/9] Add BenchmarkTools --- perf/opf/opf2.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/perf/opf/opf2.jl b/perf/opf/opf2.jl index f2b7bcd8b7..45c4cfa7f9 100644 --- a/perf/opf/opf2.jl +++ b/perf/opf/opf2.jl @@ -30,3 +30,5 @@ mu = rand(m) sigma = 0.0 x_v = rand(n) @time MOI.eval_hessian_lagrangian(evaluator, H, x_v, sigma, mu) +using BenchmarkTools +@benchmark MOI.eval_hessian_lagrangian($evaluator, $H, $x_v, $sigma, $mu) seconds = 100 From 39222b563416fbf0da6b5702e48f7b74837879a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Mon, 5 May 2025 21:10:55 +0200 Subject: [PATCH 5/9] Remove opf.jl --- perf/opf/opf.jl | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 perf/opf/opf.jl diff --git a/perf/opf/opf.jl b/perf/opf/opf.jl deleted file mode 100644 index cbc709ba04..0000000000 --- a/perf/opf/opf.jl +++ /dev/null @@ -1,44 +0,0 @@ -import MathOptInterface as MOI -ROSETTA_OPF_DIR = "/home/blegat/git/rosetta-opf" -include(joinpath(ROSETTA_OPF_DIR, "jump.jl")) -model = opf_model(parse_data(joinpath(ROSETTA_OPF_DIR, "data/opf_warmup.m"))) -JuMP.set_attribute(model, "max_iter", 1) -JuMP.optimize!(model) -ipopt = JuMP.unsafe_backend(model) -ipopt.nlp_model -ad = ipopt.nlp_data.evaluator -x = ipopt.inner.x -g = zeros(length(ipopt.nlp_data.constraint_bounds)) - -function bench0(ad, x, y) - if !isnothing(ad.backend.objective) - @time MOI.eval_objective(ad, x) - end - @time MOI.eval_constraint(ad, g, x) - return -end - -function bench1(ad, x, y) - J = @time MOI.jacobian_structure(ad) - V = zeros(length(J)) - @time MOI.eval_constraint_jacobian(ad, V, x) -end - -function bench2(ad, x, y) - J = @time MOI.hessian_lagrangian_structure(ad) - V = zeros(length(J)) - σ = 1.0 - @time MOI.eval_hessian_lagrangian(ad, V, x, σ, y) -end - -function bench_opt(model) - @time JuMP.optimize!(model) -end - -JuMP.set_attribute(model, "max_iter", 1) -@profview_allocs JuMP.optimize!(model) - -bench_opt(model) -bench0(ad, x, g) -bench1(ad, x, g) -bench2(ad, x, g) From a9fc51060f246ef3c770d236546dffb28a55e9a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Mon, 5 May 2025 21:11:24 +0200 Subject: [PATCH 6/9] Rename --- perf/opf/{opf2.jl => opf.jl} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename perf/opf/{opf2.jl => opf.jl} (100%) diff --git a/perf/opf/opf2.jl b/perf/opf/opf.jl similarity index 100% rename from perf/opf/opf2.jl rename to perf/opf/opf.jl From 87dd43ebae51bff4d265e11d65bed4b056ca5930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Mon, 5 May 2025 21:11:32 +0200 Subject: [PATCH 7/9] Remove Revise --- perf/opf/opf.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf/opf/opf.jl b/perf/opf/opf.jl index 45c4cfa7f9..5922ef3ef4 100644 --- a/perf/opf/opf.jl +++ b/perf/opf/opf.jl @@ -1,4 +1,3 @@ -using Revise import Ipopt import JuMP import MathOptInterface as MOI @@ -30,5 +29,6 @@ mu = rand(m) sigma = 0.0 x_v = rand(n) @time MOI.eval_hessian_lagrangian(evaluator, H, x_v, sigma, mu) + using BenchmarkTools @benchmark MOI.eval_hessian_lagrangian($evaluator, $H, $x_v, $sigma, $mu) seconds = 100 From 70a961e68048522c50cba431ace6b8ffc7a0b8a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Mon, 5 May 2025 21:15:03 +0200 Subject: [PATCH 8/9] Add compat bounds --- perf/opf/Project.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/perf/opf/Project.toml b/perf/opf/Project.toml index a0dc6dc081..8e01cb5d12 100644 --- a/perf/opf/Project.toml +++ b/perf/opf/Project.toml @@ -5,3 +5,7 @@ JuMP = "4076af6c-e467-56ae-b986-b466b2749572" MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" PGLib = "07a8691f-3d11-4330-951b-3c50f98338be" PowerModels = "c36e90e8-916a-50a6-bd94-075b64ef4655" + +[compat] +PGLib = "0.2" +PowerModels = "0.21" From 70018e5cc9eb0ab5f50d4f8ff561fbb55782acf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Thu, 8 May 2025 21:24:17 +0200 Subject: [PATCH 9/9] Fix format --- perf/opf/opf.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/perf/opf/opf.jl b/perf/opf/opf.jl index 5922ef3ef4..a666118a7e 100644 --- a/perf/opf/opf.jl +++ b/perf/opf/opf.jl @@ -25,10 +25,10 @@ MOI.initialize(evaluator, [:Grad, :Jac, :Hess]) H_struct = MOI.hessian_lagrangian_structure(evaluator) H = zeros(length(H_struct)) -mu = rand(m) -sigma = 0.0 -x_v = rand(n) -@time MOI.eval_hessian_lagrangian(evaluator, H, x_v, sigma, mu) +μ = rand(m) +σ = 0.0 +v = rand(n) +@time MOI.eval_hessian_lagrangian(evaluator, H, v, σ, μ) using BenchmarkTools -@benchmark MOI.eval_hessian_lagrangian($evaluator, $H, $x_v, $sigma, $mu) seconds = 100 +@benchmark MOI.eval_hessian_lagrangian($evaluator, $H, $v, $σ, $μ) seconds = 100