§
    ‚ŠtjÁ  ã                   ó¶   — 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  e¦   «         rd d	lZ ej        e¦  «        Z G d
„ de¦  «        Zd	S )é    )ÚTYPE_CHECKINGé   )ÚHfQuantizer)Úget_module_from_nameé   )ÚPreTrainedModel)Úis_accelerate_availableÚis_optimum_quanto_availableÚis_torch_availableÚlogging)ÚQuantoConfigNc                   óÚ   ‡ — e Zd ZU dZdZded<   defˆ fd„Zd„ Zddd	e	d
e
fd„Zdee	ee	z  f         d
ee	ee	z  f         fd„Zddd	e	ddd
efˆ fd„Zdd„Zed
e
fd„¦   «         Zd„ Zd„ Zˆ xZS )ÚQuantoHfQuantizerz*
    Quantizer for the quanto library
    Fr   Úquantization_configc                 ó”   •—  t          ¦   «         j        |fi |¤Ž dddddœ}|                     | j        j        d ¦  «        | _        d S )Nr   g      à?g      Ð?)Úint8Úfloat8Úint4Úint2)ÚsuperÚ__init__Úgetr   ÚweightsÚquantized_param_size)Úselfr   ÚkwargsÚmap_to_param_sizeÚ	__class__s       €úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_quanto.pyr   zQuantoHfQuantizer.__init__.   sc   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7àØØØð	
ð 
Ðð %6×$9Ò$9¸$Ô:RÔ:ZÐ\`Ñ$aÔ$aˆÔ!Ð!Ð!ó    c                 ó   — t          ¦   «         st          d¦  «        ‚t          ¦   «         st          d¦  «        ‚|                     d¦  «        }t	          |t
          ¦  «        rNt          |¦  «        dk    rd|                     ¦   «         v sd|                     ¦   «         v rt          d¦  «        ‚| j	        j
        �t          d¦  «        ‚d S )	NzhLoading an optimum-quanto quantized model requires optimum-quanto library (`pip install optimum-quanto`)z`Loading an optimum-quanto quantized model requires accelerate library (`pip install accelerate`)Ú
device_mapr   ÚcpuÚdiskzÜYou are attempting to load an model with a device_map that contains a CPU or disk device.This is not supported with quanto when the model is quantized on the fly. Please remove the CPU or disk device from the device_map.zÂWe don't support quantizing the activations with transformers library.Use quanto library for more complex use cases such as activations quantization, calibration and quantization aware training.)r
   ÚImportErrorr	   r   Ú
