docs(steering): resource log: delivery plan (tracks, first slices, deferred list with revisit triggers)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-10-12 08:00:30 +00:00
parent 680a8bb641
commit 19c9f616fb
Signed by untrusted user: rshen
GPG key ID: 80533536B0EB651C

View file

@ -9,6 +9,41 @@ silently.
- **Status values:** `open` (not discussed), `discussing` (user input recorded, not final), `leaning` (direction agreed, details open), `decided`, `deferred` (later, with a reason).
- **Changes:** update an item in place and add a dated line under "History". When an item is decided, also update the documents it names.
- **IDs:** R = resource model, P = provisioner, N = new questions raised in discussion, PR = proposals.
- **Start here:** "Delivery plan" (tracks, first slices, the decisions each needs, the deliberately deferred items). Then proposals, then question tables.
## Delivery plan: tracks and slices (proposed 2026-10-12, status: discussing)
The proposals below are many (PR-1 to PR-15, about 50 questions). They do not have to be decided or built together. This plan keeps them tractable, so none is forgotten and none blocks unrelated work. Not yet copied into `resource-model.md` or the roadmap (pending user confirmation).
**Why it is tractable:**
- **Optional and additive:** a job that uses none of it behaves as today (LSF-compatible defaults), so each piece lands on its own.
- **One vocabulary:** roles plus typed relationships (PR-14) cover placement inside a job, between jobs and toward data. Supply (PR-1) covers hosts, pools, datasets and provisioned resources.
- **Hard boundary:** the scheduler sees only placement constraints and cached numbers. Lifecycle, plumbing, staging and providers live outside it.
| Track | First slice (small, useful alone) | Decisions needed for the first slice | Later slices | Proposals |
|---|---|---|---|---|
| **A. Roles** | Named compound parts; the role (part index) on every allocation, WAL/snapshot field-complete; per-task role, rank and hostfile environment | N31, N45 | — | PR-12, PR-15 (1, 8) |
| **B. Relationships and placement** | Jobspec skeleton with only `colocate`/`spread` inside a job (scope host or switch); relationship-aware search across parts; topology labels from config | N41, N42 (v1 kinds), N46, N47, N29 (config only) | `exchange`; lifecycle kinds (`sidecar-of`, `init-of`, `fate`); job-step runtime (N36); between-job groups (PR-11, N44); `cu[]` syntax and relax policy (N21, N22); rank order (N23); QoS | PR-10, PR-11, PR-13, PR-14, PR-15 |
| **C. Supply** | `resource-distribution-mapping` shared pools (licenses), shaped as the PR-1 supply map | R1, PR-1 | runtime reporters (R2); hosts as supply entries (PR-4, N1); provider proxies (PR-2, N2a/N2b); provisioning (P1–P9) | PR-1, PR-2, PR-4 |
| **D. Data and I/O** | Directory provider on a shared volume, `<user>/<jobid>/{in,out,err}`; brings back `-i/-o/-e/-outdir`; user isolation | N6, N12, N14, N15 | datasets (PR-5, N3); staging (PR-3); data dependencies (PR-8, N16–N19); job-I/O details (N7, N8); CSI (C3) | PR-3, PR-5, PR-6, PR-7, PR-8, PR-9 |
| **E. Devices** | GPU instances with simple attributes (count plus NVLink domain) | R5 | MIG (R7); NIC rails; topology-aware allocator via `affinity[]` | PR-10 (level 1) |
**Order:** A first; B builds on A; C, D and E are independent of each other and of A/B. Questions not listed for a first slice stay open until their slice comes up.
**Deliberately deferred** (each needs telemetry or a mature base first). Revisit when the named prerequisite exists:
| Item | Revisit when |
|---|---|
| Interference-aware placement (N37) | node telemetry for contention exists |
| Bandwidth as reserved counters (N38) | node isolation (track B later slice) is in place |
| QoS classes for co-located serving and batch (N39) | services (`service-supervision`) and node isolation exist |
| Multi-job gangs (`gang-groups`, backlog, N24) | RL post-training or independent serving pools reach the roadmap |
| CSI compatibility (C3, R4) | track D needs a storage backend without a native provider, or containers (R6) arrive |
| Data sharing between users (N20) | datasets (PR-5) exist |
| Per-role resize (N33) | `job-resize` starts |
| Per-task replacement in running jobs (N32) | `service-supervision` starts |
| Claims as RBAC objects and quotas (R3) | the RBAC discussion the user deferred |
| Multi-host actual-usage reconciliation (N50) | after track A, if accounting for multi-role jobs matters |
| Reservation and plan-ahead for large topology jobs (N25) | track B's first slice shows starvation of large jobs |
## Proposals under discussion (user, 2026-10-11)
@ -416,6 +451,7 @@ Source: the CSI specification, from general knowledge; to be checked against the
| C3 | CSI compatibility: nice-to-have or a must? If a must, which side: the controller plugin through the proxy, the node plugin on the worker, or both? | discussing | Background and recommendation in "CSI notes" below (2026-10-11). |
## History
- 2026-10-12: user noted the requirements are complex → "Delivery plan" section: five tracks (roles, relationships and placement, supply, data and I/O, devices), first slices with the decisions each needs, and a deferred list with revisit triggers, so that nothing is forgotten.
- 2026-10-12: user asked about the interaction with compound resreqs → PR-15 (12 interactions; named parts, relationship-aware cross-part search, role on every allocation, cache-key and alternative rules); N45–N50 added.
- 2026-10-12: user asked for a uniform approach to describe task relationships → PR-14 (canonical jobspec with typed relationship records; shorthands compile into it); N41–N44 added.
- 2026-10-12: user raised task-level cooperation (contention, data exchange, piped dependencies, more) → PR-13 (task relationship model with typed edges between roles; allocation plus job-step runtime); N35–N40 added.