+
    œ°³j  ã                   óæ   € ^ RI Ht ^RIHt ]'       d   ^RIHt ^RIHt ^RIH	t	H
t
HtHtHtHtHtHtHt ^RIHt ]! 4       '       d   ^ RIt^RIHt ]P.                  ! ]4      t ! R	 R
]4      tR# )é    )ÚTYPE_CHECKING)ÚHfQuantizer)Ú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Úlogging)Úget_module_from_nameN)ÚWeightConverterc                   óê   a a€ ] tR t^-t oRtRtV 3R ltR tV3R lR ltR t	V3R lV 3R	 llt
V3R
 lR ltV3R lR ltV3R lR ltR t]V3R lR l4       tRR ltR tR tV3R ltRtVtV ;t# )ÚBnb8BitHfQuantizerz:
8-bit quantization from bitsandbytes quantization method
Fc                ó*   <€ \         SV `  ! V3/ VB  R # ©N)ÚsuperÚ__init__)ÚselfÚquantization_configÚkwargsÚ	__class__s   &&,€Úk/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/quantizers/quantizer_bnb_8bit.pyr   ÚBnb8BitHfQuantizer.__init__5   s   ø€ Ü‰ÒÐ,Ñ7°Ô7ó    c                ó¶  € \        4       '       g   \        R \         R24      h\        4       '       g   \        R\         R24      h^RIHp V! RR7       VP                  R4      pV P                  P                  '       gW   \        V\        4      '       d?   \        VP                  4       4      pVR08w  d   RV9   g   R	V9   d   \        R
4      hR# R# R# R# )zWUsing `bitsandbytes` 8-bit quantization requires accelerate: `pip install 'accelerate>=z'`z]Using `bitsandbytes` 8-bit quantization requires bitsandbytes: `pip install -U bitsandbytes>=Ú`)Ú!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. N)r	   ÚImportErrorr   r
   r   Úintegrationsr!   Úgetr   Ú llm_int8_enable_fp32_cpu_offloadÚ
isinstanceÚdictÚsetÚvaluesÚ
ValueError)r   Úargsr   r!   r#   r-   s   &*,   r   Úvalidate_environmentÚ'Bnb8BitHfQuantizer.validate_environment8   s÷   € Ü&×(Ò(ÜØiô  kAð  jBð  BDð  Eóð ô )×*Ò*ÜØoô  qIð  pJð  JKð  Lóð õ 	Eá)¸$Õ?à—Z‘Z Ó-ˆ
Ø×'Ñ'×H×HÐHÌZÐXbÔdh×MiÒMiÜ˜×*Ñ*Ó,Ó-ˆFØ˜%˜Ô  e¨v¤o¸À6Ô9IÜ ð)óð ñ :JÑ ñ NjÑHr   c                ór   <€ V ^8„  d   QhRS[ S[S[S[,          3,          RS[ S[S[S[,          3,          /# )é   Ú
max_memoryÚreturn)r+   ÚstrÚint)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚBnb8BitHfQuantizer.__annotate__S   s6   ø€ ÷ ñ ©D±±c¹Cµi°Õ,@ð ÁTÉ#ÉsÑUXÍyÈ.ÕEYñ r   c                óf   € VP                  4        UUu/ uF  w  r#W#R ,          bK  	  pppV# u uppi )gÍÌÌÌÌÌì?)Úitems)r   r4   ÚkeyÚvals   &&  r   Úadjust_max_memoryÚ$Bnb8BitHfQuantizer.adjust_max_memoryS   s5   € à6@×6FÑ6FÔ6HÔIÑ6H©(¨#�c �:’oÑ6Hˆ
ÑIØÐùó Js   ”-c                ó^  € VEf(   \         P                  P                  4       '       d"   R\         P                  P                  4       /pMÉ\	        4       '       d;   \        \         R4      '       d%   RR\         P                  P                  4        2/pM\        4       '       d;   \        \         R4      '       d%   RR\         P                  P                  4        2/pM5\        4       '       d"   R\         P                  P                  4       /pMRR/p\        P                  RV R24       V# )	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   ÚhasattrrD   r   rE   r   ÚxpuÚloggerÚinfo)r   r#   s   &&r   Úupdate_device_mapÚ$Bnb8BitHfQuantizer.update_device_mapX   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                ó.   <€ V ^8„  d   QhRRRS[ RRRS[/# )r3   Úmodelr   Ú
param_nameÚparamztorch.Tensorr5   )r6   Úfloat)r8   r9   s   "€r   r:   r;   k   s2   ø€ ÷ Dñ DÐ(9ð DÁsð DÐSað DÑfkñ Dr   c                óV   <€ V P                  W4      '       d   ^# \        SV `	  WV4      # )z4Return the element size (in bytes) for `param_name`.)Úparam_needs_quantizationr   Úparam_element_size)r   rQ   rR   rS   r   s   &&&&€r   rW   Ú%Bnb8BitHfQuantizer.param_element_sizek   s)   ø€ à×(Ñ(¨×;Ò;áÜ‰wÑ)¨%¸UÓCÐCr   c                ó*   <€ V ^8„  d   QhRRRS[ RS[/# )r3   rQ   r   rR   r5   )r6   Úbool)r8   r9   s   "€r   r:   r;   r   s)   ø€ ÷ Jñ JÐ.?ð JÉSð JÑ_cñ Jr   c                ó|   € ^ RI p\        W4      w  rV\        WTP                  P                  4      ;'       d    VR8g  # )r   NÚbias)Úbitsandbytesr   r*   ÚnnÚLinear8bitLt)r   rQ   rR   r   ÚbnbÚmoduleÚnames   &&&,   r   rV   Ú+Bnb8BitHfQuantizer.param_needs_quantizationr   s2   € Û"ä+¨EÓ>‰ˆÜ˜&§&¡&×"5Ñ"5Ó6×IÐI¸4À6¹>ÐIr   c                ó   <€ V ^8„  d   QhRR/# ©r3   rQ   r   © )r8   r9   s   "€r   r:   r;   x   s   ø€ ÷ ñ Ð9Jñ r   c                óJ   € \        VR R4       V P                  4       Vn        V# )Úis_loaded_in_8bitT)ÚsetattrÚis_serializableÚis_8bit_serializable)r   rQ   r   s   &&,r   Ú#_process_model_after_weight_loadingÚ6Bnb8BitHfQuantizer._process_model_after_weight_loadingx   s%   € Ü�Ð*¨DÔ1Ø%)×%9Ñ%9Ó%;ˆÔ"Øˆr   c                ó   <€ V ^8„  d   QhRR/# re   rf   )r8   r9   s   "€r   r:   r;   }   s   ø€ ÷ 
ñ 
à ñ
r   c                óÎ  € ^RI Hp V P                  WP                  P                  VP
                  4      V n        V P                  P                  '       d^   \        V\        4      '       dH   VP                  4        UUu. uF  w  rVVR9   g   K  VNK  	  pppV P                  P                  V4       V! VV P                  V P                  V P                  R7      pR# u uppi )r3   )Úreplace_with_bnb_linear)Úmodules_to_not_convertr   Úpre_quantizedN)r%   r$   )r'   rp   Úget_modules_to_not_convertr   Úllm_int8_skip_modulesÚ_keep_in_fp32_modulesrq   r)   r*   r+   r=   Úextendrr   )r   rQ   r#   r   rp   r>   ÚvalueÚkeys_on_cpus   &&&,    r   Ú$_process_model_before_weight_loadingÚ7Bnb8BitHfQuantizer._process_model_before_weight_loading}   s¿   € õ 	;à&*×&EÑ&EØ×+Ñ+×AÑAÀ5×C^ÑC^ó'
