ó
    qyüi»  ã                   óÔ   • S SK rS SKJr  S SKJr  SSKJr  \(       a  SSKJ	r	  SSK
Jr  SS	KJrJrJrJr  SS
K
Jr  \" 5       (       a  S SKr\R&                  " \5      r " S S\5      rg)é    N)ÚTYPE_CHECKING)Úversioné   )ÚHfQuantizeré   )ÚPreTrainedModel)Ú	AwqConfig)Úis_accelerate_availableÚis_gptqmodel_availableÚis_torch_availableÚlogging)Ú
AwqBackendc                   ón   ^ • \ rS rSr% SrSrS\S'   U 4S jrS rS r	SS	 jr
S
 rS r\S 5       rSrU =r$ )ÚAwqQuantizeré$   zm
4-bit quantization for Activation-aware Weight Quantization(AWQ) (https://huggingface.co/papers/2306.00978)
Tr	   Úquantization_configc                 ó(   >• [         TU ]  " U40 UD6  g )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €Úb/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/quantizers/quantizer_awq.pyr   ÚAwqQuantizer.__init__-   s   ø€ Ü‰ÒÐ,Ñ7°Ó7ó    c                 ól   • [        5       (       d  [        S5      e[        5       (       d  [        S5      eg )NzaLoading an AWQ quantized model requires gptqmodel. Please install it with `pip install gptqmodel`zMLoading an AWQ quantized model requires accelerate (`pip install accelerate`))r   ÚImportErrorr
   )r   r   s     r   Úvalidate_environmentÚ!AwqQuantizer.validate_environment0   s7   € Ü%×'Ñ'ÜØsóð ô '×(Ñ(ÜÐmÓnÐnð )r   c                 óæ  • U[         R                  :X  am  [         R                  R                  5       (       d#  [         R                  R                  5       (       a'  [
        R                  S5        [         R                  nU$ U[         R                  :w  a[  [         R                  R                  5       (       d#  [         R                  R                  5       (       a  [
        R                  S5        U$ )Nz[`torch.bfloat16` is not supported for AWQ CUDA/XPU kernels yet. Casting to `torch.float16`.zWWe suggest you to set `dtype=torch.float16` for better efficiency on CUDA/XPU with AWQ.)ÚtorchÚbfloat16ÚcudaÚis_availableÚxpuÚloggerÚwarningÚfloat16)r   Údtypes     r   Úupdate_dtypeÚAwqQuantizer.update_dtype9   s—   € Ø”E—N‘NÓ"¬¯
©
×(?Ñ(?×(AÑ(AÄUÇYÁY×E[ÑE[×E]ÑE]Ü�N‰NØmôô —M‘MˆEð ˆð ”e—m‘mÓ#¬¯©×)@Ñ)@×)BÑ)BÄeÇiÁi×F\ÑF\×F^ÑF^Ü�N‰NÐtÔuØˆr   c                 ó  • SSK JnJn  U R                  XR                  R
                  UR                  SS9U l        U" UU R                  U R
                  UR                  S5      S9nU" XR                  R                  5      ng )Nr   )Úreplace_quantization_scalesÚreplace_with_awq_linearT)Úadd_default_skipsÚ
device_map)r   Úmodules_to_not_convertr0   )
Úintegrationsr-   r.   Úget_modules_to_not_convertr   r1   Ú_keep_in_fp32_modulesÚgetÚconfigÚ
model_type)r   Úmodelr   r-   r.   s        r   Ú$_process_model_before_weight_loadingÚ1AwqQuantizer._process_model_before_weight_loadingC   s{   € ßWà&*×&EÑ&EØ×+Ñ+×BÑBÀE×D_ÑD_Ðswð 'Fð '
ˆÔ#ñ (ØØ $× 8Ñ 8Ø#'×#>Ñ#>Ø—z‘z ,Ó/ñ	
ˆñ ,¨E·<±<×3JÑ3JÓK‰r   c                 óD   • SSK Jn  U" XR                  R                  S9  g )Nr   )Úhf_gptqmodel_post_init)Úuse_act_order)Úgptqmodel.utils.modelr<   r   Údesc_act)r   r8   r   r<   s       r   Ú#_process_model_after_weight_loadingÚ0AwqQuantizer._process_model_after_weight_loadingS   s   € Ý@á˜u×4LÑ4L×4UÑ4UÓVr   c                 ó    • U R                   R                  [        R                  [        R                  4;   a  [
        R                  S5        gg)Nz7You cannot save an AWQ model that uses Exllama backend!FT)r   Úbackendr   Ú
EXLLAMA_V1Ú
EXLLAMA_V2r&   r'   ©r   s    r   Úis_serializableÚAwqQuantizer.is_serializableX   s:   € Ø×#Ñ#×+Ñ+´
×0EÑ0EÄz×G\ÑG\Ð/]Ó]Ü�N‰NÐTÔUØàr   c                 ó–   • [         R                  " [        R                  R                  S5      5      [         R                  " S5      :¬  $ )NÚ	gptqmodelz5.0.0)r   ÚparseÚ	importlibÚmetadatarF   s    r   Úis_trainableÚAwqQuantizer.is_trainable_   s1   € ä�}Š}œY×/Ñ/×7Ñ7¸ÓDÓEÌÏÊÐW^ÓI_Ñ_Ð_r   )r1   )r8   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   r*   r9   r@   rG   ÚpropertyrN   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r   $   sM   ø‡ ñð
  ÐØ$Ó$õ8òoòôLò Wò
ð ñ`ó ö`r   r   )Úimportlib.metadatarL   Útypingr   Ú	packagingr   Úbaser   Úmodeling_utilsr   Úutils.quantization_configr	   Úutilsr
   r   r   r   r   r!   Ú
get_loggerrP   r&   r   © r   r   Ú<module>rc      sS   ðó Ý  å å ö Ý0Ý5ç `Ó `Ý 2ñ ×ÑÛà	×	Ò	˜HÓ	%€ô=`�;õ =`r   