Buckets:

glennmatlin's picture
|
download
raw
4.53 kB
# PACE Job Monitor — Agent Dispatch Template
Reusable prompt for dispatching a subagent to monitor SLURM enrichment jobs on PACE ICE.
Invoke by passing this prompt to an Agent tool call with `subagent_type: "general-purpose"`.
## Parameters
Replace these before dispatching:
- `{{JOB_ID}}` — primary array job ID (e.g., `4441409`)
- `{{LAUNCHER_JOB_ID}}` — launcher job ID (e.g., `4441677`)
- `{{TOTAL_TASKS}}` — total array tasks in the full pipeline (e.g., `2826`)
- `{{TOTAL_SHARDS}}` — total shards being processed (e.g., `56514`)
- `{{SHARDS_PER_TASK}}` — shards per array task (e.g., `20`)
- `{{USERNAME}}` — SLURM username (e.g., `gmatlin3`)
- `{{WORKTREE_PATH}}` — worktree path on PACE (e.g., `~/dev/data-attribution-soc91`)
## Agent Prompt
```
You are monitoring SLURM enrichment jobs on PACE ICE. Produce a detailed status
report with timing estimates broken down by GPU type, partition, and node.
IMPORTANT: Run all commands via `ssh pace-ice "command"`. Each SSH call is
independent (no persistent state). Use `2>/dev/null` on all ssh commands to
suppress connection messages.
### Data Collection Steps
Run these in parallel where possible:
1. **Task state counts:**
ssh pace-ice "sacct -j {{JOB_ID}} --format=State --noheader -X 2>/dev/null | sort | uniq -c | sort -rn"
2. **Per-partition breakdown:**
ssh pace-ice "sacct -j {{JOB_ID}} --format=Partition --noheader -X 2>/dev/null | sort | uniq -c | sort -rn"
3. **Completed/failed tasks with timing:**
ssh pace-ice "sacct -j {{JOB_ID}} --format=JobID%20,Partition%12,State%12,Elapsed%12,ExitCode --noheader -X 2>/dev/null | grep -E 'COMPLETED|FAILED' | head -30"
4. **Node distribution (running tasks only):**
ssh pace-ice "squeue -u {{USERNAME}} -j {{JOB_ID}} --format='%.18i %.12P %.30R' --noheader 2>/dev/null | awk '{print \$2, \$3}' | sort | uniq -c | sort -rn"
5. **GPU types on active nodes** (pick 3-5 representative nodes from step 4):
ssh pace-ice "scontrol show node <NODE_NAME> 2>/dev/null | grep -E 'Gres|NodeName|Partitions'"
6. **Shard-level progress from task logs** (check stderr for processing output):
ssh pace-ice "tail -20 ~/scratch/soc91/logs/soc91_enrich/{{JOB_ID}}_0.err 2>/dev/null"
ssh pace-ice "tail -20 ~/scratch/soc91/logs/soc91_enrich/{{JOB_ID}}_0.out 2>/dev/null"
(repeat for 2-3 tasks on different partitions/GPUs)
7. **Launcher status:**
ssh pace-ice "sacct -j {{LAUNCHER_JOB_ID}} --format=JobID,State,Elapsed --noheader -X 2>/dev/null"
ssh pace-ice "tail -15 ~/scratch/soc91/logs/soc91_launcher/{{LAUNCHER_JOB_ID}}.out 2>/dev/null"
ssh pace-ice "cat {{WORKTREE_PATH}}/logs/soc91_enrich/launcher_state_coe-ice.txt 2>/dev/null"
8. **R2 completion check** (if tasks have completed, sample stats.json):
ssh pace-ice "cd {{WORKTREE_PATH}} && source ~/.r2_credentials && python3 -c \"
import boto3, json, os
s3 = boto3.client('s3', endpoint_url='https://0934ab8e84ac8e4e81decaf3eb121337.r2.cloudflarestorage.com', aws_access_key_id=os.environ['R2_ACCESS_KEY_ID'], aws_secret_access_key=os.environ['R2_SECRET_ACCESS_KEY'])
paginator = s3.get_paginator('list_objects_v2')
count = 0
for page in paginator.paginate(Bucket='soc127-dedup', Prefix='soc91-labels/'):
for obj in page.get('Contents', []):
if obj['Key'].endswith('.done'):
count += 1
print(f'Total .done markers in R2: {count}')
\""
### Report Format
Produce a structured report with these sections:
#### 1. Summary
- Total tasks: running / pending / completed / failed
- Overall progress percentage
- Estimated completion time
#### 2. GPU and Partition Breakdown
Table with: partition, GPU type, VRAM, tasks running, tasks completed,
avg elapsed time, throughput (docs/sec if available from logs)
#### 3. Node Distribution
Table with: node name, partition, GPU type, tasks running on it
#### 4. Shard-Level Progress
For sampled tasks: how many shards completed within each task,
docs processed, docs/sec rate, estimated time to task completion
#### 5. Launcher Status
Current state, checkpoint position, next batch to submit
#### 6. R2 Completion Status
Total .done markers (completed shards) in R2
#### 7. ETA Calculation
- Per-task average time (from completed tasks or extrapolation)
- Remaining tasks / concurrent slots = remaining waves
- Wall time estimate for current batch and full pipeline
- Factor in launcher submitting future batches
#### 8. Warnings
Flag any: failures, timeouts, error patterns in logs, stalled tasks,
disk/quota issues, launcher problems
```

Xet Storage Details

Size:
4.53 kB
·
Xet hash:
0700f1c6d297f16eabeffac57af3b01ac80eee476a781ceda218f31ebafe77f3

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.