
    鬜iAA                        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 	 d dlm!Z" dZ#ejH                  jK                  dd      jM                         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jV                   edd      iejV                   edd      iejV                   edd       iejV                   ed!d       iejV                   edd      id"d ed#d$      iejX                   ed%d&      ejV                   ed%d&      iejV                   ed'd&      iejV                   ed%d&      id(dejV                  ejZ                  z   ed)d*d+      iidejV                  ejZ                  z   ed)d,d+      iidejV                  ejZ                  z   ed)d-d+      iidejV                  ejZ                  z   ed)d.d+      iidejV                  ejZ                  z   ed)d/d+      iidejV                  ejZ                  z   ed)d0d+      iid1Z.e/e*e/ee*z  ee/eef   z  f   f   e0d2<   e0ejV                   ed3d45      iejV                   ed3d45      id6e.d7<   d8 Z1dUd9Z2dAd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<y# e $ r dZY w xY w# e $ r dZ#Y w xY w# e $ r  dZ(dZ)d: Zd; Z! G d< d=      Zd> Zd? Zd@ Z2Y w xY w)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                 b    t         rt        |       S t        j                  dt                d S )NFkernels hub usage is disabled through the environment USE_HUB_KERNELS=c                     | S N clss    a/mnt/e/genesis-system/.venv/lib/python3.12/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   >   s2    7
CCXYvXwx #"r!   	func_namec                     t         rt        rt        |       S t        st        j	                  d       d S t        j	                  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   sV     =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                 T    | v xs" t        fd| j                         D              S )Nc              3   Z   K   | ]"  }t        |t              xr t        |       $ y wr   )
isinstancedicthas_key).0vkeys     r   	<genexpr>zhas_key.<locals>.<genexpr>   s&     [1z!T2Fwq#F[s   (+)anyvalues)drM   s    `r   rJ   rJ      s'    ax[3[PQPXPXPZ[[[r!   c                 p    | t         } t        | d      rt        d      st        d      t	        |        y )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      s8    ?%G7E"+?H+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y)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pr!   N)__name__
__module____qualname__rd   r   r!   r   r   r     s    	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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                 >    | duxr 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II@BUV^bbr!   attention_wrapperc                 r   ddl m} ddlm} d| v r| j	                  d      d   n| }t        |      syt        st        d      d|v r%|j	                  d      \  }}|j                         }n|}d}|j                         }|j                  d	      \  }}}|j                         }|r|j                         nd}	 t        ||
      }	t        |	d      r|t        }|}n|t        |	|      }|j!                  |        |j!                  | |d          |	S # t        $ r}
t        d| d|
 d      d}
~
ww xY w)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   %  sf    =8<?CV<V*005a8\o%&O
 	
 /55c:!'')"mmoG'',OGQmmoG#))+$C[Gc2 v/0$ 7+		 !&+6 $$%8/J ))*=?[\o?pqM  [H	QTUVTWWXYZZ[s   ;D 	D6D11D6r   rU   c                    | |v rt        ||    t              r||    S | t        vrt        j	                  d|  d       d || <   y t
        rW	 t        |    d   }t        |    j                  dd       }t        |    j                  dd       }t        |||      }||| <   ||    S dd l
}| j                  dd	      }d
| d}	  |j                  dt              }	t        |	|d       }
t!        |
      r" |
       r	  |j                  |       }||| <   |S d || <   ||    S # t        $ r d || <   Y ||    S t        $ r d || <   Y ||    S w xY w# t        $ r d }
Y ow xY w# t        $ r d || <   Y ||    S w xY w)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{##--gk]2STU#
	()+6yAG*;7;;JMH)+6::9dKG(GLF#)GK > ;- 	%--c37/**5		'/	//0FTI"))Y"E '(-@-B,000O3DF'-$ $(GK ;= ! 	(#'GK : ;9  	(#'GK 4 ;9	(  	'"&	'  ,'+$ ;,s=   AD >$E 5E E-E EEEE*)E*r{   r   c                 
   ddl m} d|| d}t        rgt        j                  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     sv    -+R]^J#,,44Y?_-1B1B81LL!+'^hii!+'RRbccr!   module_namesc                 8     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                 <    | j                   fd}|| _         | S )Nc                 F     | g|i | D ]  }t        | d|        y )N	rotary_fn)setattr)rc   r[   r\   fnr   	orig_inits       r   new_initz8use_kernelized_func.<locals>.decorator.<locals>.new_init  s0    d,T,V," /k2./r!   )rd   )r   r   r   r   s     @r   rY   z&use_kernelized_func.<locals>.decorator  s    LL		/  
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      s+    	 	 $  , 1 5 4 
		H	%t
 
*
.Y(,% %'JJNN3De$L$R$R$T!48LL# #%C %" O;:*
 O/*
 =-! =-! 7(! ;(! =-!5 
D O2+
 :1  :1!	 11! :1!#
2 !3!33_:)6
 !3!33_:*6
 !3!33_:(6
 !3!33_:vWX6
 !3!33_:vWX6
 !3!33_:z[\6
k|eOT#tFSL/DI^D_2_$_``a |~ ! 6B]! 6B]!-
()\)^ "CqQ:qI$AaP2 T#tCH~-.  8: S*t"334 93: $  DH7719D7$7t Pf , # , S*t:K5K0L , ^dC d3: dsSySWGW dcm dd8nx&? 4
O    .(-%.r  !
q q

u
=!
sU   M! "M )M 1IM! MM! MM! MM! MM! !"NN