Ë
    Hêñi»  ã                   óÀ   — d dl 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 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)é    N)ÚTYPE_CHECKING)Úversioné   )ÚHfQuantizeré   )ÚPreTrainedModel)Ú	AwqConfig)Úis_accelerate_availableÚis_gptqmodel_availableÚis_torch_availableÚlogging)Ú
AwqBackendc                   ób   ‡ — e Zd ZU dZdZded<   ˆ fd„Zd„ Zd„ Zdd„Z	d	„ Z
d
„ Zed„ «       Zˆ xZS )ÚAwqQuantizerzu
    4-bit quantization for Activation-aware Weight Quantization(AWQ) (https://huggingface.co/papers/2306.00978)
    Tr	   Úquantization_configc                 ó&   •— t        ‰| �  |fi |¤Ž y )N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úg/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/quantizers/quantizer_awq.pyr   zAwqQuantizer.__init__-   s   ø€ Ü‰ÑÐ,Ñ7°Ó7ó    c                 óX   — t        «       st        d«      ‚t        «       st        d«      ‚y )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_environmentz!AwqQuantizer.validate_environment0   s1   € Ü%Ô'ÜØsóð ô 'Ô(ÜÐmÓnÐnð )r   c                 óº  — |t         j                  k(  rct         j                  j                  «       st         j                  j                  «       r't
        j                  d«       t         j                  }|S |t         j                  k7  rQt         j                  j                  «       st         j                  j                  «       rt
        j                  d«       |S )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_dtypezAwqQuantizer.update_dtype9   s‹   € Ø”E—N‘NÒ"¬¯
©
×(?Ñ(?Ô(AÄUÇYÁY×E[ÑE[ÔE]Ü�N‰NØmôô —M‘MˆEð ˆð ”e—m‘mÒ#¬¯©×)@Ñ)@Ô)BÄeÇiÁi×F\ÑF\ÔF^Ü�N‰NÐtÔuØˆr   c                 ó  — ddl m}m} | j                  || j                  j
                  |j                  d¬«      | _         ||| j                  | j
                  |j                  d«      ¬«      } |||j                  j                  «      }y )Nr   )Úreplace_quantization_scalesÚreplace_with_awq_linearT)Úadd_default_skipsÚ
device_map)r   Úmodules_to_not_convertr,   )
Úintegrationsr)   r*   Úget_modules_to_not_convertr   r-   Ú_keep_in_fp32_modulesÚgetÚconfigÚ
model_type)r   Úmodelr   r)   r*   s        r   Ú$_process_model_before_weight_loadingz1AwqQuantizer._process_model_before_weight_loadingC   s   € ßWà&*×&EÑ&EØ�4×+Ñ+×BÑBÀE×D_ÑD_Ðswð 'Fó '
ˆÔ#ñ (ØØ $× 8Ñ 8Ø#'×#>Ñ#>Ø—z‘z ,Ó/ô	
ˆñ ,¨E°5·<±<×3JÑ3JÓK‰r   c                 óL   — ddl m}  ||| j                  j                  ¬«       y )Nr   )Úhf_gptqmodel_post_init)Úuse_act_order)Úgptqmodel.utils.modelr7   r   Údesc_act)r   r4   r   r7   s       r   Ú#_process_model_after_weight_loadingz0AwqQuantizer._process_model_after_weight_loadingS   s   € Ý@á˜u°D×4LÑ4L×4UÑ4UÖVr   c                 óœ   — | j                   j                  t        j                  t        j                  fv rt
        j                  d«       yy)Nz7You cannot save an AWQ model that uses Exllama backend!FT)r   Úbackendr   Ú
EXLLAMA_V1Ú
EXLLAMA_V2r#   r$   ©r   s    r   Úis_serializablezAwqQuantizer.is_serializableX   s:   € Ø×#Ñ#×+Ñ+´
×0EÑ0EÄz×G\ÑG\Ð/]Ñ]Ü�N‰NÐTÔUØàr   c                 ó’   — t        j                  t        j                  j                  d«      «      t        j                  d«      k\  S )NÚ	gptqmodelz5.0.0)r   ÚparseÚ	importlibÚmetadatar@   s    r   Úis_trainablezAwqQuantizer.is_trainable_   s1   € ä�}‰}œY×/Ñ/×7Ñ7¸ÓDÓEÌÏÉÐW^ÓI_Ñ_Ð_r   )r4   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚ__annotations__r   r   r'   r5   r;   rA   ÚpropertyrG   Ú__classcell__)r   s   @r   r   r   $   sM   ø… ñð
  ÐØ$Ó$ô8òoòóLò Wò
ð ñ`ó ô`r   r   )Úimportlib.metadatarE   Útypingr   Ú	packagingr   Úbaser   Úmodeling_utilsr   Úutils.quantization_configr	   Úutilsr
   r   r   r   r   r   Ú
get_loggerrH   r#   r   © r   r   ú<module>rY      sR   ðó Ý  å å ñ Ý0Ý5ç `Ó `Ý 2ñ ÔÛà	ˆ×	Ñ	˜HÓ	%€ô=`�;õ =`r   