Cosmos3 droid - #188
Conversation
NSagan271
left a comment
There was a problem hiding this comment.
LGTM, just a clarifying question on the decode issue.
| # once per new latent shape and discard, so served frames | ||
| # always come from warmed graphs. The fp32 decode does not | ||
| # exhibit this and skips the warm-up. | ||
| self._decode(z) |
There was a problem hiding this comment.
Just checking---is this confirmed to not be, e.g., a race condition somewhere?
There was a problem hiding this comment.
Yes, I checked this exactly. It reproduces in a bare bones single-threaded script (no serving stack, one thread, and default stream).Basically, compile vae.decode with the same flags, decode a fixed latent repeatedly and the result is that the first call is corrupted (mean abs err 0.23, max 2.0 vs eager) while every later call is clean and bit-identical. The corruption itself is bit-identical across fresh processes, unchanged under CUDA_LAUNCH_BLOCKING=1 (fully synchronous launches, so no async overlap at all), unchanged against a pre-populated inductor disk cache (no compilation happening in-process), and still present with TORCHINDUCTOR_COMPILE_THREADS=1. A race can't be timing-invariant and byte-reproducible under all of those. Since aot_eager is bit-exact vs. eager while inductor diverges, and fp32-compiled / bf16-eager are both clean, it's a deterministic first-execution miscompute in inductor's bf16 codegen (known-open upstream family, pytorch#164124).
What does this PR do?
cosmos3_droid->nvidia/Cosmos3-Nano-Policy-DROID(sameCosmos3Model; dims + capability flags load from the checkpoint, which differs from Nano only insound_gen:false- the audio heads are already construction-gated on that flag, and the sound walk self-disables).configs/cosmos3_droid.yaml(Nano-shaped; no audio_decoder node;num_inference_steps_action: 4,guidance_scale_action: 3.0i.e.the released DROID RoboLab policy-server sampling params),mstar serve cosmos3_droid, OpenAI image/video adapter registration, README + docs rows.num_inference_steps_action,guidance_scale_action,flow_shift_action).action_chunk_size<->num_framesdefault off each other (chunk 16 when neither is sent;num_frames ∈ {chunk, chunk+1}validated at submission. Previously an action request withoutnum_framesfailed mid-denoise).domain_namestrings resolve through the published table (droid_lerobot=8); previously a missingdomain_idsilently became 0 (= the no_action domain).raw_action_dimrequired + bounded by the model's padded action dim (forward_dynamics infers it from the conditioningactionarray).How was it tested?
/v1/videoswithmodel=cosmos3_droid.Checklist
ruff check .passes