
    ^j                        d dl Z ddlmZmZ ddlmZ  ej                  e      Z e       Z	de j                  de j                  j                  de j                  fdZ	 	 	 	 	 	 dde j                  j                  de j                  d	e j                  d
e j                  de j                  dz  dededz  dedz  dedz  dedz  de j                  dz  dee j                  df   fdZy)    N   )_flash_attention_forward!flash_attn_supports_top_left_mask)loggingquerymodulereturnc                 ~   | j                   t        j                  k(  r| j                  j                  }t        j
                  |      rt        j                  |      S t        |j                  d      r|j                  j                   S t        d |j                         D              j                  j                   S y)ziIf the query is in float32, return a target dtype compatible with flash attention. Return None otherwise._is_quantizedc              3   j   K   | ]+  }t        |t        j                  j                        s(| - y w)N)
isinstancetorchnnLinear).0layers     t/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/integrations/flash_attention.py	<genexpr>z#get_target_dtype.<locals>.<genexpr>   s&     b%z%QVQYQYQ`Q`?abs   )33N)dtyper   float32devicetypeis_autocast_enabledget_autocast_dtypehasattrconfignextmodulesweight)r   r   device_types      r   get_target_dtyper!      s    {{emm#ll''$$[1++K88V]]O4==&&&b6>>+;bbiiooo    keyvalueattention_maskdropoutscalingsliding_windowsoftcap	is_causals_auxc                 8   |j                  dd      rt        j                  d       |j                  d   }t	        d |j                  D              rt        d      |j                  dd      }|j                  dd      }|j                  dd      }t        ||       }|	|	n| j                  }	t        ||||f||	||||t        || j                  j                  t        | d      r| j                  nd |
|
j                  |j                         nd d	|}|d fS )
Noutput_attentionsFzFlash Attention does not support `output_attentions=True`. Please set your attention to `eager` if you want any of these features.r   c              3   &   K   | ]	  }|d k(    yw)r   N )r   dims     r   r   z*flash_attention_forward.<locals>.<genexpr>1   s     
+3!8
+s   zTensor query has shape  with a zero dimension.
FlashAttention does not support inputs with dim=0.
Please check your input shapes or use SDPA instead.   	layer_idx)query_lengthr*   r&   softmax_scaler(   r)   use_top_left_masktarget_dtypeattn_implementationr2   r+   )getloggerwarning_onceshapeany
ValueError	transposer!   r*   r   _use_top_left_maskr   _attn_implementationr   r2   tor   )r   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   kwargsseq_lenr6   attn_outputs                  r   flash_attention_forwardrE      s9    zz%u-W	
 kk!nG

+u{{
++B
 	
 OOAq!E
--1
COOAq!E $E62L '2	8H8HI*	
 %,!"MM>>&-fk&B&""   HHU[[!%( )K. r"   )g        NNNNN)r   modeling_flash_attention_utilsr   r   utilsr   
get_logger__name__r9   r?   Tensorr   Moduler   r!   floatintbooltuplerE   r/   r"   r   <module>rP      s3    h  
		H	%68 ELL %((// ekk (  !% !!%CHHOOC<<C 
C <<	C
 LL4'C C T\C $JC T\C d{C <<$C 5<<Cr"   