§
    ‚Štj^  ã                   ó¶   — 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 ddlmZ  e¦   «         rd d	lZ ej        e¦  «        Z G d
„ de¦  «        Zd	S )é    )ÚTYPE_CHECKINGé   )ÚHfQuantizeré   )ÚPreTrainedModel)Ú
EetqConfig)Úis_accelerate_availableÚis_kernels_availableÚis_torch_availableÚlogging)Úget_module_from_nameNc                   óˆ   ‡ — e Zd ZU dZdZded<   ˆ fd„Zd„ Zdd
„Zddde	d	e
fd„Z	 	 dd„Zd„ Zed	e
fd„¦   «         Zd„ Zˆ xZS )ÚEetqHfQuantizerz:
    8-bit quantization from EETQ quantization method
    Fr   Úquantization_configc                 ó<   •—  t          ¦   «         j        |fi |¤Ž d S )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_eetq.pyr   zEetqHfQuantizer.__init__*   s)   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ð7Ð7ó    c                 ó  — t          ¦   «         st          d¦  «        ‚t          ¦   «         st          d¦  «        ‚t          j                             ¦   «         st          d¦  «        ‚|                     d¦  «        }|€t           	                    d¦  «         d S t          |t          ¦  «        rNt          |¦  «        dk    rd|                     ¦   «         v sd|                     ¦   «         v rt          d	¦  «        ‚d S d S )
NzHLoading an EETQ quantized model requires kernels (`pip install kernels`)zNLoading an EETQ quantized model requires accelerate (`pip install accelerate`)z/No GPU found. A GPU is needed for quantization.Ú
device_mapzŽYou have loaded an EETQ model on CPU and have a CUDA device available, make sure to set your model on a GPU device in order to run your model.r   ÚcpuÚdiskz¯You are attempting to load an EETQ model with a device_map that contains a CPU or disk device. This is not supported. Please remove the CPU or disk device from the device_map.)r
   ÚImportErrorr	   ÚtorchÚcudaÚis_availableÚRuntimeErrorÚgetÚloggerÚwarning_onceÚ
isinstanceÚdictÚlenÚvaluesÚ
ValueError)r   Úargsr   r   s       r   Úvalidate_environmentz$EetqHfQuantizer.validate_environment-   s  € Ý#Ñ%Ô%ð 	jÝÐhÑiÔiÐiå&Ñ(Ô(ð 	pÝÐnÑoÔoÐoåŒz×&Ò&Ñ(Ô(ð 	RÝÐPÑQÔQÐQà—Z’Z Ñ-Ô-ˆ
ØÐÝ×ÒðIñô ð ð ð õ ˜
¥DÑ)Ô)ð 	Ý�:‰Œ Ò"Ð" u°
×0AÒ0AÑ0CÔ0CÐ'CÐ'CÀvÐQ[×QbÒQbÑQdÔQdÐGdÐGdÝ ðhñô ð ð	ð 	ØGdÐGdr   Údtypeútorch.dtypeÚreturnc                 óZ   — |t           j        k    rt                               d¦  «         |S )NzLWe suggest you to set `dtype=torch.float16` for better efficiency with EETQ.)r   Úfloat16r#   Úinfo)r   r,   s     r   Úupdate_dtypezEetqHfQuantizer.update_dtypeD   s'   € Ø•E”MÒ!Ð!Ý�KŠKÐfÑgÔgÐgØˆr   Úmodelr   Ú
param_namec                 óz   — ddl m} t          ||¦  «        \  }}t          ||¦  «        r| j        s|dk    rdS dS dS )Nr   )Ú
EetqLinearÚbiasFT)Úintegrations.eetqr6   r   r%   Úpre_quantized)r   r3   r4   r   r6   ÚmoduleÚtensor_names          r   Úparam_needs_quantizationz(EetqHfQuantizer.param_needs_quantizationI   s^   € Ø2Ð2Ð2Ð2Ð2Ð2å2°5¸*ÑEÔEÑˆ�å�f˜jÑ)Ô)ð 	ØÔ!ð  [°FÒ%:Ð%:Ø�uà�tØˆur   c                 ó˜   — ddl m} |                      || j        j        |j        ¦  «        | _         ||| j        | j        ¬¦  «        }d S )Nr   )Úreplace_with_eetq_linear)Úmodules_to_not_convertr9   )Úintegrationsr>   Úget_modules_to_not_convertr   r?   Ú_keep_in_fp32_modulesr9   )r   r3   r   r>   s       r   Ú$_process_model_before_weight_loadingz4EetqHfQuantizer._process_model_before_weight_loadingU   si   € ð
 	<Ð;Ð;Ð;Ð;Ð;à&*×&EÒ&EØ�4Ô+ÔBÀEÔD_ñ'
ô '
ˆÔ#ð )Ð(Ø¨$Ô*EÐUYÔUgð
ñ 
ô 
ˆˆˆr   c                 ó   — dS ©NT© ©r   s    r   Úis_serializablezEetqHfQuantizer.is_serializabled   s   € Øˆtr   c                 ó   — dS rE   rF   rG   s    r   Úis_trainablezEetqHfQuantizer.is_trainableg   s   € àˆtr   c                 ó$   — ddl m}  || ¦  «        S )Nr   )ÚEetqQuantize)r8   rL   )r   rL   s     r   Úget_quantize_opsz EetqHfQuantizer.get_quantize_opsk   s$   € Ø4Ð4Ð4Ð4Ð4Ð4àˆ|˜DÑ!Ô!Ð!r   )r,   r-   r.   r-   )r3   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r+   r2   ÚstrÚboolr<   rC   rH   ÚpropertyrJ   rM   Ú__classcell__)r   s   @r   r   r   "   s  ø€ € € € € € ðð ð !ÐØ%Ð%Ð%Ñ%ð8ð 8ð 8ð 8ð 8ðð ð ð.ð ð ð ð

Ð.?ð 
ÈSð 
Ð_cð 
ð 
ð 
ð 
ð
à ð
ð 
ð 
ð 
ðð ð ð ð˜dð ð ð ñ „Xðð"ð "ð "ð "ð "ð "ð "r   r   )Útypingr   Úbaser   Úmodeling_utilsr   Úutils.quantization_configr   Úutilsr	   r
   r   r   Úquantizers_utilsr   r   Ú
get_loggerrN   r#   r   rF   r   r   ú<module>r_      sý   ðð !Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð ð ð 7Ø0Ð0Ð0Ð0Ð0Ð0Ø6Ð6Ð6Ð6Ð6Ð6à ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð ÐÑÔð Ø€L€L€Lð 
ˆÔ	˜HÑ	%Ô	%€ðL"ð L"ð L"ð L"ð L"�kñ L"ô L"ð L"ð L"ð L"r   