§
    Þ˜ºhÑ  ã                   óÆ   — d dl Z d dlmZ d dlmZ ddlmZ erddlmZ ddl	m
Z
mZmZmZmZ dd	lmZmZ  e¦   «         rd dlZ ej        e¦  «        Z G d
„ de¦  «        ZdS )é    N)ÚTYPE_CHECKING)Úversioné   )ÚHfQuantizeré   )ÚPreTrainedModel)Úis_auto_gptq_availableÚis_gptqmodel_availableÚis_optimum_availableÚis_torch_availableÚlogging)Ú
GPTQConfigÚQuantizationConfigMixinc                   ó€   ‡ — e Zd ZdZdZg d¢ZdZdefˆ fd„Zd„ Z	dd„Z
d„ Zdd„Zdd„Zed
efd„¦   «         Zdd„Zˆ xZS )ÚGptqHfQuantizerzå
    Quantizer of the GPTQ method - for GPTQ the quantizer support calibration of the model through
    `auto_gptq` or `gptqmodel` package. Quantization is done under the hood for users if they load a non-prequantized model.
    F)ÚoptimumÚ	auto_gptqÚ	gptqmodelNÚquantization_configc                 óä   •—  t          ¦   «         j        |fi |¤Ž t          ¦   «         st          d¦  «        ‚ddlm} |                     | j                             ¦   «         ¦  «        | _	        d S )NúGLoading a GPTQ quantized model requires optimum (`pip install optimum`)r   )ÚGPTQQuantizer)
ÚsuperÚ__init__r   ÚImportErrorÚoptimum.gptqr   Ú	from_dictr   Úto_dict_optimumÚoptimum_quantizer)Úselfr   Úkwargsr   Ú	__class__s       €ún/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_gptq.pyr   zGptqHfQuantizer.__init__-   s~   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7å#Ñ%Ô%ð 	iÝÐgÑhÔhÐhØ.Ð.Ð.Ð.Ð.Ð.à!.×!8Ò!8¸Ô9Q×9aÒ9aÑ9cÔ9cÑ!dÔ!dˆÔÐÐó    c                 óH  — t          ¦   «         st          d¦  «        ‚t          ¦   «         r(t          ¦   «         rt                               d¦  «         t          ¦   «         oFt          j        t          j	                             d¦  «        ¦  «        t          j        d¦  «        k    pt          ¦   «         }|s-t          j                             ¦   «         st          d¦  «        ‚t          ¦   «         st          ¦   «         st          d¦  «        ‚t          ¦   «         rVt          j        t          j	                             d¦  «        ¦  «        t          j        d¦  «        k     rt          d¦  «        ‚t          ¦   «         r�t          j        t          j	                             d	¦  «        ¦  «        t          j        d
¦  «        k     sGt          j        t          j	                             d¦  «        ¦  «        t          j        d¦  «        k     rt          d¦  «        ‚d S d S )Nr   z4Detected gptqmodel and auto-gptq, will use gptqmodelz	auto-gptqz0.4.2z2GPU is required to quantize or run quantize model.z|Loading a GPTQ quantized model requires gptqmodel (`pip install gptqmodel`) or auto-gptq (`pip install auto-gptq`) library. r   z‹You need a version of auto_gptq >= 0.4.2 to use GPTQ: `pip install --upgrade auto-gptq` or use gptqmodel by `pip install gptqmodel>=1.4.3`.r   z1.4.3r   ú1.23.99zJThe gptqmodel version should be >= 1.4.3, optimum version should >= 1.24.0)r   r   r	   r
   ÚloggerÚwarningr   ÚparseÚ	importlibÚmetadataÚtorchÚcudaÚis_availableÚRuntimeError)r    Úargsr!   Úgptq_supports_cpus       r#   Úvalidate_environmentz$GptqHfQuantizer.validate_environment6   s  € Ý#Ñ%Ô%ð 	iÝÐgÑhÔhÐhÝ!Ñ#Ô#ð 	SÕ(>Ñ(@Ô(@ð 	SÝ�NŠNÐQÑRÔRÐRõ #Ñ$Ô$ð `Ý”�iÔ0×8Ò8¸ÑEÔEÑFÔFÍÌÐW^ÑI_ÔI_Ò_ð&õ $Ñ%Ô%ð 	ð !ð 	l­¬×)@Ò)@Ñ)BÔ)Bð 	lÝÐSÑTÔTÐTÝ(Ñ*Ô*ð 	lÕ.DÑ.FÔ.Fð 	lÝð Oñô ð õ $Ñ%Ô%ð 
	l­'¬-½	Ô8J×8RÒ8RÐS^Ñ8_Ô8_Ñ*`Ô*`ÕcjÔcpØñd
