Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
bc4f95b
Updating ALCF endpoints to include the synaps-i allocation (to be set…
davramov Jan 23, 2026
37a7921
Updating bl832 config.py to distinguish IRI and SYNAPS-I ALCF endpoints
davramov Jan 23, 2026
ddd1884
Adding the config.yaml file for setting up the globus compute endpoin…
davramov Jan 23, 2026
2233446
Adding the config.yaml file for setting up the globus compute endpoin…
davramov Jan 23, 2026
233fdec
Adding segmentation Prefect task, and segmentation globus compute cod…
davramov Jan 23, 2026
c7c4e08
Making separate ALCF SYNAPS-I endpoint configs for raw, reconstructed…
davramov Jan 23, 2026
89d9f38
Refactoring ALCF reconstruction flow to use the prune_controller class
davramov Jan 26, 2026
9d26b09
Removing old commented out prune code
davramov Jan 26, 2026
f70f856
linting and docstrings
davramov Jan 26, 2026
5e2dd44
Docstrings, linting, and type hints
davramov Jan 26, 2026
dda21bb
Updating globus compute config for segmentation
davramov Jan 26, 2026
af3631e
turning ALCF recon+segmentation into a separate flow from recon+zarr …
davramov Jan 28, 2026
8b85bf6
updating pytest for alcf reconstruction
davramov Jan 28, 2026
d618187
Adjusting endpoint names for synaps
davramov Jan 28, 2026
dbdf877
adding the alcf_forge_recon_segment flow to prefect.yaml as a separat…
davramov Jan 28, 2026
70d2c87
updating bl832 dispatcher to include alcf_forge_recon_segment as a se…
davramov Jan 28, 2026
255e2ab
adding transfer client uuid for ALCF SYNAPS-I
davramov Feb 2, 2026
62c7fc3
this configuration worked for launching segmentation on 1 GPU
davramov Feb 2, 2026
aafd341
Updating segmentation compute endpoint config
davramov Feb 2, 2026
b63b75b
Adding a separate wrapper for segmentation v2. At some point we may w…
davramov Feb 3, 2026
582a330
adding globus compute configs for segmentation (single and multinode)
davramov Feb 4, 2026
ef79075
removing old segment config
davramov Feb 4, 2026
0a43b72
Segmentation wrapper v2 calls the segmentation inference version on p…
davramov Feb 4, 2026
1d28eab
removing stale comments
davramov Feb 4, 2026
ec046aa
removing stale comments
davramov Feb 4, 2026
0dcf022
Cleaning, adding helpful comments
davramov Feb 4, 2026
5267992
typo, and cleaning file paths
davramov Feb 5, 2026
3e87678
Adding ALCF recon multinode
davramov Feb 5, 2026
9fd1ea2
More optimization. Went from 284s on 8 nodes to 77s
davramov Feb 5, 2026
9f6d919
docstring
davramov Feb 5, 2026
d1ea6a7
fixing typo
davramov Feb 10, 2026
9026feb
Segmentation with inference_v4 working
davramov Feb 10, 2026
fba137c
Adding checkpoint v2
davramov Feb 11, 2026
9e9f2f9
adding tasks/flows for segmentation with dino and cellpose on ALCF
davramov Feb 18, 2026
d6a8cd0
Adding combine segmentation results function to the ALCF controller
davramov Feb 18, 2026
c17a707
Updating segmentation directory paths to put each models outputs into…
davramov Feb 18, 2026
5c5ba74
Adding combine_segmentations to the multiseg flow
davramov Feb 18, 2026
021c0b4
updating ALCF conda env for dino/cellpose
davramov Feb 18, 2026
df402d6
Updating the combine step to use the dino/cellpose env
davramov Feb 18, 2026
190c0a3
Adding globus compute configs for dino, cellpose, and combine steps
davramov Feb 18, 2026
ea9675f
linting
davramov Feb 18, 2026
264fe50
Adding globus compute endpoint uuids
davramov Feb 18, 2026
ce62d9f
updating globus compute endpoint uuid and adding integration test fun…
davramov Feb 20, 2026
910b120
linting
davramov Feb 20, 2026
49f4923
adding new flow to prefect.yaml for deployment
davramov Feb 20, 2026
43073e3
updaing dispatcher flow to handle the multisegment option
davramov Feb 20, 2026
7f72f04
Updating to match NERSC deployment
davramov Feb 25, 2026
e304f48
removing commented code
davramov Mar 13, 2026
3210537
removing cellpose flows/tasks
davramov Mar 13, 2026
a490f24
renaming segmentation flow/tasks to segmentation_sam3 so it is obviou…
davramov Mar 13, 2026
37ec49f
Docstrings
davramov Mar 13, 2026
b07e2ed
Adding _tests/bl832/test_alcf.py to test: reconstruction, segmentatio…
davramov Mar 13, 2026
323b5f3
Adding script used to generate latex segmentation timing table in the…
davramov Mar 13, 2026
a756004
linting
davramov Mar 13, 2026
8988087
globus compute config
davramov Jun 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 22 additions & 4 deletions config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,17 +73,35 @@ globus:
uuid: 75b478b2-37af-46df-bfbd-71ed692c6506
name: data832_scratch

alcf832_raw:
alcf832_synaps_raw:
root_path: /data/bl832/raw
uri: alcf.anl.gov
uuid: 728a8e30-32ef-4000-814c-f9ccbc00bf13
name: alcf832_synaps_raw

alcf832_synaps_recon:
root_path: /data/bl832/scratch/reconstruction/
uri: alcf.anl.gov
uuid: 728a8e30-32ef-4000-814c-f9ccbc00bf13
name: alcf832_synaps_recon

alcf832_synaps_segment:
root_path: /data/bl832/scratch/segmentation/
uri: alcf.anl.gov
uuid: 728a8e30-32ef-4000-814c-f9ccbc00bf13
name: alcf832_synaps_segment

alcf832_iri_raw:
root_path: /data/raw
uri: alcf.anl.gov
uuid: 55c3adf6-31f1-4647-9a38-52591642f7e7
name: alcf_raw
name: alcf_iri_raw

alcf832_scratch:
alcf832_iri_scratch:
root_path: /data/scratch
uri: alcf.anl.gov
uuid: 55c3adf6-31f1-4647-9a38-52591642f7e7
name: alcf_scratch
name: alcf_iri_scratch

alcf_eagle832:
root_path: /IRIBeta/als/example
Expand Down
637 changes: 637 additions & 0 deletions orchestration/_tests/test_bl832/test_alcf.py

Large diffs are not rendered by default.

39 changes: 24 additions & 15 deletions orchestration/_tests/test_globus_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,9 @@ def __init__(self) -> None:
"alcf832_raw": MockEndpoint("mock_alcf832_raw_path", MockSecret.for_endpoint("alcf832_raw")),
"alcf832_scratch": MockEndpoint("mock_alcf832_scratch_path", MockSecret.for_endpoint("alcf832_scratch")),
"beegfs_raw": MockEndpoint("mock_beegfs_raw_path", MockSecret.for_endpoint("beegfs_raw")),
"beegfs_scratch": MockEndpoint("mock_beegfs_scratch_path", MockSecret.for_endpoint("beegfs_scratch"))
"beegfs_scratch": MockEndpoint("mock_beegfs_scratch_path", MockSecret.for_endpoint("beegfs_scratch")),
"alcf832_iri_raw": MockEndpoint("mock_alcf832_raw_path", MockSecret.for_endpoint("alcf832_iri_raw")),
"alcf832_iri_scratch": MockEndpoint("mock_alcf832_scratch_path", MockSecret.for_endpoint("alcf832_iri_scratch")),
}