isinstanceÚdictÚlenÚvaluesÚ
ValueErrorr   Úactivations)r   Úargsr   r"   s       r   Úvalidate_environmentz&QuantoHfQuantizer.validate_environment8   só   € Ý*Ñ,Ô,ð 	ÝØzñô ð õ 'Ñ(Ô(ð 	ÝØrñô ð ð —Z’Z Ñ-Ô-ˆ
Ý�j¥$Ñ'Ô'ð 	Ý�:‰Œ Ò"Ð" u°
×0AÒ0AÑ0CÔ0CÐ'CÐ'CÀvÐQ[×QbÒQbÑQdÔQdÐGdÐGdÝ ðPñô ð ð
 Ô#Ô/Ð;ÝðOñô ð ð <Ð;r    Úmodelr   Ú
param_nameÚreturnc                 óp   — ddl m} t          ||¦  «        \  }}t          ||¦  «        rd|v r|j         S dS )Nr   )ÚQModuleMixinÚweightF)Úoptimum.quantor2   r   r&   Úfrozen)r   r.   r/   r   r2   ÚmoduleÚtensor_names          r   Úparam_needs_quantizationz*QuantoHfQuantizer.param_needs_quantizationO   sT   € Ø/Ð/Ð/Ð/Ð/Ð/å2°5¸*ÑEÔEÑˆ�å�f˜lÑ+Ô+ð 	°¸KÐ0GÐ0Gà”}Ð$Ð$à�5r    Ú
max_memoryc                 óB   — d„ |                      ¦   «         D ¦   «         }|S )Nc                 ó    — i | ]\  }}||d z  “ŒS )gÍÌÌÌÌÌì?© )Ú.0ÚkeyÚvals      r   ú
<dictcomp>z7QuantoHfQuantizer.adjust_max_memory.<locals>.<dictcomp>[   s"   € ÐIÐIÐI©(¨#¨s�c˜3 ™:ÐIÐIÐIr    )Úitems)r   r9   s     r   Úadjust_max_memoryz#QuantoHfQuantizer.adjust_max_memoryZ   s'   € ØIÐI°j×6FÒ6FÑ6HÔ6HÐIÑIÔIˆ
ØÐr    Úparamztorch.Tensorc                 ó’   •— |                       ||¦  «        r| j        �| j        S t          ¦   «                              |||¦  «        S )z4Return the element size (in bytes) for `param_name`.)r8   r   r   Úparam_element_size)r   r.   r/   rC   r   s       €r   rE   z$QuantoHfQuantizer.param_element_size^   sH   ø€ à×(Ò(¨°
Ñ;Ô;ð 	-ÀÔ@YÐ@eØÔ,Ð,å‰wŒw×)Ò)¨%°¸UÑCÔCÐCr    c                 ó˜   — ddl m} |                      || j        j        |j        ¦  «        | _         ||| j        | j        ¬¦  «        }d S )Nr   )Úreplace_with_quanto_layers)Úmodules_to_not_convertr   )ÚintegrationsrG   Úget_modules_to_not_convertr   rH   Ú_keep_in_fp32_modules)r   r.   r   rG   s       r   Ú$_process_model_before_weight_loadingz6QuantoHfQuantizer._process_model_before_weight_loadinge   sg   € Ø=Ð=Ð=Ð=Ð=Ð=à&*×&EÒ&EØ�4Ô+ÔBÀEÔD_ñ'
ô '
ˆÔ#ð +Ð*Ø¨$Ô*EÐ[_Ô[sð
ñ 
ô 
ˆˆˆr    c                 ó   — dS )NTr<   ©r   s    r   Úis_trainablezQuantoHfQuantizer.is_trainablep   s   € àˆtr    c                 ó   — dS )NFr<   rN   s    r   Úis_serializablez!QuantoHfQuantizer.is_serializablet   s   € Øˆur    c                 ó$   — ddl m}  || ¦  «        S )Nr   )ÚQuantoQuantize)Úintegrations.quantorS   )r   rS   s     r   Úget_quantize_opsz"QuantoHfQuantizer.get_quantize_opsw   s$   € Ø8Ð8Ð8Ð8Ð8Ð8àˆ~˜dÑ#Ô#Ð#r    )r.   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   r-   ÚstrÚboolr8   r'   ÚintrB   ÚfloatrE   rL   ÚpropertyrO   rQ   rU   Ú__classcell__)r   s   @r   r   r   &   s‚  ø€ € € € € € ðð ð !ÐØ'Ð'Ð'Ñ'ðb¨Lð bð bð bð bð bð bðð ð ð.	Ð.?ð 	ÈSð 	Ð_cð 	ð 	ð 	ð 	ð¨D°°c¸C±i°Ô,@ð ÀTÈ#ÈsÐUXÉyÈ.ÔEYð ð ð ð ðDÐ(9ð DÀsð DÐSað DÐfkð Dð Dð Dð Dð Dð Dð	
ð 	
ð 	
ð 	
ð ð˜dð ð ð ñ „Xððð ð ð$ð $ð $ð $ð $ð $ð $r    r   )Útypingr   Úbaser   Úquantizers_utilsr   Úmodeling_utilsr   Úutilsr	   r
   r   r   Úutils.quantization_configr   ÚtorchÚ
get_loggerrV   Úloggerr   r<   r    r   ú<module>rk      s  ðð !Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0ðð ð ð ð ð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4ð ÐÑÔð Ø€L€L€Là	ˆÔ	˜HÑ	%Ô	%€ðT$ð T$ð T$ð T$ð T$˜ñ T$ô T$ð T$ð T$ð T$r    