Three cumulative dtype-boundary divergences caused FV parity tests
to fail after the Wave 14 channel-major fix exposed real-signal
processing (vs the prior garbage-in-garbage-out kernel cancellation):
1. MagiAttention forward: hardcode bf16 for SDPA q/k/v inputs to
match upstream flash_attn_with_cp's hardcoded bf16 cast at
dit_module.py:508. Upcast attention output to fp32 before the
per-head gating multiply to match upstream's bf16*fp32 promotion
at dit_module.py:649. Cast back to bf16 only for linear_proj.
This is an intentional exception to Wave 10's dtype-agnostic
pattern: upstream is not dtype-agnostic at this boundary.
2. MagiHumanDiT forward: drop the x.to(linear_qkv.weight.dtype)
cast that ran the residual stream in bf16 across all 40 layers.
Upstream casts to params_dtype which defaults to fp32, keeping
the cross-layer accumulator fp32 with bf16 internal compute.
The bf16 residual cast was compounding ~6-7 bits of mantissa
loss per layer and was visible in pipeline parity diff.
3. Parity test _build_fastvideo_schedulers: switch to single-shift
construction (default shift=1 in __init__, then set_timesteps
with the real shift) to match production migration in Wave 11.
The stale double-shift was applying a non-trivial shift twice
versus upstream's single-shift, leaving FV with a different
timestep schedule.
Result: all 7 magi-human local parity tests pass with bit-exact
or near-bit-exact (VAE 8e-4 max) outputs vs upstream:
test_magi_human_dit_parity diff=0.0
test_magi_human_t5gemma_parity diff=0.0
test_magi_human_sa_audio_parity diff=0.0
test_magi_human_sa_audio_official_parity diff=0.0
test_magi_human_vae_parity max=8e-4
test_magi_human_pipeline_smoke passes
test_magi_human_pipeline_latent_parity diff=0.0
Production E2E re-validated: examples/inference/basic/basic_magi_human.py
still produces coherent video at the standard 480x256 / 32-step /
seed-42 prompt, with unchanged 23.5s runtime.
Closes OQ-6 (full resolution including dtype boundaries).
tests/local_tests/ holds local-only parity, smoke, and component tests
organized by model family (e.g. tests/local_tests/ltx2/,
tests/local_tests/stable_audio/). They typically require a checked-out
reference repo and/or model weights and are skipped in CI; see each family's
README.md for setup. The top-level
tests/local_tests/README.md is the family index.
The CI-backed test suite still lives in fastvideo/tests/.