§
    ‚Štjä3  ã                   óÊ   — d dl mZ ddlmZ erddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZ ddlmZ  e¦   «         r
d d	lZdd
lmZ  ej        e¦  «        Zd	Z G d„ de¦  «        Zd	S )é    )ÚTYPE_CHECKINGé   )ÚHfQuantizeré   )ÚPreTrainedModel)ÚMxfp4Config)Úis_accelerate_availableÚis_kernels_availableÚis_torch_availableÚis_triton_availableÚlogging)Úget_module_from_nameN)ÚWeightConverterc                   ó®   ‡ — e Zd ZU dZdZded<   ˆ fd„Zd„ Zd„ Zdd	d
e	de
fd„Zdd„Z	 ddd	de
fd„Zd„ Zd„ Zd„ Zd„ Zede
fd„¦   «         Zd„ Zd„ Zˆ xZS )ÚMxfp4HfQuantizerz/
    FP4 quantization using fbgemm kernels
    Fr   Úquantization_configc                 óJ   •—  t          ¦   «         j        |fi |¤Ž d | _        d S ©N)ÚsuperÚ__init__Útriton_kernels_hub)Úselfr   ÚkwargsÚ	__class__s      €úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_mxfp4.pyr   zMxfp4HfQuantizer.__init__2   s1   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ø"&ˆÔÐÐó    c                 óŒ   — | j         €7	 ddlm}  |dd¬¦  «        | _         n# t          $ r t          d¦  «        ‚w xY w| j         S )z3Lazy import and initialize kernels only when neededNr   )Ú
get_kernelz(kernels-community/gpt-oss-triton-kernelsr   )Úversionz2kernels package is required for MXFP4 quantization)r   Úintegrations.hub_kernelsr   ÚImportError)r   r   s     r   Ú_lazy_import_kernelsz%Mxfp4HfQuantizer._lazy_import_kernels6   sv   € àÔ"Ð*ðXØAÐAÐAÐAÐAÐAà*4¨*Ð5_ÐijÐ*kÑ*kÔ*k�Ô'Ð'øÝð Xð Xð XÝ!Ð"VÑWÔWÐWðXøøøàÔ&Ð&s   ‰" ¢<c                 óš  — t          ¦   «         st          d¦  «        ‚| j        j        rd S t	          ¦   «         st          d¦  «        ‚t
          j                             ¦   «         pt          j        d¦  «        }|j	        dvrF| j
        r,t                               d|› d�¦  «         d| j        _        d S t          d|› d	�¦  «        ‚t
          j                             ¦   «         r d}t!          d
¦  «        }t#          ¦   «         }n‘t
          j                             ¦   «         rBt
          j                             ¦   «         }|dk    }t!          d¦  «        }t#          ¦   «         }n1|j	        dk    r d}t!          d
¦  «        }t#          ¦   «         }nd}d}d}| j
        r|s(t                               d¦  «         d| j        _        d S |s(t                               d¦  «         d| j        _        d S |s(t                               d¦  «         d| j        _        d S n3|st)          d¦  «        ‚|st)          d¦  «        ‚|st)          d¦  «        ‚| j
        s|                      ¦   «          |                     d¦  «        }|�At/          |t0          ¦  «        r.| j
        s)d|                     ¦   «         v rt)          d¦  «        ‚d S d S d S d S )NzqUsing mxfp4 quantization requires torchPlease install the latest version of torch ( pip install --upgrade torch )z9Using mxfp4 requires Accelerate: `pip install accelerate`Úcpu)ÚcudaÚxpur$   zGUsing MXFP4 quantized models requires model on cuda/xpu/cpu, but found zj, we will default to dequantizing the model to bf16. To use mxfp4, please disable the current accelerator.TzIQuantizing a model using MXFP4 requires model on cuda/xpu/cpu, but found z7. To use mxfp4, please disable the current accelerator.z3.5.0)é   é   z3.4.0FuÒ   MXFP4 quantization is only supported on GPUs with compute capability >= 7.5 (e.g T4, A100, L4, H100, or B200) or XPUs (e.g IntelÂ® Data Center GPU Max Series). We will default to dequantizing the model to bf16.zÄMXFP4 quantization requires Triton: CUDA requires Triton >= 3.4.0, XPU/CPU requires Triton >= 3.5.0. Please install triton: `pip install triton`. We will default to dequantizing the model to bf16.z„MXFP4 quantization requires the `kernels` package: `pip install kernels>=0.12.0`. We will default to dequantizing the model to bf16.u¥   MXFP4 quantization is only supported on GPUs with compute capability >= 7.5 (e.g T4, A100, L4, H100, or B200) or XPUs (e.g IntelÂ® Data Center GPU Max Series) or CPUz�MXFP4 quantization requires Triton: CUDA requires Triton >= 3.4.0, XPU/CPU requires Triton >= 3.5.0. Please install triton: `pip install triton`zPMXFP4 quantization requires the `kernels` package: `pip install kernels>=0.12.0`Ú
