| 91 | | 3. Monitor the job's output via the following command, substituting the job ID for <jobID>. |
| 92 | | |
| 93 | | {{{ |
| 94 | | [tulaneID@cypress1 ~]$ tail -f log_<jobID>.* |
| 95 | | }}} |
| 96 | | |
| 97 | | 4. Here are normal results for the output and error files, '''log_<jobID>.err''' and '''log_<jobID>.out''', observing that the job cancelled and requeued itself many times. (Not all cancellations were captured in the error file.) |
| 98 | | |
| 99 | | {{{ |
| 100 | | [tulaneID@cypress1 ~]$cat log_3300699.err |
| 101 | | slurmstepd: *** JOB 3300699 CANCELLED AT 2026-03-13T22:22:57 *** |
| 102 | | slurmstepd: *** JOB 3300699 CANCELLED AT 2026-03-13T22:25:27 *** |
| 103 | | slurmstepd: *** JOB 3300699 CANCELLED AT 2026-03-13T22:27:57 *** |
| 104 | | }}} |
| 105 | | |
| 106 | | {{{ |
| 107 | | [tulaneID@cypress1 ~]$cat log_3300699.out |
| 108 | | Info[20260313-22:18:16]: Start on cypress01-066; JOB_ID=3300699; RESTARTS=0 |
| 109 | | Info[20260313-22:18:16]: Settings: |
| 110 | | Info[20260313-22:18:16]: MODULE_LIST=anaconda3/2023.07 |
| 111 | | Info[20260313-22:18:16]: APP_CMD=python3 checkpoint_signal_iter.py |
| 112 | | Info[20260313-22:18:16]: LAUNCH_MODE=direct |
| 113 | | Info[20260313-22:18:16]: SRUN_ARGS=-n 1 |
| 114 | | Info[20260313-22:18:16]: TIME_LIMIT=00:03:00 |
| 115 | | Info[20260313-22:18:16]: MARGIN_SEC=60 |
| 116 | | Info[20260313-22:18:16]: CKPT_PATH=state_iter_py.txt |
| 117 | | Info[20260313-22:18:16]: CHECKPOINT_EVERY=20 |
| 118 | | Info[20260313-22:18:16]: MAX_ITER=500 |
| 119 | | Info[20260313-22:18:16]: MAX_RESTARTS=10 |
| 120 | | === BEGIN JOB SNAPSHOT (scontrol) === |
| 121 | | JobId=3300699 Name=ckpt_requeue_demo |
| 122 | | Priority=80808 Nice=0 Account=<groupID> QOS=normal |
| 123 | | JobState=RUNNING Reason=None Dependency=(null) |
| 124 | | Requeue=1 Restarts=0 BatchFlag=1 ExitCode=0:0 |
| 125 | | RunTime=00:00:01 TimeLimit=00:03:00 TimeMin=N/A |
| 126 | | StartTime=2026-03-13T22:18:16 EndTime=2026-03-13T22:21:16 |
| 127 | | Partition=centos7 AllocNode:Sid=cypress2:33768 |
| 128 | | === END JOB SNAPSHOT (scontrol) === |
| | 96 | 4. You can monitor job outputs of both the checkpoint_submitter.sh and the checkpoint_runner.sh jobs as they are updated by executing the following '''tail''' command using the '''-F''' option to retry once per second, then using Ctrl+C to exit the retry process entirely. |
| | 97 | |
| | 98 | {{{ |
| | 99 | [tulaneID@cypress1 ~]$ tail -F log* |
| | 100 | }}} |
| | 101 | |
| | 102 | == Overriding the default settings == |
| | 103 | |
| | 104 | To customize your workflow, see [wiki://Workshops/JobCheckpointing/Examples#Overridingdefaultsettings Overriding default settings] for overriding the default settings in the checkpoint submitter according to your needs. |
| | 105 | |
| | 106 | == Sample run outputs == |
| | 107 | |
| | 108 | === List of output files === |
| | 109 | |
| | 110 | Here is a list of all output files from a sample run sorted by time, latest-to-earliest |
| | 111 | |
| | 112 | {{{ |
| | 113 | [tulaneID@cypress2 ~]$ls -lt *.csv *.err *.out *.png *.txt |
| | 114 | -rw-r--r-- 1 tulaneID hpcstaff 1404 Apr 1 16:14 log_submitter_3303041.out |
| | 115 | -rw-r--r-- 1 tulaneID hpcstaff 480 Apr 1 16:14 anomaly_details.csv |
| | 116 | -rw-r--r-- 1 tulaneID hpcstaff 54778 Apr 1 16:14 anomaly_stats_table.png |
| | 117 | -rw-r--r-- 1 tulaneID hpcstaff 44362 Apr 1 16:14 resource_trend.png |
| | 118 | -rw-r--r-- 1 tulaneID hpcstaff 757 Apr 1 16:14 log_submitter_3303041.err |
| | 119 | -rw-r--r-- 1 tulaneID hpcstaff 48683 Apr 1 16:14 progress_with_anomalies.png |
| | 120 | -rw-r--r-- 1 tulaneID hpcstaff 509 Apr 1 16:14 worker_usage.csv |
| | 121 | -rw-r--r-- 1 tulaneID hpcstaff 727 Apr 1 16:14 log_submitter_3303039.out |
| | 122 | -rw-r--r-- 1 tulaneID hpcstaff 18 Apr 1 16:14 submitter_state.txt |
| | 123 | -rw-r--r-- 1 tulaneID hpcstaff 824 Apr 1 16:12 log_runner_3303040.out |
| | 124 | -rw------- 1 tulaneID hpcstaff 3 Apr 1 16:12 state_iter_py.txt |
| | 125 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:11 log_runner_3303040.err |
| | 126 | -rw-r--r-- 1 tulaneID hpcstaff 727 Apr 1 16:11 log_submitter_3303037.out |
| | 127 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:11 log_submitter_3303039.err |
| | 128 | -rw-r--r-- 1 tulaneID hpcstaff 40 Apr 1 16:11 worker_ids.txt |
| | 129 | -rw-r--r-- 1 tulaneID hpcstaff 957 Apr 1 16:11 log_runner_3303038.out |
| | 130 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:09 log_runner_3303038.err |
| | 131 | -rw-r--r-- 1 tulaneID hpcstaff 727 Apr 1 16:09 log_submitter_3303035.out |
| | 132 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:09 log_submitter_3303037.err |
| | 133 | -rw-r--r-- 1 tulaneID hpcstaff 957 Apr 1 16:08 log_runner_3303036.out |
| | 134 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:06 log_runner_3303036.err |
| | 135 | -rw-r--r-- 1 tulaneID hpcstaff 727 Apr 1 16:06 log_submitter_3303033.out |
| | 136 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:06 log_submitter_3303035.err |
| | 137 | -rw-r--r-- 1 tulaneID hpcstaff 957 Apr 1 16:05 log_runner_3303034.out |
| | 138 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:03 log_runner_3303034.err |
| | 139 | -rw-r--r-- 1 tulaneID hpcstaff 734 Apr 1 16:03 log_submitter_3303031.out |
| | 140 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:03 log_submitter_3303033.err |
| | 141 | -rw-r--r-- 1 tulaneID hpcstaff 949 Apr 1 16:03 log_runner_3303032.out |
| | 142 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:01 log_runner_3303032.err |
| | 143 | -rw-r--r-- 1 tulaneID hpcstaff 0 Apr 1 16:01 log_submitter_3303031.err |
| | 144 | }}} |
| | 145 | |
| | 146 | === Sample checkpoint submitter logs === |
| | 147 | |
| | 148 | Here are the first and last instances from among the multiple log files generated by the sequence of jobs running the job script [wiki://Workshops/JobCheckpointing/Examples#checkpoint_submitter.sh checkpoint_submitter.sh]. |
| | 149 | |
| | 150 | The first job in the sequence was submitted by the user, and all other jobs thereafter in that sequence were submitted by the job script itself via '''self-restarting'''. |
| | 151 | |
| | 152 | ==== Listing of the initial checkpoint submitter log - starting workflow ==== |
| | 153 | |
| | 154 | Here is the listing of the first log file, '''log_submitter_3303031.out''', generated by [wiki://Workshops/JobCheckpointing/Examples#checkpoint_submitter.sh checkpoint_submitter.sh] ending with the message "Submitter approaching timeout -> restarting self. Submitted batch job 3303033." |
| | 155 | |
| | 156 | {{{ |
| | 157 | [tulaneID@cypress2 ~]$cat log_submitter_3303031.out |
| | 158 | Info[20260401-16:01:12]: Start on cypress01-066; JOBID=3303031 |
| | 159 | Info[20260401-16:01:12]: Submitter settings: |
| | 160 | Info[20260401-16:01:12]: CKPT_PATH=state_iter_py.txt |
| | 161 | Info[20260401-16:01:12]: MAX_ITER=500 |
| | 162 | Info[20260401-16:01:12]: RUNNER_SCRIPT=checkpoint_runner.sh |
| | 163 | Info[20260401-16:01:12]: SUBMITTER_MARGIN_SEC=60 |
| | 164 | Info[20260401-16:01:12]: SUBMITTER_TIME_LIMIT=00:03:30 |
| | 165 | Info[20260401-16:01:12]: No previous state found; starting fresh. |
| | 166 | Info[20260401-16:01:12]: Submitter cycle: 0 |
| | 167 | Info[20260401-16:01:12]: Current checkpoint iteration: 0 |
| | 168 | Info[20260401-16:01:12]: Submitted worker: 3303032 |
| | 169 | Info[20260401-16:01:12]: Waiting on worker 3303032 |
| | 170 | Info[20260401-16:03:52]: Submitter approaching timeout -> restarting self |
| | 171 | Submitted batch job 3303033 |
| | 172 | }}} |
| | 173 | |
| | 174 | ==== Listing of the final checkpoint submitter log - completed workflow ==== |
| | 175 | |
| | 176 | Here is the listing of the final log file, '''log_submitter_3303041.out''', generated by [wiki://Workshops/JobCheckpointing/Examples#checkpoint_submitter.sh checkpoint_submitter.sh] ending with the message "Workflow complete. Exiting submitter." |
| | 177 | |
| | 178 | {{{ |
| | 179 | [tulaneID@cypress2 ~]$cat log_submitter_3303041.out |
| | 180 | Info[20260401-16:14:35]: Start on cypress01-066; JOBID=3303041 |
| | 181 | Info[20260401-16:14:35]: Submitter settings: |
| | 182 | Info[20260401-16:14:35]: CKPT_PATH=state_iter_py.txt |
| | 183 | Info[20260401-16:14:35]: MAX_ITER=500 |
| | 184 | Info[20260401-16:14:35]: RUNNER_SCRIPT=checkpoint_runner.sh |
| | 185 | Info[20260401-16:14:35]: SUBMITTER_MARGIN_SEC=60 |
| | 186 | Info[20260401-16:14:35]: SUBMITTER_TIME_LIMIT=00:03:30 |
| | 187 | Info[20260401-16:14:35]: Loaded state: submitter_cycle=5 |
| | 188 | Info[20260401-16:14:35]: Submitter cycle: 5 |
| | 189 | Info[20260401-16:14:35]: Current checkpoint iteration: 501 |
| | 190 | Info[20260401-16:14:35]: Reached MAX_ITER=500; running final analytics. |
| | 191 | Info[20260401-16:14:35]: Running analytics aggregate_usage.py ... |
| | 192 | Wrote worker_usage.csv |
| | 193 | JobID ElapsedSeconds TotalCPU ... ReqMem NodeList State |
| | 194 | 0 3303032 121 00:00.389 ... 512Mn cypress01-066 FAILED |
| | 195 | 1 3303034 120 00:00.388 ... 512Mn cypress01-066 FAILED |
| | 196 | 2 3303036 121 00:00.389 ... 512Mn cypress01-066 FAILED |
| | 197 | 3 3303038 120 00:00.391 ... 512Mn cypress01-066 FAILED |
| | 198 | 4 3303040 22 00:00.374 ... 512Mn cypress01-066 COMPLETED |
| | 199 | |
| | 200 | [5 rows x 9 columns] |
| | 201 | Info[20260401-16:14:36]: Running analytics plot_progress.py ... |
| | 202 | Saved progress_with_anomalies.png |
| | 203 | Saved resource_trend.png |
| | 204 | Saved anomaly_details.csv |
| | 205 | Saved anomaly_stats_table.png |
| | 206 | Info[20260401-16:14:41]: Workflow complete. Exiting submitter. |
| | 207 | }}} |
| | 208 | |
| | 209 | === Sample checkpoint runner logs === |
| | 210 | |
| | 211 | Here are the first and last output logs of the sequence of jobs generated by the job script [wiki://Workshops/JobCheckpointing/Examples#checkpoint_runner.sh checkpoint_runner.sh]. |
| | 212 | |
| | 213 | All of the jobs in that sequence were submitted by the [wiki://Workshops/JobCheckpointing/Examples#checkpoint_submitter.sh checkpoint_submitter.sh] job script. |
| | 214 | |
| | 215 | ==== Listing of the initial checkpoint runner log - starting application ==== |
| | 216 | |
| | 217 | Here is the listing of the intial log file, '''log_runner_3303032.out''', generated by the job script [wiki://Workshops/JobCheckpointing/Examples#checkpoint_runner.sh checkpoint_runner.sh] ending with message "Timeout + checkpoint advance detected (0->120)." |
| | 218 | |
| | 219 | {{{ |
| | 220 | [tulaneID@cypress2 ~]$cat log_runner_3303032.out |
| | 221 | Info[20260401-16:01:13]: Start on cypress01-066; JOBID=3303032 |
| | 222 | Info[20260401-16:01:13]: Runner settings: |
| | 223 | Info[20260401-16:01:13]: APP_CMD=python3 checkpoint_signal_iter.py |
| | 224 | Info[20260401-16:01:13]: CHECKPOINT_EVERY=20 |
| | 225 | Info[20260401-16:01:13]: CKPT_PATH=state_iter_py.txt |
| | 226 | Info[20260401-16:01:13]: LAUNCH_MODE=direct |
| | 227 | Info[20260401-16:01:13]: MAX_ITER=500 |
| | 228 | Info[20260401-16:01:13]: MODULE_LIST=anaconda3/2023.07 |
| | 229 | Info[20260401-16:01:13]: RUNNER_MARGIN_SEC=60 |
| | 230 | Info[20260401-16:01:13]: RUNNER_TIME_LIMIT=00:03:00 |
| | 231 | Info[20260401-16:01:13]: SRUN_ARGS=-n 1 |
| | 232 | Info[20260401-16:01:13]: Loading modules. |
| 136 | | Info[20260313-22:20:17]: Program exit code (from timeout wrapper): 124 |
| 137 | | Info[20260313-22:20:17]: Timeout TERM observed; checkpoint advanced (0->120). Requeueing... |
| 138 | | Info[20260313-22:20:17]: Requeued via scontrol. |
| 139 | | Info[20260313-22:20:57]: Start on cypress01-066; JOB_ID=3300699; RESTARTS=1 |
| 140 | | Info[20260313-22:20:57]: Settings: |
| 141 | | Info[20260313-22:20:57]: MODULE_LIST=anaconda3/2023.07 |
| 142 | | Info[20260313-22:20:57]: APP_CMD=python3 checkpoint_signal_iter.py |
| 143 | | Info[20260313-22:20:57]: LAUNCH_MODE=direct |
| 144 | | Info[20260313-22:20:57]: SRUN_ARGS=-n 1 |
| 145 | | Info[20260313-22:20:57]: TIME_LIMIT=00:03:00 |
| 146 | | Info[20260313-22:20:57]: MARGIN_SEC=60 |
| 147 | | Info[20260313-22:20:57]: CKPT_PATH=state_iter_py.txt |
| 148 | | Info[20260313-22:20:57]: CHECKPOINT_EVERY=20 |
| 149 | | Info[20260313-22:20:57]: MAX_ITER=500 |
| 150 | | Info[20260313-22:20:57]: MAX_RESTARTS=10 |
| 151 | | === BEGIN JOB SNAPSHOT (scontrol) === |
| 152 | | JobId=3300699 Name=ckpt_requeue_demo |
| 153 | | Priority=80808 Nice=0 Account=<groupID> QOS=normal |
| 154 | | JobState=RUNNING Reason=None Dependency=(null) |
| 155 | | Requeue=1 Restarts=1 BatchFlag=1 ExitCode=0:0 |
| 156 | | RunTime=00:00:00 TimeLimit=00:03:00 TimeMin=N/A |
| 157 | | StartTime=2026-03-13T22:20:57 EndTime=2026-03-13T22:23:57 |
| 158 | | Partition=centos7 AllocNode:Sid=cypress2:33768 |
| 159 | | === END JOB SNAPSHOT (scontrol) === |
| 160 | | Resuming from i=120 (iteration-based every 20) |
| 161 | | [periodic/iter] saved i=140 |
| 162 | | [periodic/iter] saved i=160 |
| 163 | | [periodic/iter] saved i=180 |
| 164 | | [periodic/iter] saved i=200 |
| 165 | | [periodic/iter] saved i=220 |
| 166 | | SIGTERM: saving i=240 and exiting 99 |
| 167 | | Info[20260313-22:22:57]: Program exit code (from timeout wrapper): 124 |
| 168 | | Info[20260313-22:22:57]: Timeout TERM observed; checkpoint advanced (120->240). Requeueing... |
| 169 | | Info[20260313-22:22:57]: Requeued via scontrol. |
| 170 | | Info[20260313-22:23:27]: Start on cypress01-066; JOB_ID=3300699; RESTARTS=2 |
| 171 | | Info[20260313-22:23:27]: Settings: |
| 172 | | Info[20260313-22:23:27]: MODULE_LIST=anaconda3/2023.07 |
| 173 | | Info[20260313-22:23:27]: APP_CMD=python3 checkpoint_signal_iter.py |
| 174 | | Info[20260313-22:23:27]: LAUNCH_MODE=direct |
| 175 | | Info[20260313-22:23:27]: SRUN_ARGS=-n 1 |
| 176 | | Info[20260313-22:23:27]: TIME_LIMIT=00:03:00 |
| 177 | | Info[20260313-22:23:27]: MARGIN_SEC=60 |
| 178 | | Info[20260313-22:23:27]: CKPT_PATH=state_iter_py.txt |
| 179 | | Info[20260313-22:23:27]: CHECKPOINT_EVERY=20 |
| 180 | | Info[20260313-22:23:27]: MAX_ITER=500 |
| 181 | | Info[20260313-22:23:27]: MAX_RESTARTS=10 |
| 182 | | === BEGIN JOB SNAPSHOT (scontrol) === |
| 183 | | JobId=3300699 Name=ckpt_requeue_demo |
| 184 | | Priority=80808 Nice=0 Account=<groupID> QOS=normal |
| 185 | | JobState=RUNNING Reason=None Dependency=(null) |
| 186 | | Requeue=1 Restarts=2 BatchFlag=1 ExitCode=0:0 |
| 187 | | RunTime=00:00:00 TimeLimit=00:03:00 TimeMin=N/A |
| 188 | | StartTime=2026-03-13T22:23:27 EndTime=2026-03-13T22:26:27 |
| 189 | | Partition=centos7 AllocNode:Sid=cypress2:33768 |
| 190 | | === END JOB SNAPSHOT (scontrol) === |
| 191 | | Resuming from i=240 (iteration-based every 20) |
| 192 | | [periodic/iter] saved i=260 |
| 193 | | [periodic/iter] saved i=280 |
| 194 | | [periodic/iter] saved i=300 |
| 195 | | [periodic/iter] saved i=320 |
| 196 | | [periodic/iter] saved i=340 |
| 197 | | SIGTERM: saving i=360 and exiting 99 |
| 198 | | Info[20260313-22:25:27]: Program exit code (from timeout wrapper): 124 |
| 199 | | Info[20260313-22:25:27]: Timeout TERM observed; checkpoint advanced (240->360). Requeueing... |
| 200 | | Info[20260313-22:25:27]: Requeued via scontrol. |
| 201 | | Info[20260313-22:25:57]: Start on cypress01-066; JOB_ID=3300699; RESTARTS=3 |
| 202 | | Info[20260313-22:25:57]: Settings: |
| 203 | | Info[20260313-22:25:57]: MODULE_LIST=anaconda3/2023.07 |
| 204 | | Info[20260313-22:25:57]: APP_CMD=python3 checkpoint_signal_iter.py |
| 205 | | Info[20260313-22:25:57]: LAUNCH_MODE=direct |
| 206 | | Info[20260313-22:25:57]: SRUN_ARGS=-n 1 |
| 207 | | Info[20260313-22:25:57]: TIME_LIMIT=00:03:00 |
| 208 | | Info[20260313-22:25:57]: MARGIN_SEC=60 |
| 209 | | Info[20260313-22:25:57]: CKPT_PATH=state_iter_py.txt |
| 210 | | Info[20260313-22:25:57]: CHECKPOINT_EVERY=20 |
| 211 | | Info[20260313-22:25:57]: MAX_ITER=500 |
| 212 | | Info[20260313-22:25:57]: MAX_RESTARTS=10 |
| 213 | | === BEGIN JOB SNAPSHOT (scontrol) === |
| 214 | | JobId=3300699 Name=ckpt_requeue_demo |
| 215 | | Priority=80808 Nice=0 Account=<groupID> QOS=normal |
| 216 | | JobState=RUNNING Reason=None Dependency=(null) |
| 217 | | Requeue=1 Restarts=3 BatchFlag=1 ExitCode=0:0 |
| 218 | | RunTime=00:00:00 TimeLimit=00:03:00 TimeMin=N/A |
| 219 | | StartTime=2026-03-13T22:25:57 EndTime=2026-03-13T22:28:57 |
| 220 | | Partition=centos7 AllocNode:Sid=cypress2:33768 |
| 221 | | === END JOB SNAPSHOT (scontrol) === |
| 222 | | Resuming from i=360 (iteration-based every 20) |
| 223 | | [periodic/iter] saved i=380 |
| 224 | | [periodic/iter] saved i=400 |
| 225 | | [periodic/iter] saved i=420 |
| 226 | | [periodic/iter] saved i=440 |
| 227 | | [periodic/iter] saved i=460 |
| 228 | | SIGTERM: saving i=480 and exiting 99 |
| 229 | | Info[20260313-22:27:57]: Program exit code (from timeout wrapper): 124 |
| 230 | | Info[20260313-22:27:57]: Timeout TERM observed; checkpoint advanced (360->480). Requeueing... |
| 231 | | Info[20260313-22:27:57]: Requeued via scontrol. |
| 232 | | Info[20260313-22:28:20]: Start on cypress01-066; JOB_ID=3300699; RESTARTS=4 |
| 233 | | Info[20260313-22:28:20]: Settings: |
| 234 | | Info[20260313-22:28:20]: MODULE_LIST=anaconda3/2023.07 |
| 235 | | Info[20260313-22:28:20]: APP_CMD=python3 checkpoint_signal_iter.py |
| 236 | | Info[20260313-22:28:20]: LAUNCH_MODE=direct |
| 237 | | Info[20260313-22:28:20]: SRUN_ARGS=-n 1 |
| 238 | | Info[20260313-22:28:20]: TIME_LIMIT=00:03:00 |
| 239 | | Info[20260313-22:28:20]: MARGIN_SEC=60 |
| 240 | | Info[20260313-22:28:20]: CKPT_PATH=state_iter_py.txt |
| 241 | | Info[20260313-22:28:20]: CHECKPOINT_EVERY=20 |
| 242 | | Info[20260313-22:28:20]: MAX_ITER=500 |
| 243 | | Info[20260313-22:28:20]: MAX_RESTARTS=10 |
| 244 | | === BEGIN JOB SNAPSHOT (scontrol) === |
| 245 | | JobId=3300699 Name=ckpt_requeue_demo |
| 246 | | Priority=80808 Nice=0 Account=<groupID> QOS=normal |
| 247 | | JobState=RUNNING Reason=None Dependency=(null) |
| 248 | | Requeue=1 Restarts=4 BatchFlag=1 ExitCode=0:0 |
| 249 | | RunTime=00:00:02 TimeLimit=00:03:00 TimeMin=N/A |
| 250 | | StartTime=2026-03-13T22:28:18 EndTime=2026-03-13T22:31:18 |
| 251 | | Partition=centos7 AllocNode:Sid=cypress2:33768 |
| 252 | | === END JOB SNAPSHOT (scontrol) === |
| | 240 | Info[20260401-16:03:13]: Program exit code (from timeout wrapper): 124 |
| | 241 | Info[20260401-16:03:13]: Timeout + checkpoint advance detected (0->120). |
| | 242 | }}} |
| | 243 | |
| | 244 | ==== Listing of the final checkpoint runner log - completed application ==== |
| | 245 | |
| | 246 | Here is the listing of the final log file, '''log_runner_3303040.out''', generated by [wiki://Workshops/JobCheckpointing/Examples#checkpoint_runner.sh checkpoint_runner.sh] ending with message "Application finished all iterations." |
| | 247 | |
| | 248 | {{{ |
| | 249 | [tulaneID@cypress2 ~]$cat log_runner_3303040.out |
| | 250 | Info[20260401-16:11:54]: Start on cypress01-066; JOBID=3303040 |
| | 251 | Info[20260401-16:11:54]: Runner settings: |
| | 252 | Info[20260401-16:11:54]: APP_CMD=python3 checkpoint_signal_iter.py |
| | 253 | Info[20260401-16:11:54]: CHECKPOINT_EVERY=20 |
| | 254 | Info[20260401-16:11:54]: CKPT_PATH=state_iter_py.txt |
| | 255 | Info[20260401-16:11:54]: LAUNCH_MODE=direct |
| | 256 | Info[20260401-16:11:54]: MAX_ITER=500 |
| | 257 | Info[20260401-16:11:54]: MODULE_LIST=anaconda3/2023.07 |
| | 258 | Info[20260401-16:11:54]: RUNNER_MARGIN_SEC=60 |
| | 259 | Info[20260401-16:11:54]: RUNNER_TIME_LIMIT=00:03:00 |
| | 260 | Info[20260401-16:11:55]: SRUN_ARGS=-n 1 |
| | 261 | Info[20260401-16:11:55]: Loading modules. |
| 256 | | Info[20260313-22:28:41]: Program exit code (from timeout wrapper): 0 |
| 257 | | Info[20260313-22:28:41]: Completed. |
| 258 | | }}} |
| | 265 | Info[20260401-16:12:16]: Program exit code (from timeout wrapper): 0 |
| | 266 | Info[20260401-16:12:16]: Application finished all iterations. |
| | 267 | }}} |
| | 268 | |
| | 269 | === Listings of post-workflow analysis output files === |
| | 270 | |
| | 271 | The following is the complete, annotated listing of all the generated .csv and .txt files |
| | 272 | |
| | 273 | {{{ |
| | 274 | [tulaneID@cypress2 ~]$tail -n +1 *.csv *.txt |
| | 275 | ==> anomaly_details.csv <== |
| | 276 | JobID,StartTime,ElapsedSeconds,MaxRSS_MiB,TimeZ,MemModZ,AnomalyType |
| | 277 | 3303032,2026-04-01 16:01:13,121.0,14.88494873046875,0.5126573320092711,0.0,none |
| | 278 | 3303034,2026-04-01 16:03:53,120.0,14.8773193359375,0.487278256167228,0.0,none |
| | 279 | 3303036,2026-04-01 16:06:33,121.0,14.8773193359375,0.5126573320092711,0.0,none |
| | 280 | 3303038,2026-04-01 16:09:14,120.0,14.881134033203123,0.487278256167228,0.0,none |
| | 281 | 3303040,2026-04-01 16:11:54,22.0,13.06915283203125,-1.999871176352998,639.4260000005955,memory |
| | 282 | |
| | 283 | ==> worker_usage.csv <== |
| | 284 | JobID,ElapsedSeconds,TotalCPU,MaxRSS,MaxRSS_bytes,MaxRSS_MiB,ReqMem,NodeList,State |
| | 285 | 3303032,121,00:00.389,15608K,15608000.0,14.88494873046875,512Mn,cypress01-066,FAILED |
| | 286 | 3303034,120,00:00.388,15600K,15600000.0,14.8773193359375,512Mn,cypress01-066,FAILED |
| | 287 | 3303036,121,00:00.389,15600K,15600000.0,14.8773193359375,512Mn,cypress01-066,FAILED |
| | 288 | 3303038,120,00:00.391,15604K,15604000.0,14.881134033203125,512Mn,cypress01-066,FAILED |
| | 289 | 3303040,22,00:00.374,13704K,13704000.0,13.06915283203125,512Mn,cypress01-066,COMPLETED |
| | 290 | |
| | 291 | ==> state_iter_py.txt <== |
| | 292 | 501 |
| | 293 | ==> submitter_state.txt <== |
| | 294 | submitter_cycle=5 |
| | 295 | |
| | 296 | ==> worker_ids.txt <== |
| | 297 | 3303032 |
| | 298 | 3303034 |
| | 299 | 3303036 |
| | 300 | 3303038 |
| | 301 | 3303040 |
| | 302 | }}} |
| | 303 | |
| | 304 | === Post-workflow analysis plots === |
| | 305 | |
| | 306 | ==== Background ==== |
| | 307 | |
| | 308 | For background on the following plots, see [wiki://Workshops/JobCheckpointing/Examples#Plottingexecutiontimeandmemoryusage Plotting execution time and memory usage]. |
| | 309 | |
| | 310 | ==== Table of anomalies, compute time and memory usage ==== |
| | 311 | |
| | 312 | Here is the plot, '''anomaly_stats_table.png''', showing the table of anomalies, if any, from among all of the [wiki://Workshops/JobCheckpointing/Examples#checkpoint_runner.sh checkpoint_runner.sh] jobs. |
| | 313 | |
| | 314 | [[Image(python_anomaly_stats_table.png)]] |
| | 315 | |
| | 316 | ==== Compute progress ==== |
| | 317 | |
| | 318 | Here is the plot, '''progress_with_anomalies.png''', showing '''Checkpoint Progress''' and '''MaxRSS''' (SLURM max job memory usage) vs '''Wall Time'''. Anomalies, if any, would be overplotted in red. |
| | 319 | |
| | 320 | [[Image(python_progress_with_anomalies.png, width=800px)]] |
| | 321 | |
| | 322 | ==== Execution time and memory usage trends ==== |
| | 323 | |
| | 324 | Here is the plot, '''resource_trend.png''', showing '''Elapsed (time)''' and '''MaxRSS''' vs. '''Worker job index'''. |
| | 325 | |
| | 326 | [[Image(python_resource_trend.png, width=800px)]] |