Commit Graph
947 Commits
Author SHA1 Message Date
SolitaryThinker be7cc7a1dd studio: keep frontend polling noise out of the engine console
uvicorn's access log lands in the engine tail, and the UI polls several
endpoints every few seconds — the console was mostly its own GET 200 lines.
access_log=False at the server (applies on restart) + a client-side filter
for 2xx GET/HEAD access-log lines (immediate, and covers servers started
before the flag).
2026-08-08 18:36:37 -07:00
SolitaryThinker 8c5778fa44 studio: create generators on one persistent loader thread
the mp executor's workers arm prctl(PR_SET_PDEATHSIG, SIGKILL), which on
linux fires when the CREATING THREAD exits — not the process. generators
spawned from short-lived threads (preload, per-job loader helpers) lose
every worker to a silent SIGKILL the moment that thread finishes: zombie
workers, broken pipes on the first rpc. all creations now run on a single
long-lived loader thread.
2026-08-07 18:28:36 -07:00
SolitaryThinker 0fbdbe9174 studio: pin dit_layerwise_offload=False at generator creation
FastVideoArgs defaults it True, which disables FSDP and holds a full DiT
copy in host RAM per worker — 4 mp workers x 66GB DiT (+ the Qwen3-VL text
encoder) OOM-killed the node silently right after 'workers ready' (defunct
workers, broken pipes on first RPC). the example scripts always overrode
this; the studio never did.
2026-08-07 18:20:09 -07:00
SolitaryThinker 659cf4fbfe studio: attach the worker log queue at generator creation, not via RPC
sending the Manager-queue proxy over the mp executor's worker pipes
(set_log_queue RPC on each generate) breaks the pipe — that path was never
exercised while the queue was also passed at creation. single-slot now keeps
one runner-wide queue for the generator's whole life (drained per job), and
generate_video no longer sends log_queue at all.
2026-08-07 18:11:48 -07:00
SolitaryThinker 609648b114 studio ui: resolution presets, inline video, Studio nav label, cluster panel
- create-job modal: 480p/720p/1080p preset chips (/32-safe dims) + native
  chip restoring the model preset + portrait/landscape toggle; sliders stay
- completed jobs stream their clip inline in the details sidebar (video tag
  over the existing /video endpoint; png for t2i)
- top bar/nav: Jobs -> Studio (labels only)
- gpus page is now a cluster view over GET /api/cluster: per-node cards with
  util/vram meters, temp/power, mode badge, available/total gpus; compact
  per-node strip; 5s polling, paused while hidden
