Repository navigation
Conversation
droot
force-pushed
the
feat/dashboard-trial-use5
branch
from
October 29, 2026 19:24
ed434f5 to
d4d7d58
Compare
The FFT trainer already measures how many elements a sparse delta changed and what share of the model that is, and returns density_pct from the save, but the command record keeps only result["metrics"], so the figure never reached the inspection API. The worker now keeps last_save_metrics (delta/density_pct, delta/changed_elements, delta/total_elements, delta/layers, time/delta_collect, time/delta_write; empty after a full checkpoint), the processor attaches them to save results, and the API server drops them from the client's save responses, which the SDK's save types do not carry. The steps route and the dashboard's trainer charts pick them up with no further change.
…ainer openrl.recipe=rl is what makes the API server launch the sampler alongside the trainer instead of on the first sample request; the harness never set it, so every RL scenario paid the sampler's start on its first step (about 20 s on an idle H100). Scenarios whose name carries rl or textsql now send it in TINKER_TAGS, next to the fine-tuning type.
…on a fresh cluster k8s/deploy/gke-use5: the FFT bundle plus openrl-dev#383's dashboard for open-rl-dra-use5 (us-east5, 8 x H100, DRA), with what the trial needed around it: a dedicated dashboard service account for Workload Identity, the DCGM exporter and PodMonitorings for the exporter, the scheduler's openrl_gpu_held and the sampler pods, spread placement, and a demo app. The demo app is a small in-cluster FastAPI service on the API server image, code from a ConfigMap, that starts and stops sweeps of RL client Jobs from a page and shows the fleet from the inspection API: Sweep, Fleet, Timeline (occupancy traces per accelerator or job, other-jobs overlay, drag-to-select, hover details) and Weights (the sparse delta per step). It is specific to one cluster and registry. docs/briefs/pr383-dashboard-trial: the findings report for the team and the step-by-step log with screenshots.
droot
force-pushed
the
feat/dashboard-trial-use5
branch
from
October 30, 2026 01:37
d4d7d58 to
886489f
Compare
fleet.activity unioned every op span into a lane's occupancy intervals. An FFT trainer that is not exclusive runs with CPU offload, and its saves run without a time-slicer turn, so those saves were painted as GPU time, inside another worker's real hold on the same claim. The slicer's log shows the claim held by one worker through the whole span. A lane that recorded turns is occupied only during them; its ops still show. A lane without turns (no slicer, or a shared runtime's run lane) keeps the ops as the stand-in.
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.
Draft, for review. This branch stacks on #383 (the five commits of
dashboard/main, rebased onto main at 0644063) and adds what came out of trying that PR on a fresh GKE cluster (open-rl-dra-use5, us-east5, 8 x H100, DRA). The write-up is indocs/briefs/pr383-dashboard-trial/findings.md;notes.mdnext to it is the step-by-step log with every number and screenshot.Commits on top of #383:
density_pctfrom the save, but the command record keeps onlyresult["metrics"], so the figure never reached the inspection API (finding 13 in the report). The worker now keepslast_save_metrics(delta/density_pct,delta/changed_elements,delta/total_elements,delta/layers,time/delta_collect,time/delta_write; empty after a full checkpoint), the processor attaches them to save results, and the API server drops them from the client's save responses, which the SDK's save types do not carry./runs/{id}/stepsand the dashboard's trainer charts show them with no change on the dashboard side. Two unit tests. Verified on the cluster: a three-step Qwen3-0.6B run reported 11.6 %, 7.8 % and 6.0 % of 596 M elements per step.openrl.recipe=rlis what makes the API server launch the sampler alongside the trainer instead of on the first sample request; the harness never set it, so every RL scenario paid the sampler's start on its first step (about 20 s on an idle H100). Scenarios whose name carriesrlortextsqlnow send it inTINKER_TAGS.k8s/deploy/gke-use5/). A small in-cluster FastAPI app on the API server image, code from a ConfigMap, that starts and stops sweeps of RL client Jobs from a page and shows the fleet from Run telemetry and the dashboard #383's inspection API: Sweep (spec editor, start, stop, stop-all), Fleet (the keynote mock's scene, live), Timeline (one occupancy trace per accelerator or per job, other-jobs overlay, drag to select a window, hover details), Weights (the sparse delta per step). The overlay also carries what the trial needed around Run telemetry and the dashboard #383: a dedicated dashboard service account for Workload Identity, the DCGM exporter and threePodMonitorings (exporter, scheduler'sopenrl_gpu_held, sampler pods), spread placement for the scheduler. It is specific to one cluster and one registry; it is here so the review can see it, not to merge as is.What the report says about #383, in one paragraph: the mechanism works as described (placements stamped, records written, every route answers, the UI renders); the items that need attention are goodput charging the server's dispatch wait to "client", a negative
since_last_step_sfrom the cached snapshot, the client-directory depth missing the repo's own e2e layout, nothing scrapingopenrl_gpu_held, no DCGM exporter in the bundle the dashboard ships with (and GKE's managed one skipping DRA pools), GKE IAM undocumented, node inventory only from DCGM, a trailing empty step, duty on a shared GPU shown per lane, a run whose client died on a 400 still reading as healthy, workers sanitising NaN to 0 before telemetry sees it, placement records per run on a shared runtime and 30 s behind, and the delta density above. Two placement observations about OpenRL itself (binpack co-locating trainer and sampler with idle GPUs around; a shared runtime's halves placed independently, so a trainer can hold a GPU idle while its sampler waits) are in the report as well.