device_mapÚdiskzäYou are attempting to load an FP4 model with a device_map that contains a disk device.This is not supported when the model is quantized on the fly. Please use a quantized checkpoint or remove the disk device from the device_map.)r   r!   r   Ú
dequantizer	   ÚtorchÚacceleratorÚcurrent_acceleratorÚdeviceÚtypeÚpre_quantizedÚloggerÚwarning_onceÚRuntimeErrorr&   Úis_availabler   r
   r%   Úget_device_capabilityÚ
ValueErrorr"   ÚgetÚ
isinstanceÚdictÚvalues)	r   Úargsr   r/   Úis_device_supported_mxfp4Útriton_availableÚkernels_installedÚcompute_capabilityr)   s	            r   Úvalidate_environmentz%Mxfp4HfQuantizer.validate_environmentA   s‹  € Ý!Ñ#Ô#ð 	Ýð]ñô ð ð
 Ô#Ô.ð 	ØˆFå&Ñ(Ô(ð 	[ÝÐYÑZÔZÐZåÔ"×6Ò6Ñ8Ô8ÐO½E¼LÈÑ<OÔ<OˆØŒ;Ð4Ð4Ð4ØÔ!ð 	Ý×#Ò#ð QÐ^dð  Qð  Qð  Qñô ð ð 7;�Ô(Ô3Ø�å"ð `Ð`fð  `ð  `ð  `ñô ð õ Œ9×!Ò!Ñ#Ô#ð 	&Ø(,Ð%Ý2°7Ñ;Ô;ÐÝ 4Ñ 6Ô 6ÐÐÝŒZ×$Ò$Ñ&Ô&ð 	&Ý!&¤×!AÒ!AÑ!CÔ!CÐØ(:¸fÒ(DÐ%Ý2°7Ñ;Ô;ÐÝ 4Ñ 6Ô 6ÐÐØŒ[˜EÒ!Ð!Ø(,Ð%Ý2°7Ñ;Ô;ÐÝ 4Ñ 6Ô 6ÐÐà(-Ð%Ø$ÐØ %ÐàÔð &	qØ,ð Ý×#Ò#ðIñô ð ð
 7;�Ô(Ô3Ø�à#ð Ý×#Ò#ðIñô ð ð
 7;�Ô(Ô3Ø�à$ð Ý×#Ò#ðIñô ð ð
 7;�Ô(Ô3Ø�ðð +ð 	qÝðlñô ð ð "ð 	qÝð`ñô ð ð #ð 	qÝÐoÑpÔpÐpàÔ!ð 	(Ø×%Ò%Ñ'Ô'Ð'à—Z’Z Ñ-Ô-ˆ
ØÐ!¥j°½TÑ&BÔ&BÐ!ØÔ%ð ¨&°J×4EÒ4EÑ4GÔ4GÐ*GÐ*GÝ ðgñô ð ð "Ð!Ð!Ð!ðð Ð*GÐ*Gr   Úmodelr   Ú
param_nameÚreturnc                 óh   — ddl m} t          ||¦  «        \  }}t          ||¦  «        r|dv rdS dS dS )Nr   ©ÚMxfp4GptOssExperts)Údown_proj_biasÚgate_up_proj_biasFT)ÚintegrationsrG   r   r9   )r   rB   rC   r   rG   ÚmoduleÚtensor_names          r   Úparam_needs_quantizationz)Mxfp4HfQuantizer.param_needs_quantization¡   sV   € Ø5Ð5Ð5Ð5Ð5Ð5å2°5¸*ÑEÔEÑˆ�Ý�fÐ0Ñ1Ô1ð 	ØÐEÐEÐEØ�uØ�4Øˆur   c                 óþ   — t           j                             ¦   «         r t           j                             ¦   «          d S t           j                             ¦   «         r t           j                             ¦   «          d S d S r   )r,   r%   r5   Úempty_cacher&   )r   rB   r   s      r   Ú#_process_model_after_weight_loadingz4Mxfp4HfQuantizer._process_model_after_weight_loading«   sl   € åŒ:×"Ò"Ñ$Ô$ð 	$ÝŒJ×"Ò"Ñ$Ô$Ð$Ð$Ð$ÝŒY×#Ò#Ñ%Ô%ð 	$ÝŒI×!Ò!Ñ#Ô#Ð#Ð#Ð#ð	$ð 	$r   Úuse_kernelsc                 óÀ  — ddl m} t          j                             ¦   «         pt          j        d¦  «        }|r/|j        dvr&t                               d¦  «         d| j	        _
        |s/|j        dv r&t                               d¦  «         d| j	        _
        |                      || j	        j        |j        ¦  «        | _         ||| j        | j	        ¬¦  «        }d S )	Nr   )Úreplace_with_mxfp4_linearr$   )r$   zžYou are using full precision kernels, we will dequantize the model to bf16. To use the quantized model with quantization kernels, please set use_kernels=FalseTz¯MXFP4 inference on CPU requires use_kernels=True, but use_kernels is disabled. We will dequantize the model to bf16. To run MXFP4 natively on CPU, please set use_kernels=True.)Úmodules_to_not_convertr   )rJ   rS   r,   r-   r.   r/   r0   r2   r3   r   r+   Úget_modules_to_not_convertrT   Ú_keep_in_fp32_modules)r   rB   rQ   r   rS   r/   s         r   Ú$_process_model_before_weight_loadingz5Mxfp4HfQuantizer._process_model_before_weight_loading²   s  € ð 	=Ð<Ð<Ð<Ð<Ð<õ Ô"×6Ò6Ñ8Ô8ÐO½E¼LÈÑ<OÔ<OˆØð 	7˜6œ;¨gÐ5Ð5Ý×Òðeñô ð ð 37ˆDÔ$Ô/àð 	7˜vœ{¨gÐ5Ð5Ý×Òðsñô ð ð 37ˆDÔ$Ô/à&*×&EÒ&EØ�4Ô+ÔBÀEÔD_ñ'
