ó
    qyüif  ã                   óà   • 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JrJrJrJrJr  \" 5       (       a
  S S	KrSS
KJr  \R.                  " \5      r " S S\5      rg	)é    )ÚTYPE_CHECKINGé   )ÚHfQuantizer)Úget_module_from_nameé   )ÚPreTrainedModel)ÚBitsAndBytesConfig)	ÚACCELERATE_MIN_VERSIONÚBITSANDBYTES_MIN_VERSIONÚis_accelerate_availableÚis_bitsandbytes_availableÚis_torch_availableÚis_torch_hpu_availableÚis_torch_npu_availableÚis_torch_xpu_availableÚloggingN)ÚWeightConverterc                   óü   ^ • \ rS rSr% SrSrS\S'   U 4S jrS rSS	S
\	SSS\
4U 4S jjrSS	S
\	S\4S jrS\\	\\	-  4   S\\	\\	-  4   4S jrS r  SS jrSS jrS r\S\4S j5       rSS jrS rS rSrU =r$ )ÚBnb4BitHfQuantizeré-   z:
4-bit quantization from bitsandbytes quantization method
Fr	   Úquantization_configc                 ó(   >• [         TU ]  " U40 UD6  g ©N)ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €Úg/home/mande/repo/quber/.venv/lib/python3.13/site-packages/transformers/quantizers/quantizer_bnb_4bit.pyr   ÚBnb4BitHfQuantizer.__init__5   s   ø€ Ü‰ÒÐ,Ñ7°Ó7ó    c                 óš  • [        5       (       d  [        S[         S35      e[        5       (       d  [        S[         S35      eSSKJn  U" SS9  UR                  S	5      nU R                  R                  (       dO  [        U[        5      (       a9  [        UR                  5       5      nUS
1:w  a  S
U;   d  SU;   a  [        S5      eg g g g )NzWUsing `bitsandbytes` 4-bit quantization requires accelerate: `pip install 'accelerate>=z'`z]Using `bitsandbytes` 4-bit quantization requires bitsandbytes: `pip install -U bitsandbytes>=Ú`r   )Ú!validate_bnb_backend_availabilityT)Úraise_exceptionÚ
device_mapÚcpuÚdiska¾  Some modules are dispatched on the CPU or the disk. Make sure you have enough GPU RAM to fit the quantized model. If you want to dispatch the model on the CPU or the disk while keeping these modules in 32-bit, you need to set `llm_int8_enable_fp32_cpu_offload=True` and pass a custom `device_map` to `from_pretrained`. Check https://huggingface.co/docs/transformers/main/en/main_classes/quantization#offload-between-cpu-and-gpu for more details. )r   ÚImportErrorr
   r   r   Úintegrationsr$   Úgetr   Ú llm_int8_enable_fp32_cpu_offloadÚ
isinstanceÚdictÚsetÚvaluesÚ
ValueError)r   Úargsr   r$   r&   r0   s         r   Úvalidate_environmentÚ'Bnb4BitHfQuantizer.validate_environment8   sô   € Ü&×(Ñ(ÜØiô  kAð  jBð  BDð  Eóð ô )×*Ñ*ÜØoô  qIð  pJð  JKð  Lóð õ 	Eá)¸$Ò?à—Z‘Z Ó-ˆ
Ø×'Ñ'×H×HÌZÐXbÔdh×MiÑMiÜ˜×*Ñ*Ó,Ó-ˆFØ˜%˜Ó  e¨v£o¸À6Ó9IÜ ð)óð ð :JÐ ð NjÐHr!   Úmodelr   Ú
param_nameÚparamztorch.TensorÚreturnc                 óR   >• U R                  X5      (       a  g[        TU ]	  XU5      $ )z4Return the element size (in bytes) for `param_name`.g      à?)Úparam_needs_quantizationr   Úparam_element_size)r   r5   r6   r7   r   s       €r   r;   Ú%Bnb4BitHfQuantizer.param_element_sizeS   s)   ø€ à×(Ñ(¨×;Ñ;àä‰wÑ)¨%¸UÓCÐCr!   c                 óz   • SS K n[        X5      u  pV[        XTR                  R                  5      =(       a    US:g  $ )Nr   Úbias)Úbitsandbytesr   r-   ÚnnÚ
Linear4bit)r   r5   r6   r   ÚbnbÚmoduleÚnames          r   r:   Ú+Bnb4BitHfQuantizer.param_needs_quantization[   s/   € Û"ä+¨EÓ>‰ˆÜ˜&§&¡&×"3Ñ"3Ó4×G¸À¹ÐGr!   Ú
max_memoryc                 ó`   • UR                  5        VVs0 s H
  u  p#X#S-  _M     nnnU$ s  snnf )NgÍÌÌÌÌÌì?)Úitems)r   rF   ÚkeyÚvals       r   Úadjust_max_memoryÚ$Bnb4BitHfQuantizer.adjust_max_memorya   s5   € à6@×6FÑ6FÔ6HÔIÒ6H©(¨#�c ™:’oÑ6Hˆ
ÑIØÐùó Js   ”*c                 óP  • UGc!  [         R                  R                  5       (       a!  S[         R                  R                  5       0nOÄ[	        5       (       a9  [        [         S5      (       a$  SS[         R                  R                  5        30nO|[        5       (       a9  [        [         S5      (       a$  SS[         R                  R                  5        30nO4[        5       (       a!  S[         R                  R                  5       0nOSS0n[        R                  SU S35        U$ )	NÚ Únpuznpu:Úhpuzhpu:r'   z:The device_map was not initialized. Setting device_map to zL. If you want to use the model for inference, please set device_map ='auto' )ÚtorchÚcudaÚis_availableÚcurrent_devicer   ÚhasattrrO   r   rP   r   ÚxpuÚloggerÚinfo)r   r&   s     r   Úupdate_device_mapÚ$Bnb4BitHfQuantizer.update_device_mapf   sí   € ØÒÜ�z‰z×&Ñ&×(Ñ(Ø ¤%§*¡*×";Ñ";Ó"=Ð>‘
Ü'×)Ñ)¬g´e¸U×.CÑ.CØ  D¬¯©×)AÑ)AÓ)CÐ(DÐ"EÐF‘
Ü'×)Ñ)¬g´e¸U×.CÑ.CØ  D¬¯©×)AÑ)AÓ)CÐ(DÐ"EÐF‘
Ü'×)Ñ)Ø ¤%§)¡)×":Ñ":Ó"<Ð=‘
à  %˜[�
Ü�K‰Kð)Ø)3¨ð 5]ð]ôð
 Ðr!   c                 óÂ  • SSK Jn  U R                  XR                  R                  UR
                  5      U l        U R                  R                  (       a\  [        U[        5      (       aG  UR                  5        VVs/ s H  u  pVUS;   d  M  UPM     nnnU R                  R                  U5        U" UU R                  U R                  U R                  S9ng s  snnf )Nr   )Úreplace_with_bnb_linear)r(   r'   )Úmodules_to_not_convertr   Úpre_quantized)r*   r\   Úget_modules_to_not_convertr   Úllm_int8_skip_modulesÚ_keep_in_fp32_modulesr]   r,   r-   r.   rH   Úextendr^   )r   r5   r&   r   r\   rI   ÚvalueÚkeys_on_cpus           r   Ú$_process_model_before_weight_loadingÚ7Bnb4BitHfQuantizer._process_model_before_weight_loadingy   sº   € õ 	;à&*×&EÑ&EØ×+Ñ+×AÑAÀ5×C^ÑC^ó'
ˆÔ#ð ×#Ñ#×D×DÜ˜*¤d×+Ñ+Ø5?×5EÑ5EÔ5GÔdÒ5G¡z sÈ5ÐTcÑKcŸsÑ5G�ÑdØ×+Ñ+×2Ñ2°;Ô?á'ØØ#'×#>Ñ#>Ø $× 8Ñ 8Ø×,Ñ,ñ	
‰ùó es   Á?CÂCc                 óV   • [        USS5        [        USU R                  5       5        U$ )NÚis_loaded_in_4bitTÚis_4bit_serializable)ÚsetattrÚis_serializable)r   r5   r   s      r   Ú#_process_model_after_weight_loadingÚ6Bnb4BitHfQuantizer._process_model_after_weight_loading‘   s*   € Ü�Ð*¨DÔ1Ü�Ð-¨t×/CÑ/CÓ/EÔFØˆr!   c                 ó   • g©NT© ©r   s    r   rk   Ú"Bnb4BitHfQuantizer.is_serializable–   s   € Ør!   c                 ó   • gro   rp   rq   s    r   Úis_trainableÚBnb4BitHfQuantizer.is_trainable™   s   € àr!   c                 ó4   • SSK Jn  U" XR                  US9nU$ )Nr   )Údequantize_and_replace)r   Údtype)r*   rw   r   )r   r5   rx   rw   s       r   Ú_dequantizeÚBnb4BitHfQuantizer._dequantize�   s   € Ý9á& u×BZÑBZÐbgÑhˆØˆr!   c                 ó   • SSK Jn  U" U 5      $ )Nr   )ÚBnb4bitQuantize)Úintegrations.bitsandbytesr|   )r   r|   s     r   Úget_quantize_opsÚ#Bnb4BitHfQuantizer.get_quantize_ops£   s   € Ý?á˜tÓ$Ð$r!   c                 ó^   • SSK Jn  U R                  (       a  [        / SQSU" U 5      /S9/$ / $ )Nr   )ÚBnb4bitDeserialize)zweight.nested_absmaxzweight.nested_quant_mapzweight.quant_mapzweight.absmaxz$weight.quant_state.bitsandbytes__nf4z$weight.quant_state.bitsandbytes__fp4Úweightr‚   )Úsource_patternsÚtarget_patternsÚ
operations)r}   r�   r^   r   )r   r�   s     r   Úget_weight_conversionsÚ)Bnb4BitHfQuantizer.get_weight_conversions¨   s<   € ÝBà××äò%ð %-Ù 2°4Ó 8Ð9ñðð ð ˆ	r!   )r]   )r5   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationÚ__annotations__r   r3   ÚstrÚfloatr;   Úboolr:   r.   ÚintrK   rY   re   rl   rk   Úpropertyrt   ry   r~   r†   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r   -   sâ   ø‡ ñð !ÐØ-Ó-õ8òð6DÐ(9ð DÀsð DÐSað DÐfk÷ DðHÐ.?ð HÈSð HÐ_cô Hð¨D°°c¸C±i°Ñ,@ð ÀTÈ#ÈsÐUXÉyÈ.ÑEYô ò
ð&
à ô
ô0ò
ð ð˜dó ó ðôò%÷
ð r!   r   )Útypingr   Úbaser   Úquantizers_utilsr   Úmodeling_utilsr   Úutils.quantization_configr	   Úutilsr
   r   r   r   r   r   r   r   r   rQ   Úcore_model_loadingr   Ú
get_loggerrˆ   rW   r   rp   r!   r   Ú<module>rž      sY   ðõ !å Ý 2ö Ý0Ý>÷
÷ 
õ 
ñ ×ÑÛå4à	×	Ò	˜HÓ	%€ôN˜õ Nr!   