2026-08-07 00:59:27 -07:00
SolitaryThinker 9a2eda427f studio: GET /api/cluster — per-node GPU telemetry via ray
self-contained NVML probe scheduled on every alive ray node (worker envs
can't import apps/, so cloudpickle carries it by value); falls back to the
local host when not connected. includes ray gpu totals/available.
2026-08-07 00:51:09 -07:00
SolitaryThinker cb7e8e960a studio ui: show the full prompt on job cards (wrap, don't truncate) 2026-08-07 00:41:16 -07:00
SolitaryThinker 4a4e9b3f31 studio ui: compact job cards to a two-line layout
model / status / prompt / meta on one line, slim action row under it;
tighter padding and margins — roughly half the previous card height.
2026-08-07 00:38:58 -07:00
SolitaryThinker 0f2bbcda10 h3: rank-0 denoising progress bar; studio: strip ANSI in the progress bridge
h3's denoising loop emitted no per-step progress at all, and ray wraps
relayed worker lines in ANSI color codes the bridge's prefix match never
survived — together the UI bar sat at 0 until completion. tqdm on rank 0
(mirroring the shared denoising stage; non-tty refreshes are plain lines ray
relays per step) + ANSI strip before matching/feeding.
2026-08-07 00:33:03 -07:00
SolitaryThinker 58f7b913b9 studio: drive job progress from ray-relayed worker output
on the ray backend worker tqdm can't reach the job buffer via the mp queue,
but ray already relays worker stdout to the driver — which the engine tee
captures. lines with ray's actor prefix now feed the running inference job's
log buffer, whose existing tqdm parser moves the UI progress bar. no UI
changes needed.
2026-08-07 00:26:52 -07:00
SolitaryThinker 07f1cfc356 ray executor: wait out async GPU release on shutdown; retry node GPU probe on init
killed actors free their devices asynchronously — a load fired right after a
release could still see 0 GPUs on the node and hard-fail. shutdown now waits
(<=60s) for the GPUs to return to ray's ledger, and initialize_ray_cluster's
node-local GPU probe retries for 60s instead of failing instantly.
2026-08-07 00:05:38 -07:00
SolitaryThinker 3101331020 studio: serialize all generator-slot transitions; wait for ray PG removal
two races hit by real UI use:
- a job-triggered replace nulled the resident generator while state stayed
  'ready', so a concurrent job with the old config grabbed None and died on
  generate_video. every slot transition (preload / job replace / unload) now
  runs under one load lock; jobs block behind in-flight loads instead of
  peeking at half-replaced state.
- ray placement-group removal is async: a load right after a release raced
  the teardown and failed 'no GPU available'. executor shutdown now waits
  (<=30s) for the PG to actually reach REMOVED.
2026-08-07 00:00:50 -07:00
SolitaryThinker 4a63de71d7 studio ui: default to the warm model, populate from model presets
create-job modal now defaults its model to the resident one and, for any
selected model, populates every sampling field from GET /api/models/presets
(fixes generating H3 with wan-style defaults: guidance 5.0 and 81 frames both
fail H3's input validation). selecting the warm model also adopts the slot's
engine config so the job actually reuses the resident instance instead of
silently replacing it.
2026-08-06 23:09:14 -07:00
SolitaryThinker 99df34a78d studio: GET /api/models/presets — per-model sampling defaults
config-only via SamplingParam.from_pretrained (never loads weights, cached);
the create-job modal populates its sampling fields from these.
2026-08-06 22:59:03 -07:00
SolitaryThinker 7b94433092 studio ui: single-slot model panel + engine output console
panel shows the one resident model (load/replace/unload, one load at a
time); engine console tails the server's stdout/stderr via /api/engine/logs
(collapsible, polls only while open, stick-to-bottom).
2026-08-06 22:50:26 -07:00
SolitaryThinker 3a7e7fc69f studio: single resident generator + engine log tail; fix ray PG leak
reload-after-unload failed because RayDistributedExecutor.shutdown() killed
the actors but never removed the placement group — the GPUs stayed reserved
forever. remove it on shutdown.

studio generator management simplified to a single slot: one VideoGenerator
instance at a time, one load in flight at a time (409 otherwise), loading a
new config always releases the old instance, unload shuts it down and
deletes it. jobs wait out an in-flight preload and reuse it on config match.

GET /api/engine/logs: incremental tail of the server's stdout/stderr (ray
relays worker output to the driver, so this captures every rank).
2026-08-06 22:40:39 -07:00
SolitaryThinker 02a10268e9 studio ui: warm models panel on the inference page
lists resident/loading/failed generators, preload from the model dropdown
using the persisted default job options (same cache key as jobs), unload with
409 surfaced as a toast. polls only while something is loading. mock server
+ playwright spec + vitest coverage.
2026-08-06 22:29:03 -07:00
SolitaryThinker 9c9dd70214 studio: preload/list/unload resident generators
generators were already cached across jobs but only implicitly — the first
job per config silently paid the whole model load. adds:
- POST /api/generators/preload: load a model into memory ahead of time
  (async, idempotent; state loading/ready/failed)
- GET /api/generators: what's resident or in flight
- POST /api/generators/unload: shutdown + free VRAM (409 while inference
  jobs run)
cache key builder shared with the job path and pinned by a test so preload
and job lookup can't drift apart.
2026-08-06 22:20:28 -07:00
SolitaryThinker dc13c59dca fix ray executor: implement the log-queue abstract methods
RayDistributedExecutor became uninstantiable when set_log_queue/
clear_log_queue were added to the Executor ABC (only the mp executor got
implementations). No-op on ray: a Manager queue can't cross nodes.
2026-08-06 19:16:33 -07:00
SolitaryThinker 6dd75ef5ab studio: multi-node inference knobs
- forward num_gpus to from_pretrained (was dropped: multi-gpu only ever
  happened via sp_size)
- FASTVIDEO_STUDIO_EXECUTOR_BACKEND=ray env knob so a deployment on a ray
  cluster can span nodes
- FASTVIDEO_STUDIO_MODEL_PATHS="id=/local/dir" serves a registered model id
  from local weights (avoids re-downloading checkpoints already on shared fs)
- accept an existing local dir as model_id in POST /api/jobs
2026-08-06 18:42:44 -07:00
William Lin 15568f27db [perf]: H3 torch.compile + CUDA graphs (1.2-1.3x) with denoising step marking (#1689) 2026-08-06 16:23:33 -07:00
Kaiqin Kong 126a75ad63 [misc] Support partial Hugging Face model downloads (#1684) 2026-08-06 16:09:46 -07:00
Raghav KandSolitaryThinker a2bfc7cdb2 [docs] DGX Spark (GB10) performance & tuning guide + reproduction examples (#1631)
Co-authored-by: SolitaryThinker <wlsaidhi@gmail.com>
2026-08-06 14:36:38 -07:00
William Lin b963a24612 [bugfix]: hard-fail when ATTN_QAT_INFER is selected but the kernel is unusable (#1690) 2026-08-06 13:12:27 -07:00
William Lin fb7be2fe2c [ci]: add golden-gate lane — single-layer bitwise DiT fingerprints for all SSIM-covered families (#1682) 2026-08-05 12:47:03 -07:00
William Lin ab00392664 [bugfix]: add GB200 to the inline SSIM device tables #1676 missed (#1681) 2026-08-05 10:33:46 -07:00
Shao Duan 9f1e7c19d2 [bugfix] Wan I2V: CLIP image conditioning silently dropped when passed as a tensor during training (#1673) 2026-08-05 01:35:09 -07:00
Kaiqin Kong e8b0e4c61e [feat] Add MiniMax H3 (#1674) 2026-08-04 13:54:39 -07:00
Haochen Jiang 9145ffdc46 [bugfix]: keep _resolved_attention_backend out of the positional config signature (#1678) 2026-08-03 17:09:15 -07:00
William Lin c3d07c870b [bugfix]: give GB200 its own SSIM reference folder instead of B200's (#1676) 2026-08-03 15:14:25 -07:00
William Lin e8812bef0b [docs]: batched docs cleanup (landing page, links, requirements, nav) (#1644) 2026-08-02 18:03:26 -07:00
William Lin b9be2449dc [refactor]: delete the dead global attention-backend override (#1672) 2026-08-02 18:00:42 -07:00
Adhvay IyerandSolitaryThinker bc7a804618 [bugfix]: harden FastVideo Studio UI reliability and accessibility (#1659)
Co-authored-by: SolitaryThinker <wlsaidhi@gmail.com>
2026-08-02 15:26:18 -07:00
William Lin 7b094c945b [refactor]: resolve attention backend once per component at load time (#1657) 2026-08-02 15:07:42 -07:00
William Lin eeb3e8a597 [bugfix]: left-align Gemma connector tokens per batch row (#1664) 2026-08-02 15:01:34 -07:00
Suhaan Khurana 05406c5d1b [misc]: consolidate dataset download scripts under examples/datasets/ (#1667) 2026-08-02 14:21:24 -07:00
KyleNeverGivesUpandClaude Opus 5 99d04a7f98 [bugfix] keep loader-populated text encoder configs in the validation pipeline (#1669)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 14:10:16 -07:00
William Lin 1b2b2a0161 [bugfix]: copy text encoder outputs out of CUDAGraph static buffers (#1650) 2026-07-27 21:52:53 -07:00
William Lin 98d65835b5 [misc]: refresh stale sm_120-only validation notes in QAT recipes (#1655) 2026-07-27 19:35:29 -07:00
William Lin 422585d08f [misc]: add LTX-2.3 fine-tuning example recipes (#1651) 2026-07-27 18:42:44 -07:00
ryanM154 e59a1ce16a [bugfix] Report actual package version in fastvideo --version (#1652) 2026-07-27 16:32:01 -07:00
William Lin d71acc0eb5 [bugfix]: fix stale imports in LTX-2.3 gradio local demo (#1640) 2026-07-27 16:31:07 -07:00
William Lin af2934dd6b [feat]: FA4-FP4 ATTN_QAT_INFER on sm_100/sm_103 + NVFP4 weight purge (#1647) 2026-07-27 15:46:52 -07:00
William Lin 1801512818 [docs]: cover all registered models in the support matrix (#1641) 2026-07-27 11:13:53 -07:00
William Lin 5ae05b032e [misc]: add LTX-2 fine-tuning example recipes (#1645) 2026-07-27 11:11:49 -07:00
Mac Lee 7a592ff09a [ci]: cache FastVideo kernel builds in Modal (#1562) 2026-07-26 04:21:09 -07:00
Lev NovitskiyandClaude Sonnet 5 8b23984c79 [feat] Add Kandinsky5 QAD training pipeline: data preprocessing, QAT finetune, QAT-aware DMD distillation (#1601)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-26 02:59:21 -07:00
William Lin bf18371afe [feat] Enable LTX-2 NVFP4 linear and attention QAT fine-tuning (#1626) 2026-07-26 02:19:34 -07:00
William Lin 69349dd2aa [docs]: unify community links on the README Slack invite (#1643) 2026-07-25 17:26:58 -07:00
Yogya MehrotraandClaude Sonnet 5 8d89f30d3f [bugfix] Skip CUDA-only fastvideo-kernel/flashinfer-python deps on non-Linux (#1574)
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 14:23:45 -07:00