§
    ‚Štj—  ã                   óÎ   — d dl m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 dd	lmZmZ  e¦   «         rd d
lZ ej        e¦  «        ZdZdZ G d„ de¦  «        Zd
S )é    )Úmetadata)ÚTYPE_CHECKING)Úversioné   )ÚHfQuantizeré   )ÚPreTrainedModel)Úis_gptqmodel_availableÚis_optimum_availableÚis_torch_availableÚlogging)Ú
GPTQConfigÚQuantizationConfigMixinNz1.4.3z1.24.0c                   ó~   ‡ — e Zd ZU dZdZded<   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„ Zˆ xZS )ÚGptqHfQuantizerzþ
    Quantizer of the GPTQ method - for GPTQ the quantizer support calibration of the model through
    the GPT-QModel package (Python import name `gptqmodel`). Quantization is done under the hood for users if they
    load a non-prequantized model.
    Fr   Ú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       €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_gptq.pyr   zGptqHfQuantizer.__init__1   s~   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7å#Ñ%Ô%ð 	iÝÐgÑhÔhÐhØ.Ð.Ð.Ð.Ð.Ð.à!.×!8Ò!8¸Ô9Q×9aÒ9aÑ9cÔ9cÑ!dÔ!dˆÔÐÐó    c                 óV  — t          ¦   «         st          d¦  «        ‚t          ¦   «         }|s-t          j                             ¦   «         st          d¦  «        ‚t          ¦   «         st          d¦  «        ‚t          ¦   «         r¡t          j        t          j        d¦  «        ¦  «        t          j        t          ¦  «        k     sAt          j        t          j        d¦  «        ¦  «        t          j        t          ¦  «        k     r!t          dt          › dt          › �¦  «        ‚d S d S )Nr   z2GPU is required to quantize or run quantize model.zTLoading a GPTQ quantized model requires gptqmodel (`pip install gptqmodel`) library.Ú	gptqmodelÚoptimumz#The gptqmodel version should be >= z, optimum version should >= )r   r   r
   ÚtorchÚcudaÚis_availableÚRuntimeErrorr   Úparser   ÚMIN_GPTQ_VERSIONÚMIN_OPTIMUM_VERSION)r   Úargsr   Úgptq_supports_cpus       r    Úvalidate_environmentz$GptqHfQuantizer.validate_environment:   s  € Ý#Ñ%Ô%ð 	iÝÐgÑhÔhÐhå2Ñ4Ô4ÐØ ð 
	­¬×)@Ò)@Ñ)BÔ)Bð 
	ÝÐSÑTÔTÐTÝ'Ñ)Ô)ð 	ÝÐtÑuÔuÐuÝ#Ñ%Ô%ð 	ÝŒM�(Ô*¨;Ñ7Ô7Ñ8Ô8½7¼=ÕIYÑ;ZÔ;ZÒZÐZÝŒ}�XÔ-¨iÑ8Ô8Ñ9Ô9½G¼MÕJ]Ñ<^Ô<^Ò^Ð^åØyÕ6FÐyÐyÕdwÐyÐyñô ð ð		ð 	à^Ð^r!   Údtypeútorch.dtypeÚreturnc                 óZ   — |t           j        k    rt                               d¦  «         |S )NzLWe suggest you to set `dtype=torch.float16` for better efficiency with GPTQ.)r%   Úfloat16ÚloggerÚinfo)r   r/   s     r    Úupdate_dtypezGptqHfQuantizer.update_dtypeK   s'   € Ø•E”MÒ!Ð!Ý�KŠKÐfÑgÔgÐgØˆr!   c                 ó6   — |€dt          j        d¦  «        i}|S )NÚ Úcpu)r%   Údevice)r   Ú
device_maps     r    Úupdate_device_mapz!GptqHfQuantizer.update_device_mapP   s"   € ØÐØ�eœl¨5Ñ1Ô1Ð2ˆJØÐr!   Úmodelr	   c                 ó6  — |j         j        dk    rt          d¦  «        ‚| j        rrt	          j        t          j        d¦  «        ¦  «        t	          j        t          ¦  «        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   Ú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_loadingU   sŸ   € ØŒ?Ô*¨kÒ9Ð9ÝÐFÑGÔGÐGàÔð 	NåŒ}�XÔ-¨iÑ8Ô8Ñ9Ô9½G¼MÕJ]Ñ<^Ô<^Ò^Ð^ØÔ.×<Ò<¸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)rA   r   Úpost_init_modelr   Ú	tokenizerÚname_or_pathÚquantize_modelr   r   Úto_dictÚconfigrC   s      r    Ú#_process_model_after_weight_loadingz3GptqHfQuantizer._process_model_after_weight_loading`   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_trainablej   s   € àˆtr!   c                 ó   — dS rN   rO   rP   s    r    Úis_serializablezGptqHfQuantizer.is_serializablen   s   € Øˆtr!   )r/   r0   r1   r0   )r=   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   r.   r6   r<   rD   rL   ÚpropertyÚboolrQ   rS   Ú__classcell__)r   s   @r    r   r   '   s  ø€ € € € € € ðð ð !ÐØ%Ð%Ð%Ñ%ðeÐ,Cð eð eð eð eð eð eðð ð ð"ð ð ð ð
ð ð ð
	Nð 	Nð 	Nð 	Nðfð fð fð fð ð˜dð ð ð ñ „Xððð ð ð ð ð ð r!   r   )Ú	importlibr   Útypingr   Ú	packagingr   Úbaser   Úmodeling_utilsr	   Úutilsr
   r   r   r   Úutils.quantization_configr   r   r%   Ú
get_loggerrT   r4   r*   r+   r   rO   r!   r    ú<module>re      s!  ðð Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0à ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kð ÐÑÔð Ø€L€L€Là	ˆÔ	˜HÑ	%Ô	%€ð Ð ØÐ ðHð Hð Hð Hð H�kñ Hô Hð Hð Hð Hr!   