ô d
ò +
ð +
õ ð ^ñô ð õ $Ñ%Ô%ð 	lÝŒM�)Ô,×4Ò4°[ÑAÔAÑBÔBÅWÄ]ÐSZÑE[ÔE[Ò[Ð[ÝŒ}�YÔ/×7Ò7¸	ÑBÔBÑCÔCÅgÄmÐT]ÑF^ÔF^Ò^Ð^åÐjÑkÔkÐkð		lð 	là^Ð^r$   Údtypeútorch.dtypeÚreturnc                 ó¬   — |€'t           j        }t                               d¦  «         n*|t           j        k    rt                               d¦  «         |S )NzLLoading the model in `torch.float16`. To overwrite it, set `dtype` manually.zLWe suggest you to set `dtype=torch.float16` for better efficiency with GPTQ.)r,   Úfloat16r'   Úinfo)r    r3   s     r#   Úupdate_dtypezGptqHfQuantizer.update_dtypeR   sI   € Øˆ=Ý”MˆEÝ�KŠKÐfÑgÔgÐgÐgØ•e”mÒ#Ð#Ý�KŠKÐfÑgÔgÐgØˆr$   c                 ó–   — |€dt          j        d¦  «        i}t          ¦   «         s"|ddt          j        d¦  «        ifv r|ddik     |S )NÚ Úcpur   )r,   Údevicer
   )r    Ú
device_maps     r#   Úupdate_device_mapz!GptqHfQuantizer.update_device_mapZ   s^   € ØÐØ�eœl¨5Ñ1Ô1Ð2ˆJå%Ñ'Ô'ð 	"¨J¸5À2ÅuÄ|ÐTYÑGZÔGZÐB[Ð:\Ð,\Ð,\Ø˜2˜q˜'Ò!Ð!ØÐr$   Úmodelr   c                 óB  — |j         j        dk    rt          d¦  «        ‚| j        rxt	          j        t          j                             d¦  «        ¦  «        t	          j        d¦  «        k    r| j         	                    |¦  «        }d S  | j        j	        |fi |¤Ž}d S d S )NÚ	input_idsz%We can only quantize pure text model.r   r&   )
r"   Úmain_input_namer/   Úpre_quantizedr   r)   r*   r+   r   Úconvert_model©r    r@   r!   s      r#   Ú$_process_model_before_weight_loadingz4GptqHfQuantizer._process_model_before_weight_loadingb   s¥   € ØŒ?Ô*¨kÒ9Ð9ÝÐFÑGÔGÐGàÔð 	NåŒ}�YÔ/×7Ò7¸	ÑBÔBÑCÔCÅwÄ}ÐU^ÑG_ÔG_Ò_Ð_ØÔ.×<Ò<¸UÑCÔC���à<˜Ô.Ô<¸UÐMÐMÀfÐMÐM���ð	Nð 	Nr$   c                 ó:  — | j         r| j                             |¦  «        }d S | j        j        €|j        | j        _        | j                             || j        j        ¦  «         t          j        | j         	                    ¦   «         ¦  «        |j
        _        d S ©N)rD   r   Úpost_init_modelr   Ú	tokenizerÚname_or_pathÚquantize_modelr   r   Úto_dictÚconfigrF   s      r#   Ú#_process_model_after_weight_loadingz3GptqHfQuantizer._process_model_after_weight_loadingm   s‹   € ØÔð 	fØÔ*×:Ò:¸5ÑAÔAˆEˆEˆEàÔ'Ô1Ð9Ø5:Ô5G�Ô(Ô2àÔ"×1Ò1°%¸Ô9QÔ9[Ñ\Ô\Ð\Ý/9Ô/CÀDÔDZ×DbÒDbÑDdÔDdÑ/eÔ/eˆEŒLÔ,Ð,Ð,r$   c                 ó   — dS ©NT© )r    s    r#   Úis_trainablezGptqHfQuantizer.is_trainablew   s   € àˆtr$   c                 ó   — dS rR   rS   )r    Úsafe_serializations     r#   Úis_serializablezGptqHfQuantizer.is_serializable{   s   € Øˆtr$   )r3   r4   r5   r4   )r@   r   rI   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚrequired_packagesr   r   r   r2   r9   r?   rG   rP   ÚpropertyÚboolrT   rW   Ú__classcell__)r"   s   @r#   r   r   #   s  ø€ € € € € ðð ð
 !ÐØ=Ð=Ð=ÐØÐðeÐ,Cð eð eð eð eð eð eðlð lð lð8ð ð ð ðð ð ð	Nð 	Nð 	Nð 	Nðfð fð fð fð ð˜dð ð ð ñ „Xððð ð ð ð ð ð ð r$   r   )r*   Útypingr   Ú	packagingr   Úbaser   Úmodeling_utilsr   Úutilsr	   r
   r   r   r   Úutils.quantization_configr   r   r,   Ú
get_loggerrX   r'   r   rS   r$   r#   ú<module>rh      s  ðð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0à uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uÐ uØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kð ÐÑÔð Ø€L€L€Là	ˆÔ	˜HÑ	%Ô	%€ðYð Yð Yð Yð Y�kñ Yô Yð Yð Yð Yr$   