Add orcd skill for MIT ORCD remote execution#8
Open
satra wants to merge 1 commit into
Open
Conversation
Connects orcd-login.mit.edu (Slurm cluster eofe7) as a remote execution environment and packages what it takes to use it reliably. Entitlements on ORCD are per-person: partition access is gated by Unix group membership, and per-user ceilings come from a QOS that each partition attaches automatically. Neither is guessable, so the scripts discover everything at runtime rather than hardcoding a partition list. `sbatch --test-only` is used as the authoritative access check; it also reports estimated start time, which turns partition choice into a measurement instead of a guess. Three findings that the docs and scripts encode: - SSH requires publickey AND keyboard-interactive (Duo). Setting BatchMode=yes disables keyboard-interactive and always fails with `Permission denied (keyboard-interactive)`, which reads like a rejected key. Connection multiplexing keeps later calls non-interactive instead. - Passing --qos fails for most users, because associations do not permit naming a partition's own QOS. Choose the partition; the QOS follows. - Storage tier is encoded in group names (orcd_rg_<server>_<owner>): fstor* is flash over NFS-over-RDMA, hstor* capacity disk, core* archive. bcs flash scratch measured ~1 GB/s write and 6-10x better small-file metadata than $HOME, which is the default working directory. Also notes two ways to hang a script on this cluster: bare `df -h` blocks on unresponsive network mounts, and /orcd is autofs so listing a parent is not an inventory. Scripts are stdlib-only Python 3 and run locally over one multiplexed SSH connection: orcd_doctor.py (verify access, guide first-time setup), orcd_resources.py (partitions, GPU models, ceilings, live capacity), orcd_storage.py (writable tiers by speed, --setup creates per-user dirs), orcd_submit.py (plan, submit, track). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Connects
orcd-login.mit.edu(Slurm clustereofe7, Engaging) as a remote execution environment and packages what it takes to use it reliably from Claude Code / Cowork / Science.Why a skill rather than a README
Three things about ORCD are easy to get wrong and cost hours each time:
$HOME) is the default working directory.Discovery, not hardcoding
Partition access comes from
AllowGroups; per-user ceilings come from a QOS each partition attaches automatically. Neither is guessable, so the scripts ask the cluster at runtime:scontrol show partitionfor partitions and their gates — notePrivateData=nonehere, so this lists partitions regardless of access and cannot be used as an entitlement list.sbatch --test-onlyas the authoritative yes/no. It queues nothing, and it also reports estimated start time, which turns partition choice into a measurement.sacctmgr show qosfor the ceilings that actually bind, distinguishingMaxTRESPU(yours alone) fromGrpTRES(one pool shared with the whole group, so a colleague's job can block yours).TRESstring. Summingsinfooutput instead undercounts badly, becausesinfocollapses identically configured nodes onto one line.Findings encoded in the scripts and docs
SSH requires
publickeyANDkeyboard-interactive(Duo). The key alone leaves the session at "partial success"; Duo then answers the second stage, usually with zero prompts. So settingBatchMode=yesalways fails withPermission denied (keyboard-interactive)— which reads like a rejected key, and sends people off replacing keys that were fine. Connection multiplexing (ControlMaster+ControlPersist 12h) is what keeps later calls non-interactive.Never pass
--qos. Most associations permit onlynormal, so naming a partition's own QOS fails withInvalid qos specification. Choose the partition; the QOS follows.Storage tier is encoded in group names (
orcd_rg_<server>_<owner>):fstor*is flash over NFS-over-RDMA,hstor*capacity disk,core*archive. Measured on an H100 node (1 GiBdd, plus 500 small-file creation):/orcd/scratch/bcs/001-002(flash)/orcd/compute/bcs/001(flash)/homeTwo non-obvious results:
/orcd/compute/bcs/001has excellent reads but ~25x worse metadata than scratch, so it is for reading shared datasets rather than writing many small files; and node-local/scratch(3.5 TB) exists on some nodes but not on the bcs H100 nodes, while Slurm reportsTmpDisk=0everywhere — so it must be probed, not assumed.These are single samples on a busy shared cluster. The docs present them as indicative snapshots, not constants, and say so.
Two ways to hang a script here: bare
df -hblocks on unresponsive network mounts (it hit a 120s timeout during development), so the scripts read/proc/mountsand size paths individually undertimeout; and/orcdis autofs, so listing a parent is not an inventory — project trees are found by enumerating the LDAP automount maps.Contents
orcd_doctor.py--fixwrites SSH configorcd_resources.pyorcd_storage.py--setupcreates per-user dirsorcd_submit.pyorcd_common.pyPlus
references/setup.md,references/slurm.md,references/storage.md. All scripts are stdlib-only Python 3, run locally over one multiplexed SSH connection, and accept--host; the data-gathering ones accept--json.Onboarding a new group member
ORCD accepts no password over SSH, so the key must be installed via the OnDemand portal (which does support Duo): sign in at https://orcd-ood.mit.edu/, use Clusters → Shell Access, append the public key to
authorized_keys, thenorcd_doctor.py --fixlocally. The doctor prints this walkthrough itself when it detects the key is missing, and reports a missing Slurm association ororcd_rg_*groups as warnings — those need an email to orcd-help@mit.edu, not a config change.Verification
orcd_doctor.pypasses against the live cluster, and correctly fails with the right remedy on bad-DNS and bad-alias paths (exit 1).node1702, got an H100 80GB, exit 0.orcd_storage.py --setupis idempotent.🤖 Generated with Claude Code