ô '
ˆÔ#ð *Ð)Ø¨$Ô*EÐ[_Ô[sð
ñ 
ô 
ˆˆˆr   c                 ó‚   — d|j         j        v r0t          |dd ¦  «        �|j                             dddddœ¦  «         |S )NÚGptOssConfigÚbase_model_tp_planÚgrouped_gemm©z(layers.*.mlp.experts.gate_up_proj_blocksz(layers.*.mlp.experts.gate_up_proj_scalesz%layers.*.mlp.experts.down_proj_blocksz%layers.*.mlp.experts.down_proj_scales)r   Ú__name__ÚgetattrrZ   Úupdate©r   Úconfigs     r   Úupdate_tp_planzMxfp4HfQuantizer.update_tp_planÓ   ó^   € Ø˜VÔ-Ô6Ð6Ð6Ý�vÐ3°TÑ:Ô:ÐFØÔ)×0Ò0àDRØDRØAOØAOð	ð ñô ð ð ˆr   c                 ó‚   — d|j         j        v r0t          |dd ¦  «        �|j                             dddddœ¦  «         |S )NrY   Úbase_model_ep_planr[   r\   )r   r]   r^   re   r_   r`   s     r   Úupdate_ep_planzMxfp4HfQuantizer.update_ep_planà   rc   r   c                 ó&  — ddl m} |                     ¦   «         }t          |j        dd¦  «        }t          |j        dd¦  «        }|                     ¦   «         D �]0\  }}t          ||¦  «        r t          |d¦  «        rt          |d¦  «        sŒ7d	D ]ö}t          ||¦  «        }	t          ||› d
�¦  «        }
|	j        j	         
                    |	j        j        ¦  «                             dd¦  «        }|dk    r|                     |ddd¦  «        }n|                     ||dd¦  «        }|
j        j        j	         
                    |
j        j        j        ¦  «                             dd¦  «        }|||› d|› d�<   |||› d|› d�<   Œ÷�Œ2i }||fS )Nr   rF   Únum_local_expertsé    Úhidden_sizei@  Úgate_up_projÚ	down_proj)rk   rl   Ú_precision_configéÿÿÿÿéþÿÿÿéZ   é   ú.Ú_blocksÚ_scales)rJ   rG   Ú
state_dictr^   ra   Únamed_modulesr9   ÚhasattrÚstorageÚlayoutÚunswizzle_dataÚdataÚ	transposeÚreshapeÚweight_scale)r   rB   rG   ru   rh   rj   ÚnamerK   ÚprojÚtriton_tensorÚprecision_configÚblocksÚscalesÚmetadatas                 r   Úget_state_dict_and_metadataz,Mxfp4HfQuantizer.get_state_dict_and_metadataí   sÞ  € Ø5Ð5Ð5Ð5Ð5Ð5à×%Ò%Ñ'Ô'ˆ
Ý# E¤LÐ2EÀrÑJÔJÐÝ˜eœl¨M¸4Ñ@Ô@ˆà!×/Ò/Ñ1Ô1ð 	=ñ 	=‰LˆD�&å˜6Ð#5Ñ6Ô6ðå˜F NÑ3Ô3ðõ ˜F KÑ0Ô0ðð
 à5ð =ð =�Ý '¨°Ñ 5Ô 5�Ý#*¨6°dÐ3MÐ3MÐ3MÑ#NÔ#NÐ à&Ô.Ô5×DÒDÀ]ÔEZÔE_Ñ`Ô`×jÒjÐkmÐoqÑrÔr�Ø˜>Ò)Ð)Ø#Ÿ^š^Ð,=¸rÀ2ÀrÑJÔJ�F�Fà#Ÿ^š^Ð,=¸{ÈBÐPRÑSÔS�Fà)Ô6Ô>ÔE×TÒTØ$Ô1Ô9Ô>ñô ç’)˜B Ñ#Ô#ð ð 7=�
˜dÐ2Ð2 TÐ2Ð2Ð2Ñ3Ø6<�
˜dÐ2Ð2 TÐ2Ð2Ð2Ñ3Ð3ñ=ð" ˆØ˜8Ð#Ð#r   c                 ó   — dS )NT© ©r   s    r   Úis_serializablez Mxfp4HfQuantizer.is_serializable  s   € Øˆtr   c                 ó:   — t                                d¦  «         dS )Nz©MXFP4 quantization don't support training, please consider dequantizing the model first by passing quantization_config=Mxfp4Config(dequantize=True) to .from_pretrained()F)r2   r3   r‰   s    r   Úis_trainablezMxfp4HfQuantizer.is_trainable  s'   € å×Òð xñ	
ô 	
ð 	
ð ˆur   c                 ó$   — ddl m}  || ¦  «        S )Nr   )ÚMxfp4Quantize)Úintegrations.mxfp4rŽ   )r   rŽ   s     r   Úget_quantize_opsz!Mxfp4HfQuantizer.get_quantize_ops  s$   € Ø6Ð6Ð6Ð6Ð6Ð6àˆ}˜TÑ"Ô"Ð"r   c                 ó*  — ddl m}m} | j        rI| j        j        r=t          ddgd || ¦  «        g¬¦  «        t          ddgd	g || ¦  «        g¬¦  «        gS t          ddgd	 || ¦  «        g¬¦  «        t          ddgd || ¦  «        g¬¦  «        gS )
Nr   )ÚMxfp4DequantizeÚMxfp4DeserializeÚdown_proj_blocksÚdown_proj_scalesz
down_proj$)Úsource_patternsÚtarget_patternsÚ
operationsÚgate_up_proj_blocksÚgate_up_proj_scaleszgate_up_proj$)r�   r’   r“   r1   r   r+   r   )r   r’   r“   s      r   Úget_weight_conversionsz'Mxfp4HfQuantizer.get_weight_conversions  s	  € ØJÐJÐJÐJÐJÐJÐJÐJàÔð 	 $Ô":Ô"Eð 	åØ%7Ð9KÐ$LØ$1Ø / °Ñ 5Ô 5Ð6ðñ ô õ
  Ø%:Ð<QÐ$RØ%4Ð$5Ø / °Ñ 5Ô 5Ð6ðñ ô ðð õ Ø!6Ð8MÐ NØ 0Ø,Ð,¨TÑ2Ô2Ð3ðñ ô õ
 Ø!3Ð5GÐ HØ -Ø,Ð,¨TÑ2Ô2Ð3ðñ ô ð
ð 	
r   )rB   r   )F)r]   Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r"   rA   ÚstrÚboolrM   rP   rW   rb   rf   r†   rŠ   ÚpropertyrŒ   r�   r›   Ú__classcell__)r   s   @r   r   r   *   sl  ø€ € € € € € ðð ð !ÐØ&Ð&Ð&Ñ&ð'ð 'ð 'ð 'ð 'ð	'ð 	'ð 	'ð^ð ^ð ^ð@Ð.?ð ÈSð Ð_cð ð ð ð ð$ð $ð $ð $ð "ð
ð 
à ð
ð ð
ð 
ð 
ð 
ðBð ð ðð ð ð!$ð !$ð !$ðFð ð ð ð˜dð ð ð ñ „Xðð#ð #ð #ð

ð 
ð 
ð 
ð 
ð 
ð 
r   r   )Útypingr   Úbaser   Úmodeling_utilsr   Úutils.quantization_configr   Úutilsr	   r
   r   r   r   Úquantizers_utilsr   r,   Úcore_model_loadingr   Ú
get_loggerr]   r2   r   r   rˆ   r   r   ú<module>r­      s7  ðð !Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð ð ð 8Ø0Ð0Ð0Ð0Ð0Ð0Ø7Ð7Ð7Ð7Ð7Ð7ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð 2Ð 2Ð 2Ð 2Ð 2ð ÐÑÔð 5Ø€L€L€Là4Ð4Ð4Ð4Ð4Ð4à	ˆÔ	˜HÑ	%Ô	%€ØÐ ðQ
ð Q
ð Q
ð Q
ð Q
�{ñ Q
ô Q
ð Q
ð Q
ð Q
r   