Repository navigation
fix(personaplex): keep RMSNorm epsilon in FP32 - #1780
Closed
chaofengw-nv wants to merge 1 commit into
Closed
chaofengw-nv wants to merge 1 commit into
chaofengw-nv wants to merge 1 commit into
Conversation
The FP16 standard and tensor-parallel builders rounded 1e-8 to zero before RMSNorm promoted the scalar to FP32. Preserve the epsilon in FP32, matching Native rms_norm_f32 and the family's existing dual-profile path. Add a one-layer decoder regression for zero, small and ordinary inputs. Identity value/output projections expose normalization through the existing post-attention debug output without replacing the production builder. Fixes NVIDIA#1779 Signed-off-by: chaofengw <chaofengw@nvidia.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Comment |
This was referenced Oct 17, 2026
chaofengw-nv
added a commit
to chaofengw-nv/TensorRT-Model-Connect-fork
that referenced
this pull request
Oct 20, 2026
Create RMSNorm epsilon in FP32 so the 1e-8 value survives Half network construction. Closes NVIDIA#1779 Refs NVIDIA#1780 Signed-off-by: chaofengw <chaofengw@nvidia.com>
3 of 11 tasks
Collaborator
Author
chaofengw-nv
added a commit
to chaofengw-nv/TensorRT-Model-Connect-fork
that referenced
this pull request
Oct 21, 2026
Create RMSNorm epsilon in FP32 so the 1e-8 value survives Half network construction. Closes NVIDIA#1779 Refs NVIDIA#1780 Signed-off-by: chaofengw <chaofengw@nvidia.com>
chaofengw-nv
added a commit
that referenced
this pull request
Oct 21, 2026
* fix(personaplex): decode with the FP32 Mimi codec Build the Mimi decoder in FP32, matching the encoder and native codec for every language-model precision. Closes #1750 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): keep RMSNorm epsilon in FP32 Create RMSNorm epsilon in FP32 so the 1e-8 value survives Half network construction. Closes #1779 Refs #1780 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): preserve Half embedding additions Sum audio embeddings before text and round each addition to Half for Half temporal engines. Closes #1778 Refs #1781 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): round the FP16 depth input like the reference Round depth projection weights, inputs, projection output and token embedding additions at the reference Half boundaries. Closes #1788 Refs #1789 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): preserve reference RoPE precision Construct RoPE angles and rotation in FP32, then restore the input dtype across the family decoder variants. Closes #1790 Refs #1791 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): round the SwiGLU gate product once Evaluate SiLU and its gate product in FP32, casting the combined result to the projection dtype once. Closes #1793 Refs #1794 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): build the FP16 profile with a Half core Remove component-promotion selectors from the primary FP16 manifest. Preserve the declared BF16 E2E reference and all existing thresholds. Refs #1786 Refs #1795 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): preserve residual input rounding Preserve rounded branch outputs before residual addition across the family decoder variants. Closes #1796 Refs #1797 Signed-off-by: chaofengw <chaofengw@nvidia.com> * fix(personaplex): store RMSNorm weights in the model dtype Round RMSNorm scale weights to the model dtype before the FP32 normalization computation. Closes #1799 Refs #1800 Signed-off-by: chaofengw <chaofengw@nvidia.com> --------- Signed-off-by: chaofengw <chaofengw@nvidia.com>
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.
Background
Fixes #1779. FP16 PersonaPlex decoder builds round RMSNorm's
1e-8epsilon to zero before promoting it to FP32. Zero inputs then produce NaNs; a small-input regression differs from Native by 0.29296875.Exit Criteria
rms_norm_f32through constant creation and variance addition.Implementation
Store the epsilon constant in FP32 in the standard and tensor-parallel builders. The family's dual-profile builder already does this. Model checkpoints, requests, gates, references and runtime source remain unchanged.
Add a one-layer standard-decoder regression. Identity value/output projections and one unmasked attention key expose normalization through the existing post-attention debug output. The expected value uses the independent Native FP32-normalization equation followed by FP16 output/residual rounding.
Change categories
Validation
Commands and Results
PYTHONPATH=core/builder:apps/benchmark:. python -m pytest -c pyproject.toml -q -rA -p no:cacheprovider families/personaplex/tests/test_fp16_decoder_norm_epsilon.py: 3 passed for zero,1e-4, and0.1inputs.atol=5e-4: 2 failed, 1 passed. Zero input produces NaNs; all 64 small-input elements differ by 0.29296875. Ordinary input passes.1e-8gives 0.70703125 for a constant1e-4FP16 input; FP16-stored epsilon is zero and gives 1.0.ruff check --config ruff.tomlon the three changed files,python -m tools.model_ci validate,python tools/test_impact.py --validate, andgit diff --check: passed.Hardware, Environment, and Revisions
39486fac00d8b435955c7be04b9b48445d92a678; base9643800b3b5a951382c87ae1ebfbbeb24b1a8090. The tested fixed production files and test are byte-identical to this head.rms_norm_f32uses FP32 variance with epsilon1e-8.Not Run / Remaining Gaps
Full PersonaPlex audio-parity acceptance for this epsilon change, multi-GPU tensor-parallel execution, other platforms, and protected exact-head premerge have not been qualified. The component result does not establish that this alone resolves the remaining audio-parity failure.
Contributor Self-Review
Reviewed the three-file diff, family ownership, FP32 constant propagation, independent reference, fixed tolerance, original-source negative control, DCO and validation limits.
Notes For Future Readers
Risk level
The change preserves one family-owned scalar in its intended computation dtype. Existing FP32 builds already use this value.