Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e09c193
initial commit with multinode support
davramov Jan 6, 2026
21244e5
adding logic for determining qos based on number of nodes requested
davramov Jan 6, 2026
77d15cc
Adding specific tag for microct image (for more efficient caching on …
davramov Jan 6, 2026
9e90a26
Adding reconstruct_multinode() method
davramov Jan 15, 2026
31ed453
Making the cancel_sfapi_job.py script more useful
davramov Jan 15, 2026
a88fd45
in setup.cfg, adding a new section for flake8 to ignore the reconstru…
davramov Jan 15, 2026
3691601
Adding nersc_recon_num_nodes = 4 to Config832, which is used in bl832…
davramov Jan 15, 2026
1f48743
separating single node (production) nersc reconstruction flow from th…
davramov Jan 28, 2026
8ad972f
Making a spearate deployment for the nersc multinode reconstruction flow
davramov Jan 28, 2026
81dd6c9
Creating option to turn on/off the nersc multinode reconstruction flo…
davramov Jan 28, 2026
141a5a6
Updating segmentation to use inference_v4.
davramov Feb 9, 2026
b4cab67
removing comments. segmentation still isn't working
davramov Feb 9, 2026
271d2bf
this configuration worked with 1 node for segmentation, testing with …
davramov Feb 10, 2026
9171ea5
adding nersc_forge_recon_segment_flow to prefect.yaml for deployment
davramov Feb 10, 2026
b5bd66d
removing comments
davramov Feb 10, 2026
3a5b1d2
making config.nersc_recon_num_nodes to set number of nodes for segmen…
davramov Feb 10, 2026
9df2f97
Using the amsc006 reservation for recon+segmentation
davramov Feb 10, 2026
340fcb2
Configuring to use all the nodes in the reservation
davramov Feb 11, 2026
f2f8806
num_nodes fix
davramov Feb 11, 2026
347816d
changing segmentation confidence from 0.5 to 0.2
davramov Feb 11, 2026
dd07993
Setting patch-size=400 and confidence=0.5
davramov Feb 12, 2026
54d832c
confidence=0.2
davramov Feb 12, 2026
e9336dc
Adding prefect variable to override defaults for segmentation
davramov Feb 12, 2026
567899e
updating segmentation to v5
davramov Feb 12, 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
5 changes: 3 additions & 2 deletions config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ globus:
uri: beegfs.als.lbl.gov
uuid: d33b5d6e-1603-414e-93cb-bcb732b7914a
name: bl733-beegfs-data

# 8.3.2 ENDPOINTS

spot832:
Expand Down Expand Up @@ -148,8 +149,8 @@ harbor_images832:
multires_image: tomorecon_nersc_mpi_hdf5@sha256:cc098a2cfb6b1632ea872a202c66cb7566908da066fd8f8c123b92fa95c2a43c

ghcr_images832:
recon_image: ghcr.io/als-computing/microct:master
multires_image: ghcr.io/als-computing/microct:master
recon_image: ghcr.io/als-computing/microct@sha256:1fdfb786726ee03301d624319e3d16702045072f38e2b0cca9d6237e5ab3f5ff
multires_image: ghcr.io/als-computing/microct@sha256:1fdfb786726ee03301d624319e3d16702045072f38e2b0cca9d6237e5ab3f5ff

prefect:
deployments:
Expand Down
2 changes: 2 additions & 0 deletions orchestration/flows/bl832/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,5 @@ def _beam_specific_config(self) -> None:
self.alcf832_scratch = self.endpoints["alcf832_scratch"]
self.scicat = self.config["scicat"]
self.ghcr_images832 = self.config["ghcr_images832"]
self.nersc_recon_num_nodes = 16
self.nersc_segment_num_nodes = 26
32 changes: 28 additions & 4 deletions orchestration/flows/bl832/dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ class FlowParameterMapper:
# From nersc.py
"nersc_recon_flow/nersc_recon_flow": [
"file_path",
"config"],
"nersc_recon_multinode_flow/nersc_recon_multinode_flow": [
"file_path",
"num_nodes",
"config"]
}

Expand All @@ -51,27 +55,37 @@ class DecisionFlowInputModel(BaseModel):
"""
file_path: Optional[str] = Field(default=None)
is_export_control: Optional[bool] = Field(default=False)
num_nodes: Optional[int] = Field(default=4)
config: Optional[Union[dict, Any]] = Field(default_factory=dict)


@task(name="setup_decision_settings")
def setup_decision_settings(alcf_recon: bool, nersc_recon: bool, new_file_832: bool) -> dict:
def setup_decision_settings(
alcf_recon: bool,
nersc_recon: bool,
nersc_recon_multinode: bool,
new_file_832: bool
) -> dict:
"""
This task is used to define the settings for the decision making process of the BL832 beamline.

:param alcf_recon: Boolean indicating whether to run the ALCF reconstruction flow.
:param nersc_recon: Boolean indicating whether to run the NERSC reconstruction flow.
:param nersc_move: Boolean indicating whether to move files to NERSC.
:param nersc_recon_multinode: Boolean indicating whether to run the NERSC multinode reconstruction flow.
:param new_file_832: Boolean indicating whether to move files to NERSC.
:return: A dictionary containing the settings for each flow.
"""
logger = get_run_logger()
try:
logger.info(f"Setting up decision settings: alcf_recon={alcf_recon}, "
f"nersc_recon={nersc_recon}, new_file_832={new_file_832}")
f"nersc_recon={nersc_recon}, "
f"nersc_recon_multinode={nersc_recon_multinode}, "
f"new_file_832={new_file_832}")
# Define which flows to run based on the input settings
settings = {
"alcf_recon_flow/alcf_recon_flow": alcf_recon,
"nersc_recon_flow/nersc_recon_flow": nersc_recon,
"nersc_recon_multinode_flow/nersc_recon_multinode_flow": nersc_recon_multinode,
"new_832_file_flow/new_file_832": new_file_832
}
# Save the settings in a JSON block for later retrieval by other flows
Expand Down Expand Up @@ -149,6 +163,11 @@ async def dispatcher(
nersc_params = FlowParameterMapper.get_flow_parameters("nersc_recon_flow/nersc_recon_flow", available_params)
tasks.append(run_recon_flow_async("nersc_recon_flow/nersc_recon_flow", nersc_params))

if decision_settings.get("nersc_recon_multinode_flow/nersc_recon_multinode_flow"):
nersc_multinode_params = FlowParameterMapper.get_flow_parameters(
"nersc_recon_multinode_flow/nersc_recon_multinode_flow", available_params)
tasks.append(run_recon_flow_async("nersc_recon_multinode_flow/nersc_recon_multinode_flow", nersc_multinode_params))

# Run ALCF and NERSC flows in parallel, if any
if tasks:
try:
Expand All @@ -169,7 +188,12 @@ async def dispatcher(
"""
try:
# Setup decision settings based on input parameters
setup_decision_settings(alcf_recon=True, nersc_recon=True, new_file_832=True)
setup_decision_settings(
alcf_recon=True,
nersc_recon=True,
nersc_recon_multinode=True,
new_file_832=True
)
# Run the main decision flow with the specified parameters
# asyncio.run(dispatcher(
# config={}, # PYTEST, ALCF, NERSC
Expand Down
Loading