# Mock apps
Expand All @@ -164,8 +166,8 @@ def __init__(self) -> None:
self.spot832 = self.endpoints["spot832"]
self.data832 = self.endpoints["data832"]
self.nersc832 = self.endpoints["nersc832"]
self.alcf832_raw = self.endpoints["alcf832_raw"]
self.alcf832_scratch = self.endpoints["alcf832_scratch"]
self.alcf832_iri_raw = self.endpoints["alcf832_iri_raw"]
self.alcf832_iri_scratch = self.endpoints["alcf832_iri_scratch"]
self.data832_raw = self.endpoints["data832_raw"]
self.data832_scratch = self.endpoints["data832_scratch"]
self.nersc832_alsdev_scratch = self.endpoints["nersc832_alsdev_scratch"]
Expand Down Expand Up @@ -205,7 +207,12 @@ def test_alcf_recon_flow(mocker: MockFixture):
"alcf832_raw": mocker.MagicMock(),
"alcf832_scratch": mocker.MagicMock(),
"bl832-beegfs-raw": mocker.MagicMock(),
"bl832-beegfs-scratch": mocker.MagicMock()
"bl832-beegfs-scratch": mocker.MagicMock(),
"alcf832_iri_raw": mocker.MagicMock(),
"alcf832_iri_scratch": mocker.MagicMock(),
"alcf832_synaps_raw": mocker.MagicMock(),
"alcf832_synaps_recon": mocker.MagicMock(),
"alcf832_synaps_segment": mocker.MagicMock(),
}
)
mocker.patch(
Expand Down Expand Up @@ -256,10 +263,12 @@ def test_alcf_recon_flow(mocker: MockFixture):
return_value=mock_transfer_controller
)

