o
    h                  	   @   s   d dl mZmZmZ ddlmZ ddlmZ er%ddlm	Z	 e r%d dl
Z
ddlmZmZmZ e r8d d	lmZ eeZd
ddddddddZG dd deZdS )    )TYPE_CHECKINGAnyDict   )is_torch_available   )HfQuantizer)PreTrainedModelN)is_accelerate_availableis_quark_availablelogging)set_module_tensor_to_devicezweight_quantizer.scalezbias_quantizer.scalezinput_quantizer.scalezoutput_quantizer.scalezweight_quantizer.zero_pointzbias_quantizer.zero_pointzinput_quantizer.zero_pointzoutput_quantizer.zero_point)weight_scale
bias_scaleinput_scaleoutput_scaleweight_zero_pointbias_zero_pointinput_zero_pointoutput_zero_pointc                
       s   e Zd ZdZdZdgZdZ fddZdd Zdd
dZ	dd	ddde
dee
ef def
ddZ		dddZdddZdddZedd Z  ZS ) QuarkHfQuantizerz?
    Quark quantizer (https://quark.docs.amd.com/latest/).
    Tquarkc                    s    t  j|fi | |j| _d S N)super__init__json_export_config)selfquantization_configkwargs	__class__ {/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/transformers/quantizers/quantizer_quark.pyr   >   s   zQuarkHfQuantizer.__init__c                 O   s   t  stdd S )NzLoading a Quark quantized model requires the `quark` library but it was not found in the environment. Please refer to https://quark.docs.amd.com/latest/install.html.)r   ImportError)r   argsr   r!   r!   r"   validate_environmentC   s
   z%QuarkHfQuantizer.validate_environmentmodelr	   c                 K   s,   ddl m} ||| jj| jj| jjd |S )Nr   )_map_to_quark)pack_methodcustom_mode)quark.torch.export.apir'   r   quant_configr   r(   r)   )r   r&   r   r'   r!   r!   r"   $_process_model_before_weight_loadingI   s   z5QuarkHfQuantizer._process_model_before_weight_loadingparam_valueztorch.Tensor
param_name
state_dictreturnc                 K      dS )NTr!   )r   r&   r-   r.   r/   r   r!   r!   r"   check_quantized_paramU   s   z&QuarkHfQuantizer.check_quantized_paramtorch.nn.Parameterc                 C   s:   | dd }|tv r||t| }t||||d d S )N.)value)splitCHECKPOINT_KEYSreplacer   )r   r&   paramr.   param_devicer/   unexpected_keyspostfixr!   r!   r"   create_quantized_param_   s   z'QuarkHfQuantizer.create_quantized_paramc                 K   s   |S r   r!   )r   r&   r   r!   r!   r"   #_process_model_after_weight_loadingi      z4QuarkHfQuantizer._process_model_after_weight_loadingNc                 C   r1   NFr!   )r   safe_serializationr!   r!   r"   is_serializablel   r@   z QuarkHfQuantizer.is_serializablec                 C   r1   rA   r!   )r   r!   r!   r"   is_trainableo   s   zQuarkHfQuantizer.is_trainable)r&   r	   )r0   r3   r   )__name__
__module____qualname____doc__requires_calibrationrequired_packages requires_parameters_quantizationr   r%   r,   strr   r   boolr2   r>   r?   rC   propertyrD   __classcell__r!   r!   r   r"   r   1   s4    







r   )typingr   r   r   
file_utilsr   baser   modeling_utilsr	   torchutilsr
   r   r   accelerate.utilsr   
get_loggerrE   loggerr8   r   r!   r!   r!   r"   <module>   s*   
