Skip to content

Commit 4fb9727

Browse files
Merge pull request #10 from s-sasaki-earthsea-wizard/bench/issue-21-e2e-pipeline
Add end-to-end CPU vs torch bench harness + 5-scene report (Issue #21)
2 parents 976949c + 0fbf71b commit 4fb9727

16 files changed

Lines changed: 1516 additions & 27 deletions

.gitignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# Bench / profile runs produce machine-dependent artifacts (wall time,
22
# RSS, VRAM-derived auto chunk sizes, hostnames, /home paths) that have
33
# no meaning on a different machine and previously leaked host info
4-
# into the public repo (audited 2026-05-02). The whole logs_*/ tree is
4+
# into the public repo (audited 2026-05-02). Anything matching logs_*
5+
# (directories like logs_baseline/ as well as the end-to-end harness's
6+
# top-level diff files like logs_e2e_<scene>_walls_diff.json) is
57
# therefore untracked.
68
#
79
# What stays tracked under benchmark/: harness scripts (scripts/),
810
# Python utilities (tools/), test fixtures (fixtures/), reports
911
# (reports/), the top-level Makefile, and requirements.txt.
1012
# Numerical findings are transcribed into the corresponding report
1113
# by hand; raw artifacts live only on the developer's machine.
12-
logs_*/
14+
logs_*
1315
__pycache__/
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# CPU baseline fixture for FernandinaSenDT128 — byte-for-byte identical
2+
# to fixtures/FernandinaSenDT128_torch.txt except for the trailing
3+
# `mintpy.*.solver = torch` lines, which are omitted so MintPy uses the
4+
# default cpu solver for both invert_network and correct_topography.
5+
# Used by the Issue #21 end-to-end bench harness paired with the torch
6+
# fixture; the harness asserts that the cpu and torch fixtures differ
7+
# only in the 2 solver lines so the wall comparison is fair.
8+
# vim: set filetype=cfg:
9+
##------------------------------- ISCE/topsStack ----------------------##
10+
#ssaraopt = --platform=SENTINEL-1A,SENTINEL-1B -r 128 -f 589,590,591,592,593 -e 2017-07-01
11+
#sentinelStack.boundingBox = '-1 0.15 -91.6 -90.9'
12+
#sentinelStack.subswath = 1 2 # comment
13+
#sentinelStack.numConnections = 5 # comment
14+
#sentinelStack.azimuthLooks = 5 # comment
15+
#sentinelStack.rangeLooks = 15 # comment
16+
#sentinelStack.filtStrength = 0.2 # comment
17+
#sentinelStack.unwMethod = snaphu # comment
18+
#sentinelStack.coregistration = auto # comment
19+
#subset.y0:y1,x0:x1 = 1150:1600,1070:1670
20+
21+
22+
##-------------------------------- MintPy -----------------------------##
23+
########## 1. Load Data (--load to exit after this step)
24+
## load_data.py -H to check more details and example inputs.
25+
mintpy.load.processor = isce
26+
##---------for ISCE only:
27+
mintpy.load.metaFile = ../reference/IW*.xml
28+
mintpy.load.baselineDir = ../baselines
29+
##---------interferogram datasets:
30+
mintpy.load.unwFile = ../merged/interferograms/*/filt_*.unw
31+
mintpy.load.corFile = ../merged/interferograms/*/filt_*.cor
32+
mintpy.load.connCompFile = ../merged/interferograms/*/filt_*.unw.conncomp
33+
##---------geometry datasets:
34+
mintpy.load.demFile = ../merged/geom_reference/hgt.rdr
35+
mintpy.load.lookupYFile = ../merged/geom_reference/lat.rdr
36+
mintpy.load.lookupXFile = ../merged/geom_reference/lon.rdr
37+
mintpy.load.incAngleFile = ../merged/geom_reference/los.rdr
38+
mintpy.load.azAngleFile = ../merged/geom_reference/los.rdr
39+
mintpy.load.shadowMaskFile = ../merged/geom_reference/shadowMask.rdr
40+
mintpy.load.waterMaskFile = None
41+
42+
mintpy.reference.lalo = -0.30,-91.43
43+
mintpy.topographicResidual.stepDate = 20170910,20180613 #eruption dates
44+
mintpy.deramp = linear

fixtures/FernandinaSenDT128_torch.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# GPU benchmark template — copy of docs/templates/FernandinaSenDT128.txt
2-
# with mintpy.networkInversion.solver = torch added at the end so the
3-
# invert_network step uses the GPU-batched solver.
2+
# with the two opt-in GPU solver flags added at the end so both the
3+
# invert_network and correct_topography steps use the GPU-batched
4+
# solvers. Used by the Issue #21 end-to-end bench harness.
45
# vim: set filetype=cfg:
56
##------------------------------- ISCE/topsStack ----------------------##
67
#ssaraopt = --platform=SENTINEL-1A,SENTINEL-1B -r 128 -f 589,590,591,592,593 -e 2017-07-01
@@ -39,5 +40,6 @@ mintpy.reference.lalo = -0.30,-91.43
3940
mintpy.topographicResidual.stepDate = 20170910,20180613 #eruption dates
4041
mintpy.deramp = linear
4142

42-
##---------GPU acceleration of invert_network (fork-only, opt-in):
43+
##---------GPU acceleration (fork-only, opt-in):
4344
mintpy.networkInversion.solver = torch
45+
mintpy.topographicResidual.solver = torch

fixtures/GalapagosSenDT128_cpu.txt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# CPU baseline fixture for GalapagosSenDT128 — derived from the
2+
# dataset's embedded mintpy/inputs/GalapagosSenDT128.template (Zenodo
3+
# record 4743058). Differs from fixtures/GalapagosSenDT128_torch.txt
4+
# only by the trailing `mintpy.*.solver = torch` lines, which are
5+
# omitted so MintPy uses the default cpu solver for both invert_network
6+
# and correct_topography. Used by the Issue #21 end-to-end bench
7+
# harness paired with the torch fixture.
8+
#
9+
# Raw ISCE inputs referenced under $GALAPAGOS_DIR/... no longer exist
10+
# on disk (the Issue #6 large-scene bench cleaned them up after load).
11+
# The harness pre-seeds ifgramStack.h5 + geometryRadar.h5 symlinks
12+
# into the workdir's inputs/ from the original mintpy/inputs/ so
13+
# smallbaselineApp skips load_data via update-mode; the $GALAPAGOS_DIR
14+
# variable just needs to resolve to a valid path string for parsing.
15+
# vim: set filetype=cfg:
16+
##----------------------------- SentinelStack/ISCE ---------------------##
17+
cleanopt = 1 # [ 0 / 1 / 2 / 3 4] 0: no cleaning, 1: largest files, 2: merged/etc, PROCESS dirs, 3: SLC,RAW, 4: everything
18+
ssaraopt = --platform=SENTINEL-1A,SENTINEL-1B -r 128 -f 587,588,589,590,591,592,593 -e 2018-07-01
19+
processor = isce
20+
sentinelStack.demDir = /nethome/famelung/Sentinel/GalapagosT128SenVVD/DEM
21+
sentinelStack.boundingBox = '-1 0.15 -91.6 -90.9'
22+
sentinelStack.subswath = 1 2 # comment
23+
sentinelStack.numConnections = 5 # comment
24+
sentinelStack.azimuthLooks = 5 # comment
25+
sentinelStack.rangeLooks = 15 # comment
26+
sentinelStack.filtStrength = 0.2 # comment
27+
sentinelStack.unwMethod = snaphu # comment
28+
sentinelStack.coregistration = auto # comment
29+
30+
31+
32+
##-------------------------------- MintPy -----------------------------##
33+
mintpy.load.processor = isce
34+
##---------for ISCE only:
35+
mintpy.load.metaFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/master/IW*.xml
36+
mintpy.load.baselineDir = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/baselines
37+
##---------interferogram datasets:
38+
mintpy.load.unwFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/interferograms/*/filt_*.unw
39+
mintpy.load.corFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/interferograms/*/filt_*.cor
40+
mintpy.load.connCompFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/interferograms/*/filt_*.unw.conncomp
41+
##---------geometry datasets:
42+
mintpy.load.demFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/geom_master/hgt.rdr
43+
mintpy.load.lookupYFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/geom_master/lat.rdr
44+
mintpy.load.lookupXFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/geom_master/lon.rdr
45+
mintpy.load.incAngleFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/geom_master/los.rdr
46+
mintpy.load.azAngleFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/geom_master/los.rdr
47+
mintpy.load.shadowMaskFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/geom_master/shadowMask.rdr
48+
mintpy.load.waterMaskFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/geom_master/waterMask.rdr
49+
mintpy.load.bperpFile = $GALAPAGOS_DIR/GalapagosSenDT128/ISCE/merged/baseline_grid/*/bperp.rdr
50+
51+
mintpy.subset.yx = 400:2400,0:1700
52+
mintpy.reference.lalo = -0.31,-91.22
53+
mintpy.network.endDate = 20180626
54+
mintpy.unwrapError.method = bridging+phase_closure #[bridging / phase_closure / no], auto for no
55+
mintpy.topographicResidual.stepFuncDate = 20150524,20150616,20170321,20170910,20180613 #Wolf,Wolf,CerroAzul,Fernandina,Fernandina
56+
mintpy.deramp = linear

fixtures/GalapagosSenDT128_torch.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# GPU benchmark template for GalapagosSenDT128 — copy of the dataset's
22
# embedded inputs/GalapagosSenDT128.template (Zenodo record 4743058) with
3-
# mintpy.networkInversion.solver = torch added at the end so the
4-
# invert_network step uses the GPU-batched solver. The cpu baseline run
5-
# uses the embedded template directly (no solver line, defaults to cpu).
3+
# the two opt-in GPU solver flags added at the end so both the
4+
# invert_network and correct_topography steps use the GPU-batched
5+
# solvers. The cpu baseline run uses the embedded template directly
6+
# (no solver lines, defaults to cpu). Used by the Issue #21 end-to-end
7+
# bench harness.
68
# vim: set filetype=cfg:
79
##----------------------------- SentinelStack/ISCE ---------------------##
810
cleanopt = 1 # [ 0 / 1 / 2 / 3 4] 0: no cleaning, 1: largest files, 2: merged/etc, PROCESS dirs, 3: SLC,RAW, 4: everything
@@ -46,5 +48,6 @@ mintpy.unwrapError.method = bridging+phase_closure #[bridging /
4648
mintpy.topographicResidual.stepFuncDate = 20150524,20150616,20170321,20170910,20180613 #Wolf,Wolf,CerroAzul,Fernandina,Fernandina
4749
mintpy.deramp = linear
4850

49-
##---------GPU acceleration of invert_network (fork-only, opt-in):
51+
##---------GPU acceleration (fork-only, opt-in):
5052
mintpy.networkInversion.solver = torch
53+
mintpy.topographicResidual.solver = torch

fixtures/KujuAlosAT422F650_cpu.txt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# CPU baseline fixture for KujuAlosAT422F650 — derived from
2+
# docs/templates/KujuAlosAT422F650.txt with the same Issue #19 bench
3+
# overrides as fixtures/KujuAlosAT422F650_torch.txt
4+
# (`troposphericDelay.method = no` to skip ERA5 download for ALOS-1
5+
# L-band 2007-2011 data, `save.hdfEos5 = no` to skip HE5 packaging).
6+
# Differs from the torch fixture only by the trailing
7+
# `mintpy.*.solver = torch` lines so the wall comparison is fair.
8+
# vim: set filetype=cfg:
9+
########## 1. Load Data (--load to exit after this step)
10+
## auto - automatic path pattern for Univ of Miami file structure
11+
## load_data.py -H to check more details and example inputs.
12+
mintpy.load.processor = roipac #[isce,roipac,gamma,], auto for isce
13+
##---------interferogram datasets:
14+
mintpy.load.unwFile = ./../interferograms/*/filt_*.unw #[path2unw_file]
15+
mintpy.load.corFile = ./../interferograms/*/filt_*.cor #[path2cor_file]
16+
mintpy.load.connCompFile = None #[path2conn_file]
17+
mintpy.load.intFile = None #[path2int_file]
18+
##---------geometry datasets:
19+
mintpy.load.demFile = ./../geometry/radar*.hgt #[path2hgt_file]
20+
mintpy.load.lookupYFile = ./../geometry/geomap*.trans #[path2lookup_lat/y_file]
21+
mintpy.load.lookupXFile = ./../geometry/geomap*.trans #[path2lookup_lon/x_file]
22+
mintpy.load.incAngleFile = None #[path2los_file]
23+
mintpy.load.azAngleFile = None #[path2los_file]
24+
mintpy.load.shadowMaskFile = None #[path2shadow_file]
25+
mintpy.load.waterMaskFile = None #[path2water_mask_file]
26+
27+
##————————————————————————————— PROCESSING Options ——-----————————————————————##
28+
mintpy.reference.lalo = 33.0655, 131.2076
29+
mintpy.troposphericDelay.method = no # bench: run on raw timeseries.h5
30+
mintpy.deramp = no
31+
mintpy.save.hdfEos5 = no # bench: skip HE5 packaging

fixtures/KujuAlosAT422F650_torch.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# GPU benchmark template — copy of docs/templates/KujuAlosAT422F650.txt
2-
# with mintpy.networkInversion.solver = torch added at the end so the
3-
# invert_network step uses the GPU-batched solver. Used by Issue #19
4-
# Tier 1 bench survey (extends Fernandina + Galapagos with an ALOS
5-
# L-band / ROI_PAC ingest path).
2+
# with the two opt-in GPU solver flags added at the end so both the
3+
# invert_network and correct_topography steps use the GPU-batched
4+
# solvers. Used by Issue #19 Tier 1 bench survey (ALOS L-band /
5+
# ROI_PAC ingest path) and the Issue #21 end-to-end bench harness.
66
#
77
# Differences from docs/templates beyond the solver line:
88
# - mintpy.troposphericDelay.method = no (skip ERA5 download;
@@ -34,5 +34,6 @@ mintpy.troposphericDelay.method = no # bench: run on raw timeseries.h5
3434
mintpy.deramp = no
3535
mintpy.save.hdfEos5 = no # bench: skip HE5 packaging
3636

37-
##---------GPU acceleration of invert_network (fork-only, opt-in):
37+
##---------GPU acceleration (fork-only, opt-in):
3838
mintpy.networkInversion.solver = torch
39+
mintpy.topographicResidual.solver = torch

fixtures/SanFranBaySenD42_cpu.txt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# CPU baseline fixture for SanFranBaySenD42 — derived from
2+
# docs/templates/SanFranBaySenD42.txt with the Issue #19 bench
3+
# `troposphericDelay.method = no` override applied to match
4+
# fixtures/SanFranBaySenD42_torch.txt (skip ERA5 download for GMTSAR
5+
# bench). Differs from the torch fixture only by the trailing
6+
# `mintpy.*.solver = torch` lines so the wall comparison is fair.
7+
# vim: set filetype=cfg:
8+
## manually add the following metadata
9+
HEADING = -168
10+
ALOOKS = 8
11+
RLOOKS = 32
12+
13+
########## computing resource configuration
14+
mintpy.compute.maxMemory = 8
15+
mintpy.compute.cluster = local
16+
mintpy.compute.numWorker = 4
17+
18+
########## 1. Load Data (--load to exit after this step)
19+
mintpy.load.processor = gmtsar #[isce, aria, hyp3, gmtsar, snap, gamma, roipac], auto for isce
20+
mintpy.load.metaFile = ../supermaster.PRM
21+
mintpy.load.baselineDir = ../baseline_table.dat
22+
##---------interferogram datasets:
23+
mintpy.load.unwFile = ../interferograms/*/unwrap_ll*.grd
24+
mintpy.load.corFile = ../interferograms/*/corr_ll*.grd
25+
##---------geometry datasets:
26+
mintpy.load.demFile = ../geometry/dem.grd
27+
mintpy.load.incAngleFile = ../geometry/incidence_angle.grd
28+
mintpy.load.azAngleFile = ../geometry/azimuth_angle.grd
29+
mintpy.load.waterMaskFile = ../geometry/water_mask.grd
30+
31+
mintpy.reference.lalo = 37.69, -122.07
32+
mintpy.troposphericDelay.method = no
33+
mintpy.deramp = no
34+
mintpy.topographicResidual = yes

fixtures/SanFranBaySenD42_torch.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# GPU benchmark template — copy of docs/templates/SanFranBaySenD42.txt
2-
# with mintpy.networkInversion.solver = torch added at the end so the
3-
# invert_network step uses the GPU-batched solver. Used by Issue #19
4-
# Tier 1 bench survey (extends Fernandina + Galapagos with a GMTSAR
5-
# ingest path + D = 333).
2+
# with the two opt-in GPU solver flags added at the end so both the
3+
# invert_network and correct_topography steps use the GPU-batched
4+
# solvers. Used by Issue #19 Tier 1 bench survey (GMTSAR ingest path
5+
# + D = 333) and the Issue #21 end-to-end bench harness.
66
# vim: set filetype=cfg:
77
## manually add the following metadata
88
HEADING = -168
@@ -32,5 +32,6 @@ mintpy.troposphericDelay.method = no
3232
mintpy.deramp = no
3333
mintpy.topographicResidual = yes
3434

35-
##---------GPU acceleration of invert_network (fork-only, opt-in):
35+
##---------GPU acceleration (fork-only, opt-in):
3636
mintpy.networkInversion.solver = torch
37+
mintpy.topographicResidual.solver = torch

fixtures/SanFranSenDT42_cpu.txt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# CPU baseline fixture for SanFranSenDT42 — derived from
2+
# docs/templates/SanFranSenDT42.txt with the `weightFunc = no`
3+
# inversion speed-up retained to match
4+
# fixtures/SanFranSenDT42_torch.txt. Differs from the torch fixture
5+
# only by the trailing `mintpy.*.solver = torch` lines so the wall
6+
# comparison is fair. Tropo defaults to pyaps (ERA5) on both sides
7+
# matching the upstream docs template.
8+
# vim: set filetype=cfg:
9+
mintpy.load.processor = aria #[isce, aria, snap, gamma, roipac], auto for isce
10+
##---------interferogram datasets:
11+
mintpy.load.unwFile = ../stack/unwrapStack.vrt
12+
mintpy.load.corFile = ../stack/cohStack.vrt
13+
mintpy.load.connCompFile = ../stack/connCompStack.vrt
14+
##---------geometry datasets:
15+
mintpy.load.demFile = ../DEM/*.dem
16+
mintpy.load.incAngleFile = ../incidenceAngle/*.vrt
17+
mintpy.load.azAngleFile = ../azimuthAngle/*.vrt
18+
mintpy.load.waterMaskFile = ../mask/watermask.msk
19+
20+
mintpy.reference.lalo = 37.69, -122.07
21+
mintpy.unwrapError.method = bridging
22+
mintpy.deramp = no
23+
24+
## options to speedup the processing (fast but not the best)
25+
mintpy.networkInversion.weightFunc = no

0 commit comments

Comments
 (0)