o
    iP                     @   s   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
 d
e
ZG dd de
ZdefddZdS )zFP-Quant integration file    N   )is_fp_quant_available)FPQuantConfig)FPQuantDtype)ConversionOps)get_module_from_namec                   @   sP   e Zd Zdd Z		d
dejdejjdB dee	 dB de
e	ejf fdd	ZdS )FpQuantQuantizec                 C   
   || _ d S Nhf_quantizerselfr    r   d/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/transformers/integrations/fp_quant.py__init__"      
zFpQuantQuantize.__init__N
input_dictmodelmissing_keysreturnc                 K   s   t | d \}}|d }tj|}t||\}}	||_tj|j |	  W d    n1 s4w   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_keyr   r   r   convert%   s$   

zFpQuantQuantize.convert)NN)__name__
__module____qualname__r   r   Tensorr   Moduleliststrdictr-   r   r   r   r   r   !   s    

r   c                   @   sZ   e Zd Zdd Z			ddejdejjdB dedB de	e dB de
eejf f
d	d
ZdS )FpQuantDeserializec                 C   r	   r
   r   r   r   r   r   r   G   r   zFpQuantDeserialize.__init__Nr   r   full_layer_namer   r   c                 K   s   t | d \}}t|tr|d n|}t||\}}	|dkr<tjj|dd}
|
tjtdtjtddS |dkrbtj|}|tjtdtjtdtjtddS d S )Nr   r   F)requires_grad)r   .weightr   r   )r   r9   r   r   )	r   r   
isinstancer3   r   r   r   r    zeros)r   r   r   r7   r   r'   r(   r)   r*   r+   qweightdqweightr   r   r   r-   J   s(   zFpQuantDeserialize.convert)NNN)r.   r/   r0   r   r   r1   r   r2   r4   r3   r5   r-   r   r   r   r   r6   F   s     

r6   configc              
   C   s   | j dkr	tj}n| j dkrtj}ntd| j  | jdkr#tj}n| jdkr,tj}n| jdkr5tj}ntd| j t|| j	|| j
| j| j| j| jd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)rC   r   MXFP4NVFP4
ValueErrorrE   BF16MXFP8FPQuantLinearConfigrD   rF   rG   rH   rI   rJ   )r>   rC   rE   r   r   r   adapt_fp_quant_configv   s,   




rQ   )__doc__r   utilsr   fp_quantr   rP   r   &transformers.utils.quantization_configcore_model_loadingr   quantizers.quantizers_utilsr   r   r6   rQ   r   r   r   r   <module>   s   %0