ˆÔ#ð ×#Ñ#×D×DÐDÜ˜*¤d×+Ò+Ø5?×5EÑ5EÔ5GÔdÑ5G¡z sÈ5ÐTcÑKcŸs˜sÑ5G�ÑdØ×+Ñ+×2Ñ2°;Ô?á'ØØ#'×#>Ñ#>Ø $× 8Ñ 8Ø×,Ñ,ô	
Šùó es   ÂC!ÂC!c                ó   € R # ©Trf   ©r   s   &r   rj   Ú"Bnb8BitHfQuantizer.is_serializable•   s   € Ùr   c                ó    <€ V ^8„  d   QhRS[ /# )r3   r5   )rZ   )r8   r9   s   "€r   r:   r;   ™   s   ø€ ÷ ñ ™dñ r   c                ó   € R # r|   rf   r}   s   &r   Úis_trainableÚBnb8BitHfQuantizer.is_trainable˜   s   € ár   c                ó:   € ^RI Hp V! WP                  VR7      pV# )r3   )Údequantize_and_replace)r   Údtype)r'   r„   r   )r   rQ   r…   r„   s   &&& r   Ú_dequantizeÚBnb8BitHfQuantizer._dequantizeœ   s   € Ý9á& u×BZÑBZÐbgÔhˆØˆr   c                ó   € ^RI Hp V! V 4      # )r3   )ÚBnb8bitQuantize)Úintegrations.bitsandbytesr‰   )r   r‰   s   & r   Úget_quantize_opsÚ#Bnb8BitHfQuantizer.get_quantize_ops¢   s   € Ý?á˜tÓ$Ð$r   c                óf   € ^RI Hp V P                  '       d   \        . RORV! V 4      .R7      .# . # )r3   )ÚBnb8bitDeserializeÚweight)Úsource_patternsÚtarget_patternsÚ
operations)ÚSCBÚweight_formatr�   )rŠ   rŽ   rr   r   )r   rŽ   s   & r   Úget_weight_conversionsÚ)Bnb8BitHfQuantizer.get_weight_conversions§   s;   € ÝBà××ÐäÚ$FØ$,Ù 2°4Ó 8Ð9ôðð ð ˆ	r   c                ó$   <€ V ^8„  d   Qh/ R;R&   # )r3   r   r   rf   )r8   r9   s   "€r   r:   r;   -   s   ø‡ ‚ ð .Ñ-ò r   )rq   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úrequires_calibrationr   r0   r@   rN   rW   rV   rl   ry   rj   Úpropertyr�   r†   r‹   r•   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   r9   s   @@r   r   r   -   s‡   ù‡ € ñð !Ðõ8ò÷6ð ò
÷&Dó D÷Jð J÷ð ÷

ð 
ò0ð ÷ó ðôò%ò
÷u … r   r   )Útypingr   Úbaser   Úmodeling_utilsr   Úutils.quantization_configr   Úutilsr   r   r	   r
   r   r   r   r   r   Úquantizers_utilsr   rF   Úcore_model_loadingr   Ú
get_loggerr˜   rL   r   rf   r   r   Ú<module>r«      s[   ðõ !å ÷ Ý0Ý>÷
÷ 
õ 
õ 3ñ ×ÒÛå4à	×	Ò	˜HÓ	%€ôE˜ö Er   