[RL] DSV4: add env to quantize SWA KV cache from bf16-rounded values (#31086)
Signed-off-by: zhihaow6 <zhihaow6@illinois.edu>
This commit is contained in:
@@ -710,6 +710,11 @@ SGLang supports various environment variables that can be used to configure its
|
|||||||
<td style={{padding: "9px 12px", backgroundColor: "rgba(255,255,255,0.05)"}}>Default <code>reasoning_effort</code> for the DeepSeek V4 chat encoder when a request does not set it (accepts <code>max</code>, <code>high</code>; empty means unset).</td>
|
<td style={{padding: "9px 12px", backgroundColor: "rgba(255,255,255,0.05)"}}>Default <code>reasoning_effort</code> for the DeepSeek V4 chat encoder when a request does not set it (accepts <code>max</code>, <code>high</code>; empty means unset).</td>
|
||||||
<td style={{padding: "9px 12px", backgroundColor: "rgba(255,255,255,0.02)"}}><code>""</code></td>
|
<td style={{padding: "9px 12px", backgroundColor: "rgba(255,255,255,0.02)"}}><code>""</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style={{padding: "9px 12px", fontWeight: 500, backgroundColor: "rgba(255,255,255,0.02)"}}><code>SGLANG_DSV4_USE_BF16_KV_QUANT_SOURCE</code></td>
|
||||||
|
<td style={{padding: "9px 12px", backgroundColor: "rgba(255,255,255,0.05)"}}>For DeepSeek V4, quantize the SWA FP8 KV cache from BF16-rounded values instead of FP32 registers. This matches trainer-side QAT and the DSA prefill-CP path, at the cost of an extra BF16 KV materialization and separate cache-store kernels.</td>
|
||||||
|
<td style={{padding: "9px 12px", backgroundColor: "rgba(255,255,255,0.02)"}}><code>false</code></td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|||||||
@@ -1018,6 +1018,9 @@ class Envs:
|
|||||||
# Default reasoning_effort for dsv4 chat encoder when request doesn't set it.
|
# Default reasoning_effort for dsv4 chat encoder when request doesn't set it.
|
||||||
# Accepts "", "max", "high" (empty string means unset); other values filtered to None.
|
# Accepts "", "max", "high" (empty string means unset); other values filtered to None.
|
||||||
SGLANG_DSV4_REASONING_EFFORT = EnvStr("")
|
SGLANG_DSV4_REASONING_EFFORT = EnvStr("")
|
||||||
|
# Quantize the SWA fp8 KV cache from bf16-rounded values (matches
|
||||||
|
# trainer-side QAT and the DSA-CP path) instead of fp32 registers.
|
||||||
|
SGLANG_DSV4_USE_BF16_KV_QUANT_SOURCE = EnvBool(False)
|
||||||
|
|
||||||
# CUDA kernels
|
# CUDA kernels
|
||||||
SGLANG_OPT_DEEPGEMM_HC_PRENORM = EnvBool(True)
|
SGLANG_OPT_DEEPGEMM_HC_PRENORM = EnvBool(True)
|
||||||
|
|||||||
@@ -722,6 +722,15 @@ class MQALayer(MqaAttentionBase):
|
|||||||
Replaces the bf16-kv-intermediate path. Used everywhere except the DSA
|
Replaces the bf16-kv-intermediate path. Used everywhere except the DSA
|
||||||
prefill-CP case (which needs bf16 kv for the cross-rank all-gather).
|
prefill-CP case (which needs bf16 kv for the cross-rank all-gather).
|
||||||
"""
|
"""
|
||||||
|
if envs.SGLANG_DSV4_USE_BF16_KV_QUANT_SOURCE.get():
|
||||||
|
# Quantize the nope payload from bf16-rounded values (the fused
|
||||||
|
# kernel quantizes from fp32 registers; the bf16 rounding moves
|
||||||
|
# values across fp8 bins relative to bf16-sourced consumers).
|
||||||
|
kv = self._compute_kv_bf16(x, positions, qkv_a=qkv_a)
|
||||||
|
attn_backend.store_cache(
|
||||||
|
layer_id=self.layer_id, swa_k=kv, forward_batch=forward_batch
|
||||||
|
)
|
||||||
|
return
|
||||||
if qkv_a is not None:
|
if qkv_a is not None:
|
||||||
kv = qkv_a[..., self.q_lora_rank :]
|
kv = qkv_a[..., self.q_lora_rank :]
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user