ThingsAI commited on
Commit
9716697
·
verified ·
1 Parent(s): 23eadd7

fix: cast float32 prima di RoPE per evitare overflow

Browse files
Files changed (1) hide show
  1. modeling_quark.py +5 -6
modeling_quark.py CHANGED
@@ -71,16 +71,15 @@ class GroupedQueryAttention(nn.Module):
71
 
72
  def forward(self, x, **kwargs):
73
  B, T, _ = x.shape
74
- q = self.q_proj(x).view(B, T, self.n_heads, self.head_dim).transpose(1, 2)
75
- k = self.k_proj(x).view(B, T, self.n_kv_heads, self.head_dim).transpose(1, 2)
76
- v = self.v_proj(x).view(B, T, self.n_kv_heads, self.head_dim).transpose(1, 2)
 
 
77
  q, k = self.rope(q, k)
78
  if self.n_groups > 1:
79
  k = k.repeat_interleave(self.n_groups, dim=1)
80
  v = v.repeat_interleave(self.n_groups, dim=1)
81
- # SDPA in float32 per stabilità numerica, poi riporta al dtype originale
82
- orig_dtype = v.dtype
83
- q, k, v = q.float(), k.float(), v.float()
84
  out = F.scaled_dot_product_attention(
85
  q, k, v, is_causal=True,
86
  dropout_p=self.drop if self.training else 0.0,
 
71
 
72
  def forward(self, x, **kwargs):
73
  B, T, _ = x.shape
74
+ orig_dtype = x.dtype
75
+ # Cast a float32 prima di tutto per evitare overflow in RoPE e SDPA
76
+ q = self.q_proj(x).view(B, T, self.n_heads, self.head_dim).transpose(1, 2).float()
77
+ k = self.k_proj(x).view(B, T, self.n_kv_heads, self.head_dim).transpose(1, 2).float()
78
+ v = self.v_proj(x).view(B, T, self.n_kv_heads, self.head_dim).transpose(1, 2).float()
79
  q, k = self.rope(q, k)
80
  if self.n_groups > 1:
81
  k = k.repeat_interleave(self.n_groups, dim=1)
82
  v = v.repeat_interleave(self.n_groups, dim=1)
 
 
 
83
  out = F.scaled_dot_product_attention(
84
  q, k, v, is_causal=True,
85
  dropout_p=self.drop if self.training else 0.0,