Ë
    Hêñi^  ã                   ó¬   — 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y	)é    )Ú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        ‰| �  |fi |¤Ž y )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úh/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_eetq.pyr   zEetqHfQuantizer.__init__*   s   ø€ Ü‰ÑÐ,Ñ7°Ó7ó    c                 ó˜  — t        «       st        d«      ‚t        «       st        d«      ‚t        j                  j                  «       st        d«      ‚|j                  d«      }|€t        j                  d«       y t        |t        «      r>t        |«      dkD  rd|j                  «       v sd|j                  «       v rt        d	«      ‚y y )
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Â   € Ü#Ô%ÜÐhÓiÐiä&Ô(ÜÐnÓoÐoä�z‰z×&Ñ&Ô(ÜÐPÓQÐQà—Z‘Z Ó-ˆ
ØÐÜ×ÑðIõô ˜
¤DÔ)Ü�:‹ Ò" u°
×0AÑ0AÓ0CÑ'CÀvÐQ[×QbÑQbÓQdÑGdÜ ðhóð ð Heð *r   Úreturnc                 óV   — |t         j                  k7  rt        j                  d«       |S )NzLWe suggest you to set `dtype=torch.float16` for better efficiency with EETQ.)r   Úfloat16r#   Úinfo)r   Údtypes     r   Úupdate_dtypezEetqHfQuantizer.update_dtypeD   s    € Ø”E—M‘MÒ!Ü�K‰KÐfÔgØˆr   Úmodelr   Ú
param_namec                 ól   — ddl m} t        ||«      \  }}t        ||«      r| j                  s|dk(  ryyy)Nr   )Ú
EetqLinearÚbiasFT)Úintegrations.eetqr5   r   r%   Úpre_quantized)r   r2   r3   r   r5   ÚmoduleÚtensor_names          r   Úparam_needs_quantizationz(EetqHfQuantizer.param_needs_quantizationI   s9   € Ý2ä2°5¸*ÓEÑˆ�ä�f˜jÔ)Ø×!Ò! [°FÒ%:ØàØr   c                 óº   — ddl m} | j                  || j                  j                  |j
                  «      | _         ||| j                  | j                  ¬«      }y )Nr   )Úreplace_with_eetq_linear)Úmodules_to_not_convertr8   )Úintegrationsr=   Úget_modules_to_not_convertr   r>   Ú_keep_in_fp32_modulesr8   )r   r2   r   r=   s       r   Ú$_process_model_before_weight_loadingz4EetqHfQuantizer._process_model_before_weight_loadingU   sS   € õ
 	<à&*×&EÑ&EØ�4×+Ñ+×BÑBÀE×D_ÑD_ó'
ˆÔ#ñ )Ø¨$×*EÑ*EÐUY×UgÑUgô
‰r   c                  ó   — y©NT© ©r   s    r   Úis_serializablezEetqHfQuantizer.is_serializabled   s   € Ør   c                  ó   — yrD   rE   rF   s    r   Úis_trainablezEetqHfQuantizer.is_trainableg   s   € àr   c                 ó   — ddl m}  || «      S )Nr   )ÚEetqQuantize)r7   rK   )r   rK   s     r   Úget_quantize_opsz EetqHfQuantizer.get_quantize_opsk   s   € Ý4á˜DÓ!Ð!r   )r0   útorch.dtyper,   rM   )r2   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r+   r1   ÚstrÚboolr;   rB   rG   ÚpropertyrI   rL   Ú__classcell__)r   s   @r   r   r   "   ss   ø… ñð !ÐØ%Ó%ô8òó.ð

Ð.?ð 
ÈSð 
Ð_có 
ð
à ó
òð ð˜dò ó ðö"r   r   )Útypingr   Úbaser   Úmodeling_utilsr   Úutils.quantization_configr   Úutilsr	   r
   r   r   Úquantizers_utilsr   r   Ú
get_loggerrN   r#   r   rE   r   r   ú<module>r_      sN   ðõ !å ñ Ý0Ý6ç ^Ó ^Ý 2ñ ÔÛð 
ˆ×	Ñ	˜HÓ	%€ôL"�kõ L"r   