Ë
    ÛÓ^j7  ã                   óÐ   — d dl Z d dlZd dlZddlmZ  e«       rd dlmZ dZdZ e	 ej                  de¬«      «      Zeeefvr ed«      ‚i Zd	„ Zd
„ Z	 	 	 dd„Z	 	 	 	 	 dd„Zd„ Zy)é    Né   )Úis_torch_npu_available)Únpu_fusion_attentioné   ÚNPU_FA2_SPARSE_MODE)Údefaultz…Environment variable `NPU_FA2_SPARSE_MODE` can only be set as 2 (top-left aligned causal mask) or 3 (down-right aligned causal mask).c                 óª   — | t         vrCt        j                  t        j                  ddg| ¬«      d¬«      j	                  «       t         | <   t         |    S )z6Get or create attention mask for the specified device.i   ©Údeviceé   )Údiagonal)ÚATTN_MASK_NPU_CACHEÚtorchÚtriuÚonesÚboolr
   s    úx/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/integrations/npu_flash_attention.pyÚget_attn_mask_npur   (   sF   € àÔ(Ñ(Ü&+§j¡j´·±¸TÀ4¸LÐQWÔ1XÐcdÔ&e×&jÑ&jÓ&lÔ˜FÑ#Ü˜vÑ&Ð&ó    c                  ó4   — t        «       rt        t        k(  S dS )NF)r   ÚSPARSE_MODEÚ!TOP_LEFT_ALIGNED_CAUSAL_MASK_MODE© r   r   Ú'is_npu_fa2_top_left_aligned_causal_maskr   /   s   € Ü?UÔ?WŒ;Ô;Ñ;ÐbÐ]bÐbr   c                 ó,  — d|z
  }|€%dt        j                  | j                  d   «      z  }|s&| j                  d   }t        | |||d||¬«      d   }	|	S t	        | j
                  «      }
| j                  d   }t        | |||d|||
t        ¬«	      d   }	|	S )Nç      ð?éÿÿÿÿr   ÚBSND)Ú	keep_probÚscaler   )r   r    Ú
atten_maskÚsparse_mode)ÚmathÚsqrtÚshaper   r   r   r   )ÚqÚkÚvÚ	dropout_pÚsoftmax_scaleÚcausalÚkwargsr   Úhead_numÚoutputÚattn_mask_npus              r   Únpu_flash_attn_funcr0   3   sµ   € ð �i‘€IàÐØœdŸi™i¨¯©°©Ó4Ñ4ˆáØ—7‘7˜1‘:ˆÜ% a¨¨A¨x¸È9Ð\iÔjÐklÑmˆð  €Mô *¨!¯(©(Ó3ˆØ—7‘7˜1‘:ˆÜ%ØØØØØØØØ$Ü#ô

ð ñ
ˆð €Mr   c
                 óì  — d|z
  }|€%dt        j                  | j                  d   «      z  }|	s–| j                  d   }t        | |||d d ||dt	        |dd  j                  «       j                  «       j                  «       «      t	        |dd  j                  «       j                  «       j                  «       «      ¬«      d   }|S t        | j                  «      }| j                  d   }t        | |||d d |||dt	        |dd  j                  «       j                  «       j                  «       «      t	        |dd  j                  «       j                  «       j                  «       «      t        ¬«      d   }|S )Nr   r   r   ÚTND)Úpser!   r    r   Úinput_layoutÚactual_seq_qlenÚactual_seq_kvlenr   )	r3   Úpadding_maskr!   r    r   r4   r5   r6   r"   )r#   r$   r%   r   ÚtupleÚcpuÚnumpyÚtolistr   r   r   )r&   r'   r(   Úcu_seqlens_qÚcu_seqlens_kÚmax_seqlen_qÚmax_seqlen_kr)   r*   r+   r,   r   r-   r.   r/   s                  r   Únpu_flash_attn_varlen_funcr@   V   sv  € ð �i‘€IàÐØœdŸi™i¨¯©°©Ó4Ñ4ˆáØ—7‘7˜1‘:ˆÜ%ØØØØØØØØØÜ! ,¨q¨rÐ"2×"6Ñ"6Ó"8×">Ñ">Ó"@×"GÑ"GÓ"IÓJÜ" <°°Ð#3×#7Ñ#7Ó#9×#?Ñ#?Ó#A×#HÑ#HÓ#JÓKô
ð ñˆð@ €Mô% *¨!¯(©(Ó3ˆØ—7‘7˜1‘:ˆÜ%ØØØØØØØ$ØØØÜ! ,¨q¨rÐ"2×"6Ñ"6Ó"8×">Ñ">Ó"@×"GÑ"GÓ"IÓJÜ" <°°Ð#3×#7Ñ#7Ó#9×#?Ñ#?Ó#A×#HÑ#HÓ#JÓKÜ#ô
ð ñˆð  €Mr   c                  ó   — t        d«      ‚)Nz.npu_flash_attn_with_kvcache is not implemented)ÚNotImplementedErrorr   r   r   Únpu_flash_attn_with_kvcacherC   Ž   s   € Ü
ÐNÓ
OÐOr   )ç        NF)NNrD   NF)r#   Úosr   Úutils.import_utilsr   Ú	torch_npur   r   Ú#DOWN_RIGHT_ALIGNED_CAUSAL_MASK_MODEÚintÚgetenvr   Ú
ValueErrorr   r   r   r0   r@   rC   r   r   r   ú<module>rL      s§   ðó Û 	ã å 7ñ ÔÝ.ð
 %&Ð !Ø&'Ð #á�)�"—)‘)Ð1Ð;^Ô_Ó`€ØÐ8Ð:]Ð^Ñ^Ù
ð	1óð ð
 Ð ò'òcð ØØó ðR ØØØØó4ópPr   