diff --git a/unsloth/models/llama.py b/unsloth/models/llama.py index de71b61339..44de7bf391 100644 --- a/unsloth/models/llama.py +++ b/unsloth/models/llama.py @@ -244,19 +244,19 @@ def LlamaAttention_fast_forward_inference( seq_len = K1.shape[-2] kv_seq_len = seq_len + 1 - cos, sin = self.rotary_emb(Vn, seq_len = kv_seq_len) - Qn, Kn = inplace_rope_embedding(Qn, Kn, cos, sin, position_ids) - # cos = self.rotary_emb.cos_cached[seq_len] - # sin = self.rotary_emb.sin_cached[seq_len] - # h = head_dim // 2 + # cos, sin = self.rotary_emb(Vn, seq_len = kv_seq_len) + # Qn, Kn = inplace_rope_embedding(Qn, Kn, cos, sin, position_ids) + cos = self.rotary_emb.cos_cached[seq_len] + sin = self.rotary_emb.sin_cached[seq_len] + h = head_dim // 2 - # RH_Q = torch.empty((bsz, n_heads, 1, head_dim), dtype = Xn.dtype, device = "cuda") - # RH_Q[:,:,:,:h] = Qn[:,:,:,h:]; RH_Q[:,:,:,h:] = Qn[:,:,:,:h]; torch.neg(RH_Q[:,:,:,:h], out = RH_Q[:,:,:,:h]); - # Qn *= cos; Qn.addcmul_(RH_Q, sin); + RH_Q = torch.empty((bsz, n_heads, 1, head_dim), dtype = Xn.dtype, device = "cuda") + RH_Q[:,:,:,:h] = Qn[:,:,:,h:]; RH_Q[:,:,:,h:] = Qn[:,:,:,:h]; torch.neg(RH_Q[:,:,:,:h], out = RH_Q[:,:,:,:h]); + Qn *= cos; Qn.addcmul_(RH_Q, sin); - # RH_K = RH_Q[:,:n_kv_heads,:,:] # torch.empty((n_kv_heads, 1, head_dim), dtype = dtype, device = "cuda") - # RH_K[:,:,:,:h] = Kn[:,:,:,h:]; RH_K[:,:,:,h:] = Kn[:,:,:,:h]; torch.neg(RH_K[:,:,:,:h], out = RH_K[:,:,:,:h]); - # Kn *= cos; Kn.addcmul_(RH_K, sin); + RH_K = RH_Q[:,:n_kv_heads,:,:] # torch.empty((n_kv_heads, 1, head_dim), dtype = dtype, device = "cuda") + RH_K[:,:,:,:h] = Kn[:,:,:,h:]; RH_K[:,:,:,h:] = Kn[:,:,:,:h]; torch.neg(RH_K[:,:,:,:h], out = RH_K[:,:,:,:h]); + Kn *= cos; Kn.addcmul_(RH_K, sin); # New KV cache Kn = torch.cat([K1, Kn], dim = 2) @@ -741,7 +741,7 @@ def LlamaForCausalLM_fast_forward( hidden_states = outputs[0] bsz, q_len, hd = hidden_states.shape - if False:#bsz == 1 and q_len == 1: + if bsz == 1 and q_len == 1: logits = torch.mv(self.lm_head.weight, hidden_states.ravel()) logits = logits.unsqueeze(0).unsqueeze(0) else: diff --git a/unsloth/models/mistral.py b/unsloth/models/mistral.py index 1d7a3e7fba..76f9af11e0 100644 --- a/unsloth/models/mistral.py +++ b/unsloth/models/mistral.py @@ -214,7 +214,7 @@ def MistralForCausalLM_fast_forward( hidden_states = outputs[0] bsz, q_len, hd = hidden_states.shape - if False:#bsz == 1 and q_len == 1: + if bsz == 1 and q_len == 1: logits = torch.mv(self.lm_head.weight, hidden_states.ravel()) logits = logits.unsqueeze(0).unsqueeze(0) else: