
    biAA                        U d dl Zd dlZd dlZd dlmZ d dlmZ d dlm	Z
 ddlmZmZ ddlmZ dd	lmZ  ej        e          Z	 d d
lmZmZmZmZmZ d dlmZ d dlmZ 	 d dlmZ n# e $ r dZY nw xY w	 d dlm!Z" dZ#n# e $ r dZ#Y nw xY wej$        %                    dd          &                                Z'dZ(e'ev Z)de*fdZde*fdZ!d edd          id edd          iej+         edd          iej+         edd          iej+         edd           iej+         ed!d           iej+         edd          id"d ed#d$          iej,         ed%d&          ej+         ed%d&          iej+         ed'd&          iej+         ed%d&          id(dej+        ej-        z   ed)d*d+          iidej+        ej-        z   ed)d,d+          iidej+        ej-        z   ed)d-d+          iidej+        ej-        z   ed)d.d+          iidej+        ej-        z   ed)d/d+          iidej+        ej-        z   ed)d0d+          iid1Z.e/e*e/ee*z  ee/eef         z  f         f         e0d2<   e,ej+         ed3d45          iej+         ed3d45          id6e.d7<   d8 Z1dUd9Z2n+# e $ r# dZ(dZ)d: Zd; Z! G d< d=          Zd> Zd? Zd@ Z2Y nw xY wdAddBdCddBdCddBdDZ3e/e*e/e*e*f         f         e0dE<   i Z4e/e*edz  f         e0dF<   dGe*dz  dHe5fdIZ6	 dUdGe*dJedz  dHedz  fdKZ7e4fdLe*dMe/e*edz  f         fdNZ8dVdLe*dOe*dz  dPe9e*z  dz  dHefdQZdRe:e         ez  fdSZ;g dTZ<dS )W    N)Callable)
ModuleType)version   )ENV_VARS_TRUE_VALUESlogging)is_kernels_available   )flash_attention_forward)DeviceLayerRepositoryModeregister_kernel_mappingreplace_kernel_forward_from_hub)
get_kernel)use_kernel_forward_from_hub)FuncRepository)use_kernel_func_from_hubTFUSE_HUB_KERNELSYES
layer_namec                 x    t           rt          |           S t                              dt                      d S )NFkernels hub usage is disabled through the environment USE_HUB_KERNELS=c                     | S N clss    `/root/projects/butler/venv/lib/python3.11/site-packages/transformers/integrations/hub_kernels.py<lambda>z-use_kernel_forward_from_hub.<locals>.<lambda>E   s    s     )_kernels_enabled$_kernels_use_kernel_forward_from_hubloggerwarning_once_TRANSFORMERS_USE_HUB_KERNELS)r   s    r   r   r   >   sF     	#7
CCCxYvxx   #?"r!   	func_namec                     t           rt          rt          |           S t          st                              d           n"t                              dt
                      d S )Nzwuse_kernel_func_from_hub is not available in the installed kernels version. Please upgrade kernels to use this feature.r   c                     | S r   r   funcs    r   r    z*use_kernel_func_from_hub.<locals>.<lambda>T   s     r!   )r"   _has_use_kernel_func_from_hub!_kernels_use_kernel_func_from_hubr$   r%   r&   )r'   s    r   r   r   G   s|     	% = 	%4Y???0 ##B   
 ##|]z||   %$$r!   cudaz!kernels-community/deformable-detrMultiScaleDeformableAttention)repo_idr   zkernels-community/moeLlama4TextMoezkernels-community/liger_kernelsLigerRMSNormzkernels-community/rmsnormRMSNormzkernels-community/mlx_rmsnorm)r.   rocmxpumpsnpuzmedmekk/triton-llama-mlpTritonLlamaMLPzkernels-community/megablocksMegaBlocksMoeMLPzahadnagy/megablocks)r.   r4   r5   zkernels-community/activationFastGELU)r0   r   r   	QuickGELUNewGELUSiluGeluGeluTanh)r/   r1   r3   MLPr9   r:   r;   r<   SiLUGeLUr?   _KERNEL_MAPPINGzkernels-community/rotaryapply_rotary_transformers)r0   r'   )r5   r.   rotary_pos_embc                 f    | v p,t          fd|                                 D                       S )Nc              3   b   K   | ])}t          |t                    ot          |          V  *d S r   )
isinstancedicthas_key).0vkeys     r   	<genexpr>zhas_key.<locals>.<genexpr>   s:      [[1z!T22Fwq#[[[[[[r!   )anyvalues)drM   s    `r   rJ   rJ      s<    ax[3[[[[PQPXPXPZPZ[[[[[[r!   c                     | t           } t          | d          rt          d          st          d          t	          |            d S )Nr5   z0.10.2)MIN_VERSIONzfkernels uses an incompatible version. Please install the latest version with `pip install -U kernels`.)rC   rJ   r	   ImportErrorr   )mappings    r   $register_kernel_mapping_transformersrV      s\    ?%G7E"" 	+?H+U+U+U 	x   	 (((((r!   c                      d }|S )Nc                     | S r   r   r   s    r   	decoratorz.use_kernel_forward_from_hub.<locals>.decorator   s    Jr!   r   argskwargsrY   s      r   r   r      s    	 	 	 r!   c                      d }|S )Nc                     | S r   r   r*   s    r   rY   z+use_kernel_func_from_hub.<locals>.decorator   s    Kr!   r   rZ   s      r   r   r      s    	 	 	 r!   c                       e Zd Zd ZdS )r   c                      t          d          )NzNLayerRepository requires `kernels` to be installed. Run `pip install kernels`.RuntimeError)selfr[   r\   s      r   __init__zLayerRepository.__init__  s    opppr!   N)__name__
__module____qualname__rd   r   r!   r   r   r     s(        	q 	q 	q 	q 	qr!   r   c                       t          d          )Nz^replace_kernel_forward_from_hub requires `kernels` to be installed. Run `pip install kernels`.ra   r[   r\   s     r   r   r     s    l
 
 	
r!   c                       t          d          )NzVregister_kernel_mapping requires `kernels` to be installed. Run `pip install kernels`.ra   ri   s     r   r   r     s    stttr!   c                       t          d          )Nzcregister_kernel_mapping_transformers requires `kernels` to be installed. Run `pip install kernels`.ra   ri   s     r   rV   rV     s    q
 
 	
r!   zkernels-community/causal-conv1d)r0   r   zkernels-community/mamba-ssm)zcausal-conv1dz	mamba-ssmzfalcon_mamba-ssm_HUB_KERNEL_MAPPING_KERNEL_MODULE_MAPPINGattn_implementationreturnc                 8    | duot          j        d|           duS )zJCheck whether `attn_implementation` matches a kernel pattern from the hub.Nz'^[^/:]+/[^/:]+(?:@[^/:]+)?(?::[^/:]+)?$)research)rn   s    r   	is_kernelrs     s.     	4' 	cI@BUVV^bbr!   attention_wrapperc                     ddl m} ddlm} d| v r|                     d          d         n| }t          |          sdS t          st          d          d|v r-|                    d          \  }}|                                }n|}d}|                                }|	                    d	          \  }}}|                                }|r|                                nd}	 t          ||
          }	n(# t          $ r}
t          d| d|
 d          d}