# 7) Patch schedule_pruning => skip real scheduling
mock_schedule_pruning = mocker.patch(
"orchestration.flows.bl832.alcf.schedule_pruning",
return_value=True
# 7) Patch get_prune_controller(...) => skip real scheduling
mock_prune_controller = mocker.MagicMock()
mock_prune_controller.prune.return_value = True
mocker.patch(
"orchestration.flows.bl832.alcf.get_prune_controller",
return_value=mock_prune_controller
)

mocker.patch(
Expand All @@ -285,13 +294,13 @@ def test_alcf_recon_flow(mocker: MockFixture):
assert mock_transfer_controller.copy.call_count == 4, "Should do 4 transfers in success path"
mock_hpc_reconstruct.assert_called_once()
mock_hpc_multires.assert_called_once()
mock_schedule_pruning.assert_called_once()
assert mock_prune_controller.prune.call_count == 5, "Should schedule 5 prune operations in success path"

# Reset for next scenario
mock_transfer_controller.copy.reset_mock()
mock_hpc_reconstruct.reset_mock()
mock_hpc_multires.reset_mock()
mock_schedule_pruning.reset_mock()
mock_prune_controller.prune.reset_mock()

#
# ---------- CASE 2: HPC reconstruction fails ----------
Expand All @@ -308,13 +317,13 @@ def test_alcf_recon_flow(mocker: MockFixture):
assert mock_transfer_controller.copy.call_count == 1, (
"Should only do the first data832->alcf copy before HPC fails"
)
mock_schedule_pruning.assert_not_called()
mock_prune_controller.prune.assert_not_called()

# Reset
mock_transfer_controller.copy.reset_mock()
mock_hpc_reconstruct.reset_mock()
mock_hpc_multires.reset_mock()
mock_schedule_pruning.reset_mock()
mock_prune_controller.prune.reset_mock()

# ---------- CASE 3: Tiff->Zarr fails ----------
mock_transfer_controller.copy.return_value = True
Expand All @@ -329,13 +338,13 @@ def test_alcf_recon_flow(mocker: MockFixture):
# HPC is done, so there's 2 successful transfer (data832->alcf).
# We have not transferred tiff or zarr => total 2 copies
assert mock_transfer_controller.copy.call_count == 2
mock_schedule_pruning.assert_not_called()
mock_prune_controller.prune.assert_not_called()

# Reset
mock_transfer_controller.copy.reset_mock()
mock_hpc_reconstruct.reset_mock()
mock_hpc_multires.reset_mock()
mock_schedule_pruning.reset_mock()
mock_prune_controller.prune.reset_mock()

# ---------- CASE 4: data832->ALCF fails immediately ----------
mock_transfer_controller.copy.return_value = False
Expand All @@ -349,4 +358,4 @@ def test_alcf_recon_flow(mocker: MockFixture):
mock_hpc_multires.assert_not_called()
# The only call is the failing copy
mock_transfer_controller.copy.assert_called_once()
mock_schedule_pruning.assert_not_called()
mock_prune_controller.prune.assert_not_called()
Loading
Loading