[Bugfix]Fix deepseek 3.2 C8 precision by rotary tensor - #7537
Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request enhances the Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request introduces support for a new attention mechanism feature (C8 rot tensor) for Deepseek V2 models on Ascend hardware. The changes involve splitting the Hadamard tensor for Q and K in sparse attention, adding a patch to load new indexer rotation tensor weights, and updating quantization configurations to support this. My review has identified a critical issue in the new weight loading patch that would prevent most of the model's weights from being loaded due to a hardcoded layer limit. I've also pointed out a performance improvement opportunity in the attention implementation to avoid redundant tensor creation. Addressing these points will ensure the feature works correctly and efficiently.
| import re | ||
| layer_idx = re.findall(r"\d+", name) | ||
| if len(layer_idx) > 0 and int(layer_idx[0]) >= NUM_HIDDEN_LAYERS: | ||
| continue |
There was a problem hiding this comment.
This block of code contains two issues:
- Critical Bug: It uses a hardcoded
NUM_HIDDEN_LAYERS = 4(defined on line 16) to skip loading weights for layers with an index of 4 or greater. This will prevent loading most of the model's layers, as models like DeepseekV2 have far more than 4 layers. This logic should be removed to ensure the entire model is loaded. - Bad Practice: The
import restatement is inside a loop. Imports should be at the top of the file for performance and style. Since the logic usingreshould be removed, this import becomes unnecessary.
| if self.use_sparse_c8_indexer and AscendSFAImpl.q_hadamard is None: | ||
| AscendSFAImpl.q_hadamard = torch.tensor(scipy.linalg.hadamard(128), dtype=torch.bfloat16, device="npu") / ( | ||
| 128**0.5 | ||
| ) | ||
| if self.use_sparse_c8_indexer and AscendSFAImpl.k_hadamard is None: | ||
| AscendSFAImpl.k_hadamard = torch.tensor(scipy.linalg.hadamard(128), dtype=torch.bfloat16, device="npu") / ( | ||
| 128**0.5 | ||
| ) |
There was a problem hiding this comment.
The Hadamard matrix is being created twice, which is inefficient. Since q_hadamard and k_hadamard are initialized with the same value, you can create the tensor once and assign it to both, avoiding redundant computation and memory allocation.
if self.use_sparse_c8_indexer and (AscendSFAImpl.q_hadamard is None or AscendSFAImpl.k_hadamard is None):
hadamard_matrix = torch.tensor(scipy.linalg.hadamard(128), dtype=torch.bfloat16, device="npu") / (128**0.5)
if AscendSFAImpl.q_hadamard is None:
AscendSFAImpl.q_hadamard = hadamard_matrix
if AscendSFAImpl.k_hadamard is None:
AscendSFAImpl.k_hadamard = hadamard_matrixSigned-off-by: mayumeng <m30059191@china.huawei.com>
Signed-off-by: mayumeng <m30059191@china.huawei.com>
|
👋 Hi! Thank you for contributing to the vLLM Ascend project. The following points will speed up your PR merge:
If CI fails, you can run linting and testing checks locally according Contributing and Testing. |
Signed-off-by: mayumeng <m30059191@china.huawei.com>
Signed-off-by: mayumeng <m30059191@china.huawei.com>
Signed-off-by: mayumeng <m30059191@china.huawei.com>
Signed-off-by: mayumeng <m30059191@china.huawei.com>
Signed-off-by: mayumeng <m30059191@china.huawei.com>
Signed-off-by: mayumeng <m30059191@china.huawei.com>
rjg-lyh
left a comment
There was a problem hiding this comment.
This PR replaces the default matrix values with more precise weights loaded during model initialization, enhancing overall network performance in the C8 scenario. Thanks for this contribution.
Signed-off-by: mayumeng <m30059191@china.huawei.com>
Signed-off-by: mayumeng <m30059191@china.huawei.com>
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com>
…to qwen3next_graph * 'main' of https://github.com/vllm-project/vllm-ascend: (94 commits) [bugfix] Fixed the error issue when overlaying MTP and full decode on DSV3.1 C8. (vllm-project#7571) [eagle3][pcp] fix acceptance rate for eagle3 and pcp enabled (vllm-project#7549) [bugfix][CI] fix '_OpNamespace' 'vllm' object has no attribute 'qkv_rmsnorm_rope' (vllm-project#7620) [Nightly] Nightly pre-build image (vllm-project#7388) [Bugfix]Fix deepseek 3.2 C8 precision by rotary tensor (vllm-project#7537) adapt to main2main for model runner v2 (vllm-project#7578) [Patch] Fix balance scheduling (vllm-project#7611) [310P]fused recurrent gated delta rule pytorch core and ut (vllm-project#7398) [CI] refine issue triage rules, wan regex and update stale setting (vllm-project#7531) [Lint]Add lint hooks for clang-format, shellcheck, forbidden imports, and boolean context manager checks (vllm-project#7511) [doc] add enable_sparse_c8 option in configuration options (vllm-project#7600) lower log level in PD Disaggregation (vllm-project#7589) [model_runner_v2]:optimize the performance of the _compute_slot_mappings_kernel (vllm-project#7575) [Feat][SP] Suport SP for VL MoE models (vllm-project#7044) Fix Qwen3Next CI Config (vllm-project#7561) [Feat] Add npugraph_ex enablement logging (vllm-project#7574) [UT] Align input arguments with Ascend(Yarn)RotaryEmbedding with vLLM and add ut (vllm-project#7358) [P/D] Check wildcard address for layerwise connector (vllm-project#7389) [P/D] [Bugfix] fix mooncake layerconnector dead when update_decoder_info fail (vllm-project#7514) [BugFix][P/D] fix padding error on FullGraph mode && fix layerwise connector mamba accuracy (vllm-project#7506) ...
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com>
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com>
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com> Signed-off-by: zouyida2052 <zouyida2002@gmail.com>
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com>
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com> Signed-off-by: nanxing <1014662416@qq.com>
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com>
…7537) ### What this PR does / why we need it? During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation. ### Does this PR introduce _any_ user-facing change? No. But there will be two new tensor in quant weight. ### How was this patch tested? - vLLM version: v0.18.0 - vLLM main: vllm-project/vllm@8b63257 --------- Signed-off-by: mayumeng <m30059191@china.huawei.com> Co-authored-by: mayumeng <m30059191@china.huawei.com>
What this PR does / why we need it?
During the attention quantization process of DeepSeek V3.2, it is necessary to retrieve the Hadamard matrix from the weights to facilitate the computation.
Does this PR introduce any user-facing change?
No. But there will be two new tensor in quant weight.
How was this patch tested?