~
ww xY wt          |	d          r|t          }|}n|t          |	|          }|                    | |           |                    | |d                    |	S )a<  
    Load and register the kernel associated to `attn_implementation`.

    Args:
        attn_implementation: A string, usually a kernel repo like "kernels-community/flash-mla".
        attn_wrapper: a callable for the wrapper around the attention implementation. In `transformers` we
            have a wrapper around the `flash_attn_var_len` call, and the same goes for `sdpa` and `eager`.
            They just prepare the arguments properly. This is mostly used for continious batching, where we
            want the `paged` wrapper, which calls the paged cache.
    r   )ALL_MASK_ATTENTION_FUNCTIONS)ALL_ATTENTION_FUNCTIONS|r
   Nz`kernels` is either not installed or uses an incompatible version. Please install the latest version with `pip install -U kernels`.:@)revisionz-An error occurred while trying to load from 'z': .flash_attn_varlen_funcflash_attention_2)masking_utilsrv   modeling_utilsrw   splitrs   _kernels_availablerT   strip	partitionr   	Exception
ValueErrorhasattrr   getattrregister)rn   rt   rv   rw   actual_attn_namer0   kernel_name_revkernelekernel_functions               r   load_and_register_attn_kernelr   %  s    =<<<<<888888<?CV<V<V*0055a88\o%&& t 
O
 
 	
 /55c::!''))"mmooG'',,OGQmmooG
&#))+++$C[Gc222 [ [ [YYYUVYYYZZZ[ v/00 7$ 7+		 !&+66 $$%8/JJJ ))*=?[\o?pqqqMs   $C6 6
D DDr   rU   c                 >   | |v r#t          ||          t                    r||          S | t          vr%t                              d|  d           d || <   d S t
          r	 t          |          d         }t          |                              dd           }t          |                              dd           }t          |||          }||| <   n# t          $ r d || <   Y nt          $ r d || <   Y nw xY wdd l
}|                     dd	          }d
| d}	  |j        dt                    }	t          |	|d           }
n# t          $ r d }
Y nw xY wt!          |
          r8 |
            r.	  |j        |           }||| <   |S # t          $ r d || <   Y n	w xY wd || <   ||          S )NzKernel z! not found in _HUB_KERNEL_MAPPINGr0   r{   r   r{   r   r   -r   is_
