
    biP                         d Z ddlZddlmZ  e            rddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ  G d	 d
e
          Z G d de
          ZdefdZdS )zFP-Quant integration file    N   )is_fp_quant_available)FPQuantConfig)FPQuantDtype)ConversionOps)get_module_from_namec                       e Zd Zd Z	 	 ddej        dej        j        dz  dee	         dz  de
e	ej        f         fdZdS )	FpQuantQuantizec                     || _         d S Nhf_quantizerselfr   s     ]/root/projects/butler/venv/lib/python3.11/site-packages/transformers/integrations/fp_quant.py__init__zFpQuantQuantize.__init__"       (    N
input_dictmodelmissing_keysreturnc                 .   t          |                                          d         \  }}|d         }t          j                            |          }t          ||          \  }}	||_        t          j                            |j                  5  |	                                 d d d            n# 1 swxY w Y   |
                    dd          d         }
|                    |           |                    |
 d           |                    |
 d           |                    |
 d           |                    |
 d           |                    |
 d           |                    |
 d	           |                    |
 d
           i S )Nr   .   z.backward_hadamard_matrixz.forward_hadamard_matrixz.act_global_scalez.weight_global_scale.qweight.scales	.dqweight)tupleitemstorchnn	Parameterr   weightcudadevicepre_forwardrsplitdiscard)r   r   r   r   kwargs
target_keyvaluer$   module_prefix_target_keys              r   convertzFpQuantQuantize.convert%   s    "*"2"2"4"455a8
Ea##E**(
;;	 Zu|,, 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! '--c155a8 	Z((( 1LLLMMM 1KKKLLL 1DDDEEE 1GGGHHH 1;;;<<< 1:::;;; 1<<<===	s   B11B58B5)NN)__name__
__module____qualname__r   r!   Tensorr"   Moduleliststrdictr0    r   r   r
   r
   !   s        ) ) ) )-)-	 L x% 3i$&	 
c5<	      r   r
   c                       e Zd Zd Z	 	 	 d	dej        dej        j        dz  dedz  de	e         dz  de
eej        f         f
dZdS )
FpQuantDeserializec                     || _         d S r   r   r   s     r   r   zFpQuantDeserialize.__init__G   r   r   Nr   r   full_layer_namer   r   c                 F   t          |                                          d         \  }}t          |t                    r|d         n|}t	          ||          \  }}	|dk    rt
          j                            |d          }
|
t
          j                            t          j        d                    t
          j                            t          j        d                    dS |dk    rt
          j                            |          }|t
          j                            t          j        d                    t
          j                            t          j        d                    t
          j                            t          j        d                    dS d S )Nr   r   F)requires_grad)r   .weightr   r   )r   r@   r   r   )	r   r    
isinstancer6   r   r!   r"   r#   zeros)r   r   r   r=   r   r*   r+   r,   r-   r.   qweightdqweights               r   r0   zFpQuantDeserialize.convertJ   sb    "*"2"2"4"455a8
E&ud33>a(
;;	
 ##h((# )  G $ !8--ek!nn=="X//A??   $$x))%00H & !8--ek!nn==!H..u{1~~>> 8--ek!nn==  	 %$r   )NNN)r1   r2   r3   r   r!   r4   r"   r5   r7   r6   r8   r0   r9   r   r   r;   r;   F   s        ) ) ) )-&*)-) )L) x%) t	)
 3i$&) 
c5<	 ) ) ) ) ) )r   r;   configc           
         | j         dk    rt          j        }n/| j         dk    rt          j        }nt	          d| j                    | j        dk    rt          j        }nG| j        dk    rt          j        }n/| j        dk    rt          j        }nt	          d| j                   t          || j	        || j
        | j        | j        | j        | j                  S )Nmxfp4nvfp4zUnsupported forward dtype: bf16mxfp8zUnsupported backward dtype: )forward_dtypeforward_methodbackward_dtypestore_master_weightshadamard_group_sizepseudoquantizationtransform_initmodules_to_not_convert)rK   r   MXFP4NVFP4
ValueErrorrM   BF16MXFP8FPQuantLinearConfigrL   rN   rO   rP   rQ   rR   )rE   rK   rM   s      r   adapt_fp_quant_configrY   v   s    w&&$*			(	($*Mv7KMMNNN&&%*		'	)	)%+		'	)	)%+O8MOOPPP#,%#8"6!4,%<	 	 	 	r   )__doc__r!   utilsr   fp_quantr   rX   r   &transformers.utils.quantization_configcore_model_loadingr   quantizers.quantizers_utilsr   r
   r;   rY   r9   r   r   <module>r`      s          
  &======%%%%%% @ @ @ @ @ @ . . . . . . > > > > > >" " " " "m " " "J- - - - - - - -`-      r   