_availablez..utils.import_utils)rH   r   rl   r$   r%   r   getr   FileNotFoundErrorAssertionError	importlibreplaceimport_module__package__r   r   callable)r   rU   r0   r{   r   r   r   new_kernel_namer'   	utils_modis_kernel_availablemodules               r   lazy_load_kernelr   _  s=   g*W[-A:"N"N{##---TkTTTUUU#t #(
	()+6yAG*;7;;JMMH)+6::9dKKG(GLLLF#)GK    	( 	( 	(#'GK    	( 	( 	(#'GK   	( 	%--c3775/555		'/	/0FTTI"))Y"E"E 	' 	' 	'"&	' '(( 		(-@-@-B-B 		(,00O1EFF'-$ , , ,'+$$$, $(GK ;s=   A,C C-C-,C-'D9 9EE%E= =FFr{   r   c                 "   ddl m} d|| d}t          rnt          j                            d          }t          j        |          t          j        d          k    rt          | |||          S t          | ||          S t          d	          )
Nr   )__version__transformers)	frameworkr   r0   kernelsz0.10.4)r{   r   
user_agentr   zFkernels is not installed, please install it with `pip install kernels`)
 r   r   r   metadatar   pkg_versionparseget_kernel_hubrT   )r   r{   r   r   r   kernels_versions         r   r   r     s    -+R]^^J d#,44Y??_--1B81L1LLL!+'^hiiii!+'RRRRbcccr!   module_namesc                 B     t           t                    r g  fd}|S )a  
    This decorator attaches the target function as an attribute of the module.
    The function must already be decorated with @use_kernel_func_from_hub
    this decorator then wraps it as an nn.Module internally.
    When kernelize is later applied to the full model, the function can be accessed as a regular module attribute and kernelized just like any other layer.
    The kernelization is performed in place, modifying the module directly.
    c                 2    | j         fd}|| _         | S )Nc                 L     | g|R i | D ]}t          | d|           d S )N	rotary_fn)setattr)rc   r[   r\   fnr   	orig_inits       r   new_initz8use_kernelized_func.<locals>.decorator.<locals>.new_init  sQ    Id,T,,,V,,," / /k2..../ /r!   )rd   )r   r   r   r   s     @r   rY   z&use_kernelized_func.<locals>.decorator  s7    L		/ 	/ 	/ 	/ 	/ 	/  
r!   )rH   r   )r   rY   s   ` r   use_kernelized_funcr     s?     ,)) &$~
 
 
 
 
 r!   )	r   r   r   r   rV   r   r   r   r   r   )NN)=importlib.metadatar   osrq   collections.abcr   typesr   	packagingr   r   utilsr   r   utils.import_utilsr	   flash_attentionr   
get_loggerre   r$   r   r   r   r   r   r   r   r   r   r#   r   rT   r   r-   r,   environr   upperr&   r   r"   str	INFERENCETRAININGTORCH_COMPILErC   rI   __annotations__rJ   rV   rl   rm   boolrs   r   r   intlistr   __all__r   r!   r   <module>r      sk        				 				 $ $ $ $ $ $       , , , , , , 1 1 1 1 1 1 1 1 5 5 5 5 5 5 4 4 4 4 4 4 
	H	%	%t
                       
*******   .YYYYYY(,%% . . .(-%%%. %'JNN3De$L$L$R$R$T$T!48LL# # # # #%C % % % %" OO;:  *
 OO/*  
 =-! ! ! =-! ! ! 7(! ! ! ;(! ! ! =-! ! !5 
  
D OO2+  
 :1      :1! ! !	 11! ! ! :1! ! !#
 
2 !33__:)6 6 6
 !33__:*6 6 6
 !33__:(6 6 6
 !33__:vWX6 6 6
 !33__:vWX6 6 6
 !33__:z[\6 6 6
k|e |eOT#tFSL/DI^D_2_$_``a | | |~ ! 6B]! ! ! 6B]! ! !-
 -
()\ \ \) ) ) ) )  !
 !
 !
    q q q q q q q q
 
 

u u u
 
 
 
 
=!
J "CqQQ:qII$AaPP2 2 T#tCH~-.    8: S*t"334 9 9 93: $     DH7 7719D7$7 7 7 7t Pf ,  , # , S*t:K5K0L ,  ,  ,  , ^d dC d3: dsSySWGW dcm d d d dd8nx&?    4
 
 
s[   J2  A' &J2 'A1.J2 0A11J2 5A> =J2 >BJ2 BH)J2 2%KK