+
    "Ý³j=¶  ã                  ó¬  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
HtHt ^ RIt^ RIHt ^RIHt ^RIHt ^RIHt ^R	IHt ^R
IHt ^RIHtHt ^RIHt ^RIH t H!t!H"t"H#t#H$t$H%t%H&t& ^RI'H(t( ^RI)H*t* ^RI+H,t, ^RI-H.t.H/t/ ^RI0H1t1H2t2H3t3H4t4H5t5 ^RI6H7t7H8t8H9t9H:t:H;t;H<t< ^RI=H>t> ^RI?H@t@ ^RIAHBtBHCtCHDtDHEtE ]/! 4       tF ! R R]@4      tGR.tHR# )a—  Weight-only quantization loop for methods that do not capture activations.

This looper intentionally does not share the activation-capture lifecycle used
by GPTQ/AWQ calibration flows. Weight-only methods such as RTN, FP8, NVFP4, or
GGUF can usually process each linear layer directly, so the control flow here
stays narrow: iterate quantizable modules, quantize weights, finalize, and
optionally offload.
)ÚannotationsN)Úas_completed)ÚDictÚListÚOptionalÚTuple)Úmaterialize_model)ÚDEVICE_THREAD_POOL)ÚModulePreProcessor)ÚWeightOnlyProcessor)ÚNamedModule)Ú
BaseQModel)ÚCPUÚSUPPORTS_MODULE_TYPES)ÚMODULE_CONVERTER_MAP)ÚBitsAndBytesConfigÚ	FP8ConfigÚ
GGUFConfigÚQuantizeEmbedÚQuantizeEmbedConfigÚ	RTNConfigÚVramStrategy)Úhas_gil_disabled)Ú
get_device)Úemit_device_telemetry)Úlog_time_blockÚsetup_logger)Ú
device_ctxÚfind_last_quantized_layer_indexÚnormalize_device_likeÚrehome_module_to_deviceÚselect_forward_devices)Úfind_modulesÚget_layer_nameÚget_layers_with_prefixesÚ
get_moduleÚget_module_by_name_prefixÚmove_to)Úoffload_to_disk)ÚDeviceAssignmentState)ÚLoopContextÚLoopExtensionsÚLoopPlanÚLoopStepc                  óŽ  € ] tR t^EtRtR4R R lltR tR R lt]R R	 l4       t	R
 R lt
R R lt]R R l4       t]R R l4       t]R R l4       tR R ltR R ltR R ltR R ltR R ltR R lt]P,                  ! 4       R  R! l4       tR" R# ltR$ R% ltR& R' ltR( R) ltR* R+ ltR, R- ltR. R/ ltR0 R1 ltR2 t R3t!R# )5ÚWeightOnlyLooperzDRun the simplified per-layer lifecycle for weight-only quantization.Nc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úmodelr   Ú	processorr   Úembed_quant_configzOptional[QuantizeEmbedConfig]© )Úformats   "Úd/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/looper/weight_only_looper.pyÚ__annotate__ÚWeightOnlyLooper.__annotate__H   s(   € ÷ .ñ .àð.ð 'ð.ð :ñ	.ó    c                óD  € Wn         W n        \        V4      V n        V'       d   VP                  MRV n        V'       d   VP
                  MRV n        V P                  4       V n        ^ V n        / V n	        \        P                  ! 4       V n        V P                  4        R# )zHInitializes the looper with the model being quantized and its processor.N)Ú
gptq_modelr3   r+   Ú
extensionsÚembed_quant_modeÚ
embed_onlyÚ_resolve_quant_devicesÚ_quant_devicesÚ_quant_device_rrÚ_module_device_mapÚ	threadingÚLockÚ_quant_device_lockÚ_resolve_strategy_device_pools)Úselfr2   r3   r4   r=   s   &&&&&r7   Ú__init__ÚWeightOnlyLooper.__init__H   s}   € ð  ŒØ"ŒÜ(¨Ó4ˆŒßGYÐ 2× CÒ CÐ_cˆÔß;MÐ,×7Ò7ÐSWˆŒØ"×9Ñ9Ó;ˆÔØ !ˆÔØ;=ˆÔÜ"+§.¢.Ó"2ˆÔØ×+Ñ+Ö-r:   c                	ó  € R V P                    Uu. uF  p\        V4      NK  	  upRV P                   Uu. uF  p\        V4      NK  	  upRV P                   Uu. uF  p\        V4      NK  	  upR. /# u upi u upi u upi )ÚquantizationÚdenseÚmoeÚforward)rA   ÚstrÚ_dense_quant_devicesÚ_moe_quant_devices)rH   Údevices   & r7   Úexecution_device_poolsÚ'WeightOnlyLooper.execution_device_pools\   sz   € à°t×7JÒ7JÓKÑ7J¨VœS ž[Ñ7JÑKØ°×0IÒ0IÓJÑ0I f”c˜&–kÑ0IÑJØ¨d×.EÒ.EÓFÑ.E F”C˜–KÑ.EÑFØ�rð	
ð 	
ùÚKùÚJùÚFs   �A4µA9
ÁA>c               ó   € V ^8„  d   QhRR/# )r1   ÚreturnúList[torch.device]r5   )r6   s   "r7   r8   r9   d   s   € ÷ Rñ RÐ(:ñ Rr:   c                óŽ  € V P                   P                  p\        VRR4      p\        V4      pV'       d   \	        V4      M\
        .pV'       g   \
        .p\        VRR4      pVe1   V! V4      p\        V4      ^8¼  d   TpM\        P                  R4       V Uu. uF  p\        V4      ;'       g    \
        NK  	  up# u upi )z@Resolve the device pool used by weight-only module quantization.rS   NÚcompute_device_filterzsWeightOnlyLooper: compute_device_filter returned empty device list. Using all devices for weight-only quantization.)	r<   Úquantize_configÚgetattrr   r!   r   ÚlenÚlogÚwarn)rH   Úquant_configÚquant_device_hintÚnormalized_quant_deviceÚquant_devicesrZ   Úquant_devices_filteredrS   s   &       r7   r@   Ú'WeightOnlyLooper._resolve_quant_devicesd   s¿   € ð —‘×6Ñ6ˆÜ# L°(¸DÓAÐÜ"7Ð8IÓ"JÐßKbÔ.Ð/FÔGÔilÐhmˆßÜ ˜EˆMä '¨Ð6MÈtÓ TÐØ Ò,Ù%:¸=Ó%IÐ"ÜÐ)Ó*¨aÔ/Ø 6‘ä—‘ðFôñ
 DQÓQÁ=¸Ô% fÓ-×4Ð4´Ò4Á=ÑQÐQùÒQs   ÂCÂ4Cc               ó   € V ^8„  d   QhRR/# )r1   rW   r   r5   )r6   s   "r7   r8   r9   |   s   € ÷ 
&ñ 
&¨<ñ 
&r:   c                óô   € \        V \        4      '       d   V # \        V \        4      '       d    \        V P                  4       4      # \        P
                  #   \         d    \        P
                  u # i ; i)z.Normalize one user-facing VRAM strategy value.)Ú
isinstancer   rP   ÚlowerÚ
ValueErrorÚ	EXCLUSIVE)Úvalues   &r7   Ú_normalize_vram_strategyÚ)WeightOnlyLooper._normalize_vram_strategy{   sd   € ô �eœ\×*Ò*ØˆLÜ�eœS×!Ò!ð.Ü# E§K¡K£MÓ2Ð2ô ×%Ñ%Ð%øô ô .Ü#×-Ñ-Ò-ð.ús   °A ÁA7Á6A7c               ó$   € V ^8„  d   QhRRRRRR/# )r1   Úconfigured_deviceszOptional[List[str]]ÚlabelrP   rW   rX   r5   )r6   s   "r7   r8   r9   ˆ   s(   € ÷ !ñ !à/ð!ð ð	!ð
 
ñ!r:   c               ó$  € V'       g   \        V P                  4      # V P                   Uu/ uF0  p\        V4      f   K  \        \        V4      4      \        V4      bK2  	  pp. pV Fˆ  p\        V4      pVf   \	        RV RV: R24      hVP                  \        V4      4      pVf-   \	        RV RV R\        VP                  4       4       R24      hW…9  g   Kw  VP                  V4       KŠ  	  V'       g   \	        RV R24      hV# u upi )zIResolve one dense/MoE strategy device list against visible quant devices.zWeightOnlyLooper: z$ contains unsupported device value: Ú.Ú z- must be a subset of visible compute devices z is empty after normalization.)ÚlistrA   r   rP   rj   ÚgetÚkeysÚappend)	rH   rp   rq   rS   Úavailable_by_nameÚresolvedÚdevice_nameÚ
normalizedÚmatcheds	   &&$      r7   Ú_resolve_strategy_device_poolÚ.WeightOnlyLooper._resolve_strategy_device_poolˆ   s.  € ÷ "Ü˜×+Ñ+Ó,Ð,ð ×-Ò-ó
á-�Ü$ VÓ,ô NŒCÔ% fÓ-Ó.Ô0EÀfÓ0MÒMÙ-ð 	ð 
ð
 (*ˆÛ-ˆKÜ.¨{Ó;ˆJØÒ!Ü Ð#5°e°WÐ<`ÐalÑ`oÐopÐ!qÓrÐrØ'×+Ñ+¬C°
«OÓ<ˆGØŠÜ Ø(¨¨¨qÐ1CÐ0DÐDqÜÐ-×2Ñ2Ó4Ó5Ð6°að9óð ð Ö&Ø—‘ Ö(ñ .÷ ÜÐ1°%°Ð8VÐWÓXÐXàˆùò-
s   ¬DÁ "Dc               ó   € V ^8„  d   QhRR/# )r1   rW   ÚNoner5   )r6   s   "r7   r8   r9   «   s   € ÷ {ñ {°ñ {r:   c                óV  € V P                   P                  pV P                  \        VR\        P
                  4      4      V n        V P                  \        VR\        P
                  4      4      V n        \        VRR4      p\        VRR4      pV P                  VRR7      V n	        V P                  VRR7      V n
        \        V4      ;'       g    V P                  \        P
                  8g  V n        \        V4      ;'       g    V P                  \        P
                  8g  V n        R# )zJResolve dense and MoE pools once so module assignment stays deterministic.Údense_vram_strategyÚmoe_vram_strategyÚdense_vram_strategy_devicesNÚmoe_vram_strategy_devices)rq   )r<   r[   rm   r\   r   rk   Ú_dense_vram_strategyÚ_moe_vram_strategyr~   rQ   rR   ÚboolÚ_dense_vram_strategy_explicitÚ_moe_vram_strategy_explicit)rH   r`   Údense_strategy_devicesÚmoe_strategy_devicess   &   r7   rG   Ú/WeightOnlyLooper._resolve_strategy_device_pools«   s)  € ð —‘×6Ñ6ˆØ$(×$AÑ$AÜ�LÐ"7¼×9OÑ9OÓPó%
ˆÔ!ð #'×"?Ñ"?Ü�LÐ"5´|×7MÑ7MÓNó#
ˆÔô ")¨Ð7TÐVZÓ![ÐÜ& |Ð5PÐRVÓWÐØ$(×$FÑ$FØ"Ø/ð %Gó %
ˆÔ!ð #'×"DÑ"DØ Ø-ð #Eó #
ˆÔô .2Ð2HÓ-I÷  .Að  .AÈT×MfÑMfÔjv÷  kAñ  kAñ  NAˆÔ*Ü+/Ð0DÓ+E×+zÐ+zÈ×I`ÑI`Ôdp×dzÑdzÑIzˆÖ(r:   c               ó    € V ^8„  d   QhRRRR/# )r1   Úmodule_nameúOptional[str]rW   r5   )r6   s   "r7   r8   r9   Ã   s   € ÷ 	/ñ 	/¨Mð 	/¸mñ 	/r:   c                ó    € V '       d   RV 9  d   R# V P                  R^4      w  rVP                  R^4      ^ ,          pV'       g   R# V RV 2# )zDReturn the expert family key used to co-locate gate/up/down modules.z	.experts.Nrs   ©Úsplit)r�   ÚprefixÚ	remainderÚ	expert_ids   &   r7   Ú_extract_moe_group_keyÚ'WeightOnlyLooper._extract_moe_group_keyÂ   sR   € ÷ ˜k°Ô<ÙØ'×-Ñ-¨k¸1Ó=ÑˆØ—O‘O C¨Ó+¨AÕ.ˆ	ßÙØ�˜ 9 +Ð.Ð.r:   c               ó    € V ^8„  d   QhRRRR/# )r1   Ú
moe_groupsúDict[str, List[str]]rW   ú	List[str]r5   )r6   s   "r7   r8   r9   Ï   s   € ÷ %ñ %Ð7Kð %ÐPYñ %r:   c                ó  € . pV P                  4        Fq  w  r#V Uu0 uF  qDP                  R^4      R,          kK  	  ppRR0P                  V4      '       g   RR0P                  V4      '       g   K`  VP                  V4       Ks  	  V# u upi )zAReturn expert families that should stay co-located on one device.rs   Ú	gate_projÚup_projÚw1Úw3éÿÿÿÿ)ÚitemsÚrsplitÚissubsetrx   )r›   Úassignable_group_keysÚ	group_keyÚmodule_namesÚnameÚsuffixess   &     r7   Ú"_collect_assignable_moe_group_keysÚ3WeightOnlyLooper._collect_assignable_moe_group_keysÎ   sŒ   € ð ,.ÐØ'1×'7Ñ'7Ö'9Ñ#ˆIÙ<HÓI¹L°DŸ™ C¨Ó+¨B×/Ð/¹LˆHÐIØ˜YÐ'×0Ñ0°×:Ò:¸tÀT¸l×>SÑ>SÐT\×>]Ô>]Ø%×,Ñ,¨YÖ7ñ (:ð %Ð$ùò Js   œ!B
c               ó    € V ^8„  d   QhRRRR/# )r1   r�   rP   rW   r5   )r6   s   "r7   r8   r9   Ú   s   € ÷ ,ñ ,°Sð ,¸Sñ ,r:   c                ó4   € V P                  R^4      ^ ,          # )zHStrip model-tree annotations so planning blocks match live module names.Ú:r“   )r�   s   &r7   Ú_normalize_planning_module_nameÚ0WeightOnlyLooper._normalize_planning_module_nameÙ   s   € ð × Ñ   aÓ(¨Õ+Ð+r:   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r1   Úlayer_candidate_namesr�   Úlayer_moe_group_key_by_namezDict[str, Optional[str]]Úplanning_layer_modulesúOptional[List[List[str]]]rW   rœ   r5   )r6   s   "r7   r8   r9   ß   s2   € ÷ (ñ (à(ð(ð &>ð(ð !:ð	(ð
 
ñ(r:   c                ó(  € V Uu. uF  pVP                  V4      e   K  VNK  	  pp\        V4      p/ pV'       d«   \        V4       F›  w  r‰. p
\        4       pV	 FY  pV P                  V4      pWK9   g   WF9  d   K"  VP	                  V4       VP                  V4      e   KH  V
P                  V4       K[  	  V
'       g   Kz  W§RV 2&   V
 F  pVP                  V4       K  	  K�  	  V F!  pWF9  d   K  V.Wt&   VP                  V4       K#  	  V# u upi )zACollect dense modules into model-tree-defined calculation groups.z	planning:)rv   ÚsetÚ	enumerater±   Úaddrx   Údiscard)rH   r´   rµ   r¶   r�   Úremaining_dense_namesÚremaining_dense_setÚdense_groupsÚblock_indexÚblockÚblock_dense_namesÚ
block_seenÚblock_entrys   &&&&         r7   Ú_collect_dense_groupsÚ&WeightOnlyLooper._collect_dense_groupsß   s+  € ñ  5ó!
á4�Ø*×.Ñ.¨{Ó;÷ ˆKÙ4ð 	ð !
ô
 "Ð"7Ó8ÐØ-/ˆç!Ü&/Ð0FÖ&GÑ"�Ø/1Ð!Ü ›U�
Û#(�KØ"&×"FÑ"FÀ{Ó"S�KØ"Ô0°KÔ4ZÙ Ø—N‘N ;Ô/Ø2×6Ñ6°{ÓCÒOÙ Ø%×,Ñ,¨[Ö9ñ $)÷ %Ñ$Ø>O 9¨[¨MÐ!:Ñ;Û'8˜Ø+×3Ñ3°KÖ@ó (9ñ 'Hó" 1ˆKØÔ5ÙØ)4¨ˆLÑ%Ø×'Ñ'¨Ö4ñ	 1ð ÐùòA!
s
   …DŸDc               ó$   € V ^8„  d   QhRRRRRR/# )r1   ÚfullúDict[str, torch.nn.Module]r¶   r·   rW   zDict[str, torch.device]r5   )r6   s   "r7   r8   r9   	  s/   € ÷ M!ñ M!ð )ðM!ð !:ð	M!ð
 
!ñM!r:   c               óX  € V P                   pV P                  pV'       g   V'       g   / # \        VP                  4       4      pV Uu/ uF  pW`P	                  V4      bK  	  pp/ pVP                  4        F,  w  riV	f   K  VP                  V	. 4      P                  V4       K.  	  V P                  VVV4      p
/ pV P                   Uu. uF  pVf   K	  \        VRR4      R8w  g   K  VNK!  	  up;'       g    \        V P                  4      pV P                   Uu. uF  pVf   K	  \        VRR4      R8w  g   K  VNK!  	  up;'       g    \        V P                  4      pV'       d£   V
'       d›   V'       d“   \        V
P                  4       4      p\        V4       Fj  w  pp	V P                  \        P                  8X  d*   \!        V4      ^8”  d   VV\!        V4      ,          ,          MV^ ,          pW©,           F  pVW¶&   K	  	  Kl  	  V'       d›   V'       d“   V'       d‹   V P#                  V4      p\        V4       Fj  w  pp	V P$                  \        P                  8X  d*   \!        V4      ^8”  d   VV\!        V4      ,          ,          MV^ ,          pW‰,           F  pVW¶&   K	  	  Kl  	  \&        P(                  P+                  R4      p\-        4       p\/        T;'       d    \!        V P                  4      ^ 8„  4      p\0        P3                  RVVVVV4       V# u upi u upi u upi )z7Build the dense/MoE preferred-device map for one layer.NÚtypeÚcpuÚ
PYTHON_GILz€ModuleLooper: MoE quant runtime dense_pool=%s moe_pool=%s PYTHON_GIL=%s gil_disabled=%s free_threaded_parallel_quant_eligible=%s)rŠ   r‹   ru   rw   r˜   r¤   Ú
setdefaultrx   rÅ   rQ   r\   rR   rº   r‡   r   ÚBALANCEDr]   r¬   rˆ   ÚosÚenvironrv   r   r‰   r^   Úinfo)rH   rÈ   r¶   Údense_strategy_activeÚmoe_strategy_activer´   r�   Úmoe_group_key_by_namer›   r¨   r¿   Úpreferred_devicesrS   Údense_devicesÚmoe_devicesÚdense_group_keysÚgroup_indexÚtarget_devicer§   Úgil_envÚgil_disabledÚ%free_threaded_parallel_quant_eligibles   &$$                   r7   Ú _build_layer_strategy_device_mapÚ1WeightOnlyLooper._build_layer_strategy_device_map	  s  € ð !%× BÑ BÐØ"×>Ñ>Ðß$×-@ØˆIä $ T§Y¡Y£[Ó 1Ðñ  5ó!
á4�ð ×4Ñ4°[ÓAÒAÙ4ð 	ð !
ð ,.ˆ
Ø&;×&AÑ&AÖ&CÑ"ˆKØÔ$Ø×%Ñ% i°Ó4×;Ñ;¸KÖHñ 'Dð ×1Ñ1Ø!Ø!Ø"ó
ˆð
 68Ðà!%×!:Ò!:ó
Ù!:�vØô Ü&-¨f°f¸dÓ&CÀuÑ&L÷ ˆFÑ!:ñ
÷ -ð -ô �$×+Ñ+Ó,ð 	ð
 "&×!8Ò!8ó
Ù!8�vØô Ü&-¨f°f¸dÓ&CÀuÑ&L÷ ˆFÑ!8ñ
÷ +ð +ô �$×)Ñ)Ó*ð 	÷
 !§\·mÜ# L×$5Ñ$5Ó$7Ó8ÐÜ*3Ð4DÖ*EÑ&�˜Yð
 ×0Ñ0´L×4IÑ4IÔIÌcÐR_ÓN`ÐcdÔNdð " +´°MÓ0BÕ"BÖCà& qÕ)ð ð
 $0×#:Ð#:�KØ5BÐ%Ó2ó $;ñ +F÷ §:·+Ø$(×$KÑ$KÈJÓ$WÐ!Ü*3Ð4IÖ*JÑ&�˜Yð
 ×.Ñ.´,×2GÑ2GÔGÌCÐP[ÓL\Ð_`ÔL`ð   ¬c°+Ó.>Õ >Ö?à$ Q�ð ð
 $.×#8Ð#8�KØ5BÐ%Ó2ó $9ñ +Kô —*‘*—.‘. Ó.ˆÜ'Ó)ˆÜ04°\×5fÐ5fÄcÈ$×JaÑJaÓFbÐefÑFfÓ0gÐ-Ü�‰ðUàØØØØ1ô	
ð !Ð ùò!
ùò
ùò
s*   ÁLÃ	L"ÃL"Ã(L"ÄL'Ä'L'Ä;L'c               ó$   € V ^8„  d   QhRRRRRR/# )r1   Únamed_moduler   Úfallback_deviceútorch.devicerW   r5   )r6   s   "r7   r8   r9   X  s#   € ÷ (ñ (¸Kð (ÐZfð (Ðkwñ (r:   c           	     ó~  a€ \        VRR4      ;'       g    VP                  pV P                  ;_uu_ 4        V P                  P	                  V4      pVe   \        RVVR7       VuuRRR4       # \        VP                  P	                  R4      4      oSef   \        ;QJ d)    V3R lV P                   4       F  '       g   K   RM	  RM! V3R lV P                   4       4      '       d   Sp\        R	VVR7       M~\        V P                  4      ^8:  d   V P                  ^ ,          pMPV P                  V P                  \        V P                  4      ,          ,          pV ;P                  ^,          un        Vf   TpWPP                  V&   \        R
VVVR7       VuuRRR4       #   + '       g   i     R# ; i)z>Pick and memoize the quantization device for one named module.Ú	full_nameNÚ"weight_only_quant_device_cache_hit©ÚmodulerÛ   Úpreferred_quant_devicec              3  ó,   <"  € T F	  qS8H  x € K  	  R # 5i©Nr5   )Ú.0rS   Úpreferred_devices   & €r7   Ú	<genexpr>ÚCWeightOnlyLooper._assign_quant_device_for_module.<locals>.<genexpr>g  s   øé € Ð3qÑ]pÐSYÐ>NÖ4NÓ]pùs   ƒTFÚ'weight_only_quant_device_preferred_hintÚweight_only_quant_device_assign)ré   rÛ   rã   )r\   rª   rF   rC   rv   r   r   ÚstateÚanyrA   r]   rB   )rH   râ   rã   ÚkeyÚcachedrS   rî   s   &&&   @r7   Ú_assign_quant_device_for_moduleÚ0WeightOnlyLooper._assign_quant_device_for_moduleX  so  ø€ ô �l K°Ó6×KÐK¸,×:KÑ:KˆØ×$×$Ó$Ø×,Ñ,×0Ñ0°Ó5ˆFØÒ!Ü%Ø8ØØ"(õð
 ÷ %Ò$ô  5°\×5GÑ5G×5KÑ5KÐLdÓ5eÓfÐØÒ+·³Ô3qÐ]a×]pÒ]pÓ3q··²Ô3qÐ]a×]pÒ]pÓ3q×0qÒ0qð *�Ü%Ø=ØØ"(öô
 �T×(Ñ(Ó)¨QÔ.Ø×,Ñ,¨QÕ/‘à×,Ñ,¨T×-BÑ-BÄSÈ×I\ÑI\ÓE]Õ-]Õ^�Ø×%Ò%¨Õ*Õ%àŠ~Ø(�à+1×#Ñ# CÑ(Ü!Ø1ØØ$Ø /õ	ð ÷I %×$×$Ó$ús$   ·/F+Á12F+Â$F+Ã'F+Ã-B3F+Æ+F<	c               ó$   € V ^8„  d   QhRRRRRR/# )r1   Únamedr   rÛ   rä   rW   r�   r5   )r6   s   "r7   r8   r9   ‚  s#   € ÷ 
ñ 
¸Kð 
ÐXdð 
Ðimñ 
r:   c           	     óŠ  €  \        VP                  4      p\        V4      ;_uu_ 4        \	        VP                  VR7       \        VP                  VRRR7       W!n        W!P                  n        RRR4       \        R\        VRVP                  4      VVR7       R#   \         d    Rp L—i ; i  + '       g   i     LI; i)z>Move a weight-only module to the assigned quantization device.N©rS   T©Úmove_parametersÚmove_buffersÚweight_only_quant_prepareræ   ©ré   Úprevious_devicerÛ   )
r   ré   Ú	Exceptionr   r'   r    rÛ   r   r\   rª   )rH   rú   rÛ   r  s   &&& r7   Ú&_prepare_named_module_for_quantizationÚ7WeightOnlyLooper._prepare_named_module_for_quantization‚  s™   € ð	#Ü(¨¯©Ó6ˆOô ˜×&Õ&Ü�E—L‘L¨Õ7Ü# E§L¡L°-ÐQUÐdhÕiØ"/ÔØ)6�L‰LÔ&÷	 'ô
 	Ø'Ü˜5 +¨u¯z©zÓ:Ø+Ø'÷		
øô ô 	#Ø"ŠOð	#úç&×&ús   ‚B ªAB2ÂB/Â.B/Â2C	c               ó    € V ^8„  d   QhRRRR/# )r1   rú   r   rW   r�   r5   )r6   s   "r7   r8   r9   •  s   € ÷ !
ñ !
¨{ð !
¸tñ !
r:   c           
     ó|  € \        VRVP                  4      p \        VP                  4      p\
        P                  ! 4       pV\        8w  dL   \        RVV\        R7       \        VP                  \        R7       \        VP                  \        RRR7       \        Vn        \        VP                  n        \
        P                  ! 4       V,
          p\        V P                  RR4      pVe   VP                  R	WRR
7       \        RVV\        \        VR,          ^4      R7       R#   \         d    Rp ELi ; i)zAReturn a processed weight-only module to CPU before finalization.ræ   NÚweight_only_quant_to_cpu_startr  rü   Trý   Úquant_region_timerÚweight_only_move_to_cpu©ÚsourceÚ!weight_only_quant_to_cpu_completeç     @�@)ré   r  rÛ   Úduration_ms)r\   rª   r   ré   r  ÚtimeÚperf_counterr   r   r'   r    rÛ   r<   ÚrecordÚround)rH   rú   Úmodule_labelr  ÚstartÚdurationÚtimers   &&     r7   Ú_move_named_module_to_cpuÚ*WeightOnlyLooper._move_named_module_to_cpu•  s  € ô ˜u k°5·:±:Ó>ˆð	#Ü(¨¯©Ó6ˆOô ×!Ò!Ó#ˆØœcÔ!Ü!Ø0Ø#Ø /Ü!õ	ô �E—L‘L¬Õ-Ü# E§L¡L´#ÀtÐZ^Õ_ä!ˆÔÜ%(ˆ�‰Ô"ä×$Ò$Ó&¨Õ.ˆÜ˜Ÿ™Ð)=¸tÓDˆØÒØ�L‰LÐ2°HˆLÔRÜØ/ØØ+ÜÜ˜h¨Õ/°Ó3÷	
øô+ ô 	#Ø"‹Oð	#ús   ™D* Ä*D;Ä:D;c               ó$   € V ^8„  d   QhRRRRRR/# )r1   rú   r   rÛ   rä   rW   zUTuple[NamedModule, Optional[RTNConfig | GGUFConfig | FP8Config | BitsAndBytesConfig]]r5   )r6   s   "r7   r8   r9   ¸  s)   € ÷ "ñ "àð"ð $ð"ð 
_ñ	"r:   c                óä   € V P                  W4       \        V4      ;_uu_ 4        V P                  P                  WR7      pRRR4       V P	                  V4       VX3#   + '       g   i     L%; i)zARun one module's weight-only quantization on its assigned device.rü   N)r  r   r3   Úquantize_moduler  )rH   rú   rÛ   Úactive_qcfgs   &&& r7   Ú_quantize_named_moduleÚ'WeightOnlyLooper._quantize_named_module¸  s[   € ð 	×3Ñ3°EÔIÜ˜×&Õ&ØŸ.™.×8Ñ8¸Ð8ÓUˆK÷ 'à×&Ñ& uÔ-Ø�kÐ!Ð!÷ '×&ús   ¥AÁA/	c               ó$   € V ^8„  d   QhRRRRRR/# )r1   rú   r   r  ú7RTNConfig | GGUFConfig | FP8Config | BitsAndBytesConfigrW   rP   r5   )r6   s   "r7   r8   r9   Æ  s)   € ÷ 1ñ 1àð1ð Mð1ð 
ñ	1r:   c                ó¤  € \        VRVP                  4      p \        VP                  4      pV\
        8w  d   V P                  V4       M \
        Vn        \
        VP                  n        \        P                  ! 4       p\        RV\        VRR4      R7        \        R\        VR7      ;_uu_ 4        V P                  P                  VV P                  VR7       RRR4       V P!                  V4       \        P                  ! 4       V,
          p\        V P                  R	R4      pVe   VP#                  RWcR
7       \        RV\        VRR4      \%        VR,          ^4      R7       V P&                  ;_uu_ 4        \
        V P(                  V&   RRR4       V#   \         d    Rp ELi ; i  + '       g   i     LÜ; i  \        P                  ! 4       T,
          p\        T P                  R	R4      pTe   TP#                  RYcR
7       \        RT\        TRR4      \%        TR,          ^4      R7       i ; i  + '       g   i     T# ; i)zHMove a quantized module back to CPU, pack it, and optionally offload it.ræ   NÚ$weight_only_submodule_finalize_startrS   rè   Úweight_only_submodule_finalize)Úloggerr�   )Úqcfgr	  r  Ú'weight_only_submodule_finalize_completer  )ré   rÛ   r  )r\   rª   r   ré   r  r   r  rÛ   r  r  r   r   r^   r3   Úsubmodule_finalizer<   Ú_offload_quantized_moduler  r  rF   rC   )rH   rú   r  r  Úcurrent_devicer  r  r  s   &&&     r7   Ú_finalize_quantized_moduleÚ+WeightOnlyLooper._finalize_quantized_moduleÅ  sõ  € ô ˜u k°5·:±:Ó>ˆð	"Ü'¨¯©Ó5ˆNð œSÔ Ø×*Ñ*¨5Õ1ä"%ˆEÔÜ),ˆE�L‰LÔ&ä×!Ò!Ó#ˆÜØ2ØÜ! +¨x¸Ó>õ	
ð
	ÜÐ @ÌÐZf×gÖgØ—‘×1Ñ1ØØ—O‘OØ$ð 2ô ÷ hð ×*Ñ*¨5Ô1ä×(Ò(Ó*¨UÕ2ˆHÜ˜DŸO™OÐ-AÀ4ÓHˆEØÒ Ø—‘Ð=¸x�Ô]Ü!Ø9Ø#Ü% k°8¸TÓBÜ! (¨VÕ"3°QÓ7õ	ð ×$×$Ó$Ü47ˆD×#Ñ# LÑ1÷ %àÐøôI ô 	"Ø!‹Nð	"ú÷ h×gûô ×(Ò(Ó*¨UÕ2ˆHÜ˜DŸO™OÐ-AÀ4ÓHˆEØÒ Ø—‘Ð=¸x�Ô]Ü!Ø9Ø#Ü% k°8¸TÓBÜ! (¨VÕ"3°QÓ7ö	ú÷ %Ö$àÐúsB   ™F ÂG Â4)F1ÃG Å?H>ÆF.Æ-F.Æ1G	Æ<G ÇA7H;È>I	c               ó    € V ^8„  d   QhRRRR/# )r1   r  r!  rW   rä   r5   )r6   s   "r7   r8   r9   ù  s   € ÷ 	ñ 	àLð	ð 
ñ	r:   c                óð   a€ \        \        VRR4      4      oSeW   \        ;QJ d)    V3R lV P                   4       F  '       g   K   RM	  RM! V3R lV P                   4       4      '       d   S# \        # )z0Resolve the worker device for one finalize task.rS   Nc              3  ó.   <"  € T F
  pSV8H  x € K  	  R # 5irì   r5   )rí   rS   rÛ   s   & €r7   rï   Ú;WeightOnlyLooper._finalize_target_device.<locals>.<genexpr>   s   øé € Ð,gÑSfÈ¨]¸fÖ-DÓSfùs   ƒTF)r   r\   rô   rA   r   )rH   r  rÛ   s   &&@r7   Ú_finalize_target_deviceÚ(WeightOnlyLooper._finalize_target_deviceù  sW   ø€ ô .¬g°kÀ8ÈTÓ.RÓSˆØÒ$¯«Ô,gÐSW×SfÒSfÓ,g¯¯ªÔ,gÐSW×SfÒSfÓ,g×)gÒ)gØ Ð Üˆ
r:   c               ó    € V ^8„  d   QhRRRR/# )r1   Úquantized_modulesúQList[Tuple[NamedModule, RTNConfig | GGUFConfig | FP8Config | BitsAndBytesConfig]]rW   r�   r5   )r6   s   "r7   r8   r9     s"   € ÷ U ñ U àlðU ð 
ñU r:   c                ó.  a aaa€ V'       g   R# V UUu. uF  w  r#W#S P                  V4      3NK  	  pppV UUu0 uF  w   rVVP                  VP                  3kK   	  ppp\        V4      ^8„  ;'       d    \        V4      ^8„  p\        V4      o\        P                  \        S4      4      P                  4       P                  RR7      o\        V UUu0 uF%  w  p p\        VRR4      f   K  \        VRR4      kK'  	  upp4      p	\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      p
RpV	'       dc   RP                  R	 V	R
,           4       4      p\        V	4      ^8”  d
   VR,          pV
'       d   RMRp\        V	4      ^8X  d   RMRpV RV V 2pM
V
'       d   RpSP                  V RS 24      P                  R4      P                  4        ^ oR VVVV 3R llp\!        R\        V4      V UUu. uF  w   rVVNK
  	  uppVR7        V'       g:   V F   w  r#pS P#                  W#4      pV! VV4       K"  	   SP%                  4        R# V UUUu/ uF*  w  r#p\&        P(                  ! VS P"                  VV4      VbK,  	  pppp\+        V4       F%  pVV,          pVP-                  4       pV! VV4       K'  	  SP%                  4        R# u uppi u uppi u uppi u uppi u upppi   SP%                  4        i ; i)zPFinalize one subset, using the device pool when multiple finalize targets exist.NF©Úshow_left_stepsÚlayer_indexc              3  óH   "  € T F  w  p p\        VR R4      RJ x € K  	  R# 5i)r9  N)r\   )rí   rú   Ú_s   &  r7   rï   Ú<WeightOnlyLooper._finalize_subset_modules.<locals>.<genexpr>   s(   é € ÐmÑ^lÉ{ÈuÐVWÐYZœw u¨m¸TÓBÀdÕJÓ^lùs   ‚ "TúLayer ?z, c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5irì   )rP   )rí   Úidxs   & r7   rï   r<  #  s   é € Ð%KÑ:J°3¤c¨#§h hÓ:Jùs   ‚:Né   Nz, ...z, ?Ú ÚLayerÚLayersrt   z Submodule finalize 0/zWaiting for completions...c               ó$   € V ^8„  d   QhRRRRRR/# )r1   rú   r   r  rP   rW   r�   r5   )r6   s   "r7   r8   Ú?WeightOnlyLooper._finalize_subset_modules.<locals>.__annotate__2  s'   € ÷ 		Jñ 		J¨kð 		JÈð 		JÐQUñ 		Jr:   c                ó  <€ S^,          o\        V RR4      pVe   RV 2MRpSP                  4        SP                  V RS RS 24      P                  SP                  P                  4        RV 24      P                  4        R# )é   r9  NzLayer r=  z
 Finalize Ú/z: )r\   ÚnextÚtitleÚsubtitler3   rª   Údraw)rú   r  Ú	layer_idxÚlayer_labelÚ	completedÚfinalize_countÚfinalize_pbrH   s   &&  €€€€r7   Ú_advance_finalize_progressÚMWeightOnlyLooper._finalize_subset_modules.<locals>._advance_finalize_progress2  s‡   ø€ ð ˜�NˆIÜ  }°dÓ;ˆIØ2;Ò2G˜F 9 +Ñ.ÈYˆKØ×ÑÔØ×ÑØ�-˜z¨)¨°A°nÐ5EÐFóç‰h˜$Ÿ.™.×-Ñ-Ó/Ð0°°<°.ÐAÓBÇ4Á4Æ6r:   Úweight_only_finalize_subset)Úmodule_countÚtarget_devicesÚparallel)r1  rË   Úindexr]   r^   ÚpbÚrangeÚmanualr¹   Úsortedr\   rô   ÚjoinrJ  rK  rL  r   r+  Úcloser	   Úsubmitr   Úresult)rH   r4  rú   r  Úfinalize_tasksr;  rÛ   Úunique_targetsÚuse_parallel_finalizeÚknown_layersÚincludes_unknownÚlayer_headingÚsample_layersÚsuffixr•   rR  Ú_target_devicer  Ú
future_mapÚfuturerO  rP  rQ  s   f&                  @@@r7   Ú_finalize_subset_modulesÚ)WeightOnlyLooper._finalize_subset_modules  s  û€ ÷ !Ùñ '8ô
á&7Ñ"�ð  ×!=Ñ!=¸kÓ!JÓKÙ&7ð 	ñ 
ñ (6ô
á'5Ñ#��1ð ×Ñ ×!4Ñ!4Ó5Ù'5ð 	ñ 
ô !$ NÓ 3°aÑ 7× SÐ S¼CÀÓ<OÐRSÑ<SÐä˜^Ó,ˆÜ—f‘fœU >Ó2Ó3×:Ñ:Ó<×@Ñ@ÐQVÐ@ÓWˆÜñ $2ôá#1‘K�E˜1˜aÜ˜5 -°Ó6ô 4”˜˜}¨dÖ3Ù#1òó
ˆ÷ ›3ÑmÑ^lÓmŸ3Ÿ3š3ÑmÑ^lÓmÓmÐØ!ˆßØ ŸI™IÑ%K¸,ÀrÖ:JÓ%KÓKˆMÜ�<Ó  1Ô$Ø Õ(�ß.‘U°BˆFÜ # LÓ 1°QÔ 6‘W¸HˆFØ%˜h a¨ °v°hÐ?‰MßØ%ˆMà×ÑØˆoÐ3°NÐ3CÐDó	
ç
‰(Ð/Ó
0·±´àˆ	÷		Jó 		Jô 	Ø)Ü˜^Ó,ÙESÔTÁ^Ñ.A¨a°›MÁ^ÒTØ*õ		
ð	 ß(Û:HÑ6�E¨Ø#'×#BÑ#BÀ5Ó#V�LÙ.¨u°lÖCñ ;Ið ð  ×ÑÖñ :Hõñ :HÑ5�E¨ô #×)Ò)Ø!Ø×3Ñ3ØØó	ð
 òñ :Hð ò ô ' zÖ2�Ø" 6Õ*�Ø%Ÿ}™}›�Ù*¨5°,Ö?ñ 3ð
 ×ÑÖùóY
ùó
ùóùóL Uùôøð ×ÑÕúsF   ”K#º$K)ÃK/
Ã0K/
È	K5È"L È*&L É#L É)0K;Ê8L Ë;L ÌLc               ó    € V ^8„  d   QhRRRR/# )r1   Únamed_moduleszList[NamedModule]rW   r5  r5   )r6   s   "r7   r8   r9   [  s   € ÷ &
ñ &
à(ð&
ð 
[ñ&
r:   c           
     óŒ  € / pV Uu. uF  pW0P                  V\        4      3NK  	  ppV'       g   . # \        V P                  4      ^8:  g   \        V4      ^8:  d5   V F-  w  r5V P	                  W54      w  rgVf   K  Wg3W&P
                  &   K/  	  MpV UUu/ uF)  w  r5\        P                  ! VV P                  VV4      VbK+  	  ppp\        V4       F*  p	V	P                  4       w  rgVf   K  Wg3W&P
                  &   K,  	  V Uu. uF(  pVP
                  V9   g   K  W#P
                  ,          NK*  	  up# u upi u uppi u upi )z;Quantize one subset, using multiple devices when available.)
r÷   r   r]   rA   r  ræ   r	   r_  r   r`  )
rH   ro  Úresults_by_namerú   Ú
task_specsrÛ   Ú	quantizedr  rj  rk  s
   &&        r7   Ú_quantize_subset_modulesÚ)WeightOnlyLooper._quantize_subset_modules[  sk  € ð suˆñ 'ó
á&�ð ×8Ñ8¸ÄÓDÓEÙ&ð 	ð 
÷ ØˆIäˆt×"Ñ"Ó# qÔ(¬C°
«O¸qÔ,@Û(2Ñ$�Ø)-×)DÑ)DÀUÓ)ZÑ&�	ØÔ*Ø<EÐ;S�O×$7Ñ$7Ó8ò )3ñ -7ôñ -7Ñ(�Eô #×)Ò)Ø!Ø×/Ñ/ØØ!ó	ð
 òñ -7ð ñ ô ' zÖ2�Ø)/¯©«Ñ&�	ØÔ*Ø<EÐ;S�O×$7Ñ$7Ó8ñ 3ñ 'ó
á&�Ø�‰ /Ñ1ô -ˆOŸO™O×,Ð,Ù&ñ
ð 	
ùò7
ùóùò
s   ‡ D6Â/D;ÄEÄEc               ó4   € V ^8„  d   QhRRRRRRRRR	R
RRRR/# )r1   Úlayer_moduleztorch.nn.ModulerÈ   rÉ   r9  ÚintÚ
layer_pathr‘   r�   rP   Úis_lm_head_moduler‰   rW   zOptional[NamedModule]r5   )r6   s   "r7   r8   r9   ƒ  sR   € ÷ ñ ð &ðð )ð	ð
 ðð "ðð ðð  ðð 
ñr:   c               ó$  € VP                  V4      pVf?   \        W4      w  rxVf.   V P                  P                  '       d   \	        RV R24      hR# \        V\        4      '       d   V# V'       d   TMV RV 2p	\        VVV	VR7      p
W¢V&   V
# )zDResolve a quantizable submodule and normalize it into a NamedModule.Nzlayer module item `z5` not found in model, please check your model config.rs   ©rª   ræ   r9  )rv   r&   r<   Úlayer_modules_strictrj   rh   r   )rH   rw  rÈ   r9  ry  r�   rz  rz   r;  Ú
layer_namerú   s   &$$$$$$    r7   Ú_resolve_named_moduleÚ&WeightOnlyLooper._resolve_named_moduleƒ  sž   € ð —8‘8˜KÓ(ˆØÒÜ3°LÓN‰KˆHØÒØ—?‘?×7×7Ð7Ü$Ð':¸;¸-ÐG|Ð%}Ó~Ð~Ùä�h¤×,Ò,ØˆOç$5‘[¸j¸\ÈÈ;È-Ð;Xˆ
ÜØØØ Ø#ô	
ˆð "ˆ[ÑØˆr:   c               ó    € V ^8„  d   QhRRRR/# )r1   ré   r   rW   r�   r5   )r6   s   "r7   r8   r9   £  s   € ÷ 
ñ 
°ð 
Àñ 
r:   c                óX  € \        V P                  RR4      pV'       d   \        VRR4      '       g   R# \        VRR4      pV'       g   R# \        VRR4      pV'       d&   V P                  P                  P                  V4      MTp\	        V P                  P                  VVR7       R# )zDPersist an already-quantized module to disk when offload is enabled.r[   Nr(   FÚoffload_to_disk_pathræ   ©r2   ré   Ú	disk_path)r\   r<   r2   Úget_submoduler(   )rH   ré   r`   Úoffload_pathÚmodule_full_nameÚtarget_modules   &&    r7   r)  Ú*WeightOnlyLooper._offload_quantized_module£  s“   € ä˜tŸ™Ð0AÀ4ÓHˆß¤7¨<Ð9JÈE×#RÒ#RÙÜ˜|Ð-CÀTÓJˆßÙä" 6¨;¸Ó=Ð÷  ð �O‰O×!Ñ!×/Ñ/Ð0@ÔAàð 	ô
 	Ø—/‘/×'Ñ'Ø Ø"÷	
r:   c               ó   € V ^8„  d   QhRR/# )r1   rW   ú&List[Tuple[str, torch.nn.Module, str]]r5   )r6   s   "r7   r8   r9   ¸  s   € ÷ 8ñ 8Ð*Pñ 8r:   c                óš  aa	a
€ V P                   f   . # V P                  P                  4       pV P                  P                  4       pV P                  P	                  4       pV P                  P                  4       p\        VRR4      p\        VRR4      pVe   Ve   W8w  d   Ve   WVJ d   \        R4      h. o
\        4       o\        4       o	R VV	V
3R llpV P                   \        P                  \        P                  39   d   V! VVR4       V P                   \        P                  \        P                  39   d   V! VVR4       S
# )zMReturn requested embedding modules as name, module, and display label tuples.NÚweightz–Embedding quantization does not support distinct input and output modules with a shared weight parameter. Untie the model weights before quantization.c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r1   rª   r‘   ré   zOptional[torch.nn.Module]rq   rP   rW   r�   r5   )r6   s   "r7   r8   Ú?WeightOnlyLooper._embedding_quant_targets.<locals>.__annotate__Ó  s+   € ÷ 	2ñ 	2 ð 	2Ð7Pð 	2ÐY\ð 	2Ðaeñ 	2r:   c                ó„  <€ Ve   V f   \        RV R24      h\        V\        \        4      4      '       g"   \	        R\        V4       RV R\         24      h\        VRR 4      pVe   \        V4      MR pV S9   g   VS9   d   R # SP                  V 4       Ve   SP                  V4       SP                  WV34       R # )Nzcould not find z( embeddings module in the model, exit...ú
This type(z) of zN embeddings quantization is currently not supported. SUPPORTS_MODULE_TYPES is rŽ  )
rj   rh   Útupler   ÚNotImplementedErrorrË   r\   Úidr»   rx   )rª   ré   rq   rŽ  Úweight_parameter_idÚ
seen_namesÚseen_weight_parametersÚtargetss   &&&  €€€r7   Úappend_targetÚ@WeightOnlyLooper._embedding_quant_targets.<locals>.append_targetÓ  sÊ   ø€ ØŠ~ ¢Ü  ?°5°'Ð9aÐ!bÓcÐcÜ˜f¤eÔ,AÓ&B×CÒCÜ)Ø ¤ f£ ¨e°E°7ð ;0Ü0EÐ/FðHóð ô ˜V X¨tÓ4ˆFØ06Ò0B¤" V¤*ÈÐØ�zÔ!Ð%8Ð<RÔ%RÙØ�N‰N˜4Ô Ø"Ò.Ø&×*Ñ*Ð+>Ô?Ø�N‰N˜D¨%Ð0Ö1r:   ÚinputÚoutput)r>   r<   Úget_input_embeddings_nameÚget_input_embeddingsÚget_output_embeddings_nameÚget_output_embeddingsr\   r”  r¹   r   ÚINPUTÚBOTHÚOUTPUT)rH   Ú
input_nameÚinput_moduleÚoutput_nameÚoutput_moduleÚinput_weightÚoutput_weightrš  r—  r˜  r™  s   &       @@@r7   Ú_embedding_quant_targetsÚ)WeightOnlyLooper._embedding_quant_targets¸  s4  ú€ à× Ñ Ò(ØˆIà—_‘_×>Ñ>Ó@ˆ
Ø—‘×;Ñ;Ó=ˆØ—o‘o×@Ñ@ÓBˆØŸ™×=Ñ=Ó?ˆÜ˜|¨X°tÓ<ˆÜ ¨x¸Ó>ˆàÒ"ØÒ'ØÔ)ØÒ(ØÓ-ä%ðJóð ð
 ;=ˆÜ“Uˆ
Ü!$£Ð÷	2ò 	2ð" × Ñ ¤]×%8Ñ%8¼-×:LÑ:LÐ$MÔMÙØØØôð
 × Ñ ¤]×%9Ñ%9¼=×;MÑ;MÐ$NÔNÙØØØôð
 ˆr:   c               ó    € V ^8„  d   QhRRRR/# )r1   r™  rŒ  rW   r�   r5   )r6   s   "r7   r8   r9   ò  s    € ÷ Rñ RÐ=cð RÐhlñ Rr:   c                	óÜ   € V'       g   R # V P                   P                  pVP                  f   / Vn        V F0  w  r4pVP                  VR R7      e   K  R^R^ /VP                  V&   K2  	  R # )N)ÚdefaultÚbitsÚ
group_size)r<   r[   ÚdynamicÚdynamic_get)rH   r™  r`   r�   Ú_moduleÚ_labels   &&    r7   Ú%_configure_embedding_dynamic_defaultsÚ6WeightOnlyLooper._configure_embedding_dynamic_defaultsò  si   € ßÙØ—‘×6Ñ6ˆØ×ÑÒ'Ø#%ˆLÔ Û,3Ñ(ˆK &Ø×'Ñ'¨¸TÐ'ÓBÔJØ5;¸QÀÈbÐ4Q�×$Ñ$ [Ó1ó -4r:   c               ó    € V ^8„  d   QhRRRR/# )r1   Úlayer_countrx  rW   zset[str]r5   )r6   s   "r7   r8   r9   ü  s   € ÷ ñ À3ð Èxñ r:   c          	     	óL  € \        4       p\        V4       Fò  w  pw  rgpVe9   WSn        VP                  RV R24      P	                  V4      P                  4        \        WvVR R7      p	V P                  V P                  V	.4      4       \        \        V P                  R\        4       4      4      p
V
P                  V4       W P                  n        VP                  V4       Vf   KÔ  V^,           Vn        VP                  4        Kô  	  V'       d   W P                  n        V# )NzWeight-only quantizing z embeddingsr|  Ú_embedding_replacement_prefixes)r¹   rº   Úcurrent_iter_steprJ  rK  rL  r   rl  rt  r\   r<   r»   r»  r3   r¹  )rH   r™  r¹  rY  Úquantized_namesÚtarget_indexr�   ré   rq   rú   Úprefixess   &&$$       r7   Ú_quantize_embedding_targetsÚ,WeightOnlyLooper._quantize_embedding_targetsü  só   € Ü$'£EˆÜ:CÀGÖ:LÑ6ˆLÑ6˜;°ØŠ~Ø'3Ô$Ø—‘Ð2°5°'¸ÐEÓF×OÑOÐP[Ó\×aÑaÔcÜ ÀKÐ]aÔbˆEØ×)Ñ)¨$×*GÑ*GÈÈÓ*PÔQÜœ7 4§?¡?Ð4UÔWZÓW\Ó]Ó^ˆHØ�L‰L˜Ô%Ø>F�O‰OÔ;Ø×Ñ Ô,ØŒ~Ø'3°aÕ'7�Ô$Ø—‘–	ñ ;M÷ Ø)4�N‰NÔ&ØÐr:   c                ó®  a-€ V P                   P                  p\        V\        \        \
        \        34      '       g   \        R4      hV P                  4       pV P                  '       d   V'       d   \        R4      hV'       d"   \        V\        4      '       g   \        R4      h\        V4      ;'       d    V P                  pRV P                   n        V'       d   RVn        \        P                  R4       V P!                  V4       V UUUu0 uF  w  rVqukK	  	  ppppV P                   P#                  4       ;'       g    V P                   P$                  p	V'       Eg&   VP$                  '       Ed   W˜9  Ed   V P                   P&                  P(                  P*                  '       dk   \-        V P                   P&                  P&                  R4      '       d;   V P                   P&                  P.                  p
V
 F  pW›9   g   K  \        R4      h	  \1        V P                   P&                  V	R7      pVf   \3        R
V	 R24      h\        V\5        \6        4      4      '       g   \        R\9        V4       R\6         24      h\-        V P                   P&                  P(                  R4      '       d+   V P                   P&                  P(                  P:                  MRpRV P                   P&                  P(                  n        \=        V P                   P&                  V P                   P?                  4       4      w  po-V P                   PA                  V P                   P&                  4       FJ  p\1        V P                   P&                  V4      pVf   K)  V P                   PC                  V\D        R7       KL  	  VP                  '       dp   \        P                  R4       \        V P                   P&                  V P                   PG                  V P                   P&                  R7      VPH                  R7       V P                   PK                  V P                   P&                  P(                  VRRR7      p\M        V P                   RR	4      p\O        V4      '       d+   V! V P                   P&                  P(                  RRR7      pMTpVPP                  '       g   \S        V. 4      .p\U        V4      p\        V'       * ;'       d    VP$                  ;'       d    W˜9  4      pV'       d   \U        V4      M"V\U        V4      ,           V'       d   ^M^ ,           p\        PW                  \Y        V4      4      P[                  4       P]                  ^R7      pVP_                  RV R24       VV P`                  n1        VV P`                  n+        R	p\M        VRR	4      '       d(   \e        V P                   Pf                  VR	R	R	R	R	^R7      p \i        \4        ;QJ d     . V-3R l\Y        V4       4       F  NK  	  5M! V-3R l\Y        V4       4       4      V'       d   \k        RVV	4      3MR/,           4      pV P                  Pm                  \o        VV P                   V P`                  3/ V 4      4      pV Pq                  VVVR7       V'       dÇ   V P`                  Ps                  4       V P`                  P                  /pV P`                  P                  V P                   n:        V P`                  Pw                  V P                   R7       RV P                   n        TVe   VPy                  4        WÐP                   P&                  P(                  n        # \{        V P                   P                  VS-VR7      p\Y        \U        V4      V4       EF  pV\U        V4      ,
          pVV8  d   K  VV8¬  pV'       g6   Ve2   VV8”  d+   \        P}                  R VV4       VPy                  4         EM¨V'       d'   \1        V P                   P&                  V	R7      pV	..p MVV,          pTp \        S-V4      p!V'       d   R	p!VeO   V'       d   R!MR"V R#V^,
           2p"VVn@        VP_                  V"4      Pƒ                  R$4      P…                  4        V P                   P‡                  V4      pV'       go   V P                   P&                  P(                  Pˆ                  p#V#\Š        9   d5   \Š        V#,          p$V$! VV P                   P&                  P(                  4      pVVV&   \�        V4       \�        TV'       d   T	MR$R%7      p%V'       d   R	MTp&V P‘                  V%V&R&7      p'V P`                  P“                  V4       V  EFF  p(. p)V( EF  pV P•                  VV%VX!VVR'7      p*V*f   K!  V P`                  P—                  V*4      '       d   KD  V'P™                  V4      p+V+e(   V+V*Pš                  R(&   \�        R)V*Pž                  V+R*7       Ve…   VP¡                  V*4       \        V*Pš                  P™                  R+4      \¢        4      '       dE   V P                   P¥                  V*P¦                  \D        R,V*R-7      p,V,V*P¦                  Jd   V,V*nS        V)P©                  V*4       EK  	  V P«                  V P­                  V)4      4       EKI  	  \M        V P                   P                  R.R4      '       d   V'       g   VVV&   MBV'       d   V P                   P¯                  V4       MV P                   P¯                  V4      VV&   V P                  P±                  VP²                  V,          4       Vf   EKæ  V^,           Vn@        VP…                  4        EK  	  Ve   VPy                  4        WÐP                   P&                  P(                  n        V P`                  Ps                  4       V P`                  P                  /pV P`                  P                  V P                   n:        V P`                  Pw                  V P                   R7       V# u upppi   Te   TPy                  4        YÐP                   P&                  P(                  n        i ; i)0zCQuantize layers directly from weights without calibration forwards.zhWeight-only looper only supports `RTNConfig`, `GGUFConfig`, `FP8Config`, and `BitsAndBytesConfig` today.z=weight-only boundary extensions do not yet support embeddingszXWeight-only input/output embeddings fast quantization currently supports RTNConfig only.Fz[`embed_only` does not support `offload_to_disk=True`; setting `offload_to_disk` to `False`.Ú_tied_weights_keyszƒquantization of `lm_head` layer with `tied_weights=True` model state is not supported. Please check model has `tied_weights=False`.)rõ   Nzcould not find layer z in the model, exit...r’  zO) of lm_head quantization is currently not supported. SUPPORTS_MODULE_TYPES is Ú	use_cache)Útarget_submodulerS   z"Offloading base modules to disk...)r2   r„  )Úmodel_configr[   Úis_awq_quantizeÚinclude_capture_onlyÚfull_layer_modules)rÆ  rÇ  rÈ  r7  zWeight-only quantization (z layers)Úpreprocessors)Ú	tokenizerr&  ÚcalibrationÚprepare_dataset_funcÚcalibration_concat_sizeÚcalibration_sortÚcalibration_concat_separatorÚ
batch_sizec           	   3  óR   <"  € T F  p\        R V\        SV4      4      x € K  	  R# 5i)ÚlayerN)r-   r#   )rí   rX  Úlayer_namess   & €r7   rï   Ú(WeightOnlyLooper.loop.<locals>.<genexpr>†  s+   øé € ð "á/�Eô ˜ %¬¸ÀUÓ)K×LÐLÛ/ùs   ƒ$'Úlm_head)r¹  rY  T)Úlayer_modulesrÔ  r¹  z;StageLayer: early stop at layer=%s, last_quantized_layer=%szWeight-only quantizing lm_headzWeight-only quantizing layer z of rA  )rª   )rÈ   r¶   )rw  rÈ   r9  ry  r�   rz  rê   Ú%weight_only_strategy_preferred_devicerè   Úauto_module_decoderÚquant_source)rÅ  rS   Úrolerâ   r(   r5   )Zr<   r[   rh   r   r   r   r   r”  r«  r=   r‰   r?   Ú'_model_free_weight_only_embeddings_onlyr(   r^   rÒ   r¶  r   rÖ  r2   ÚconfigÚtie_word_embeddingsÚhasattrrÃ  r%   rj   r“  r   rË   rÄ  r$   Úextract_layers_nodeÚ$get_modules_with_direct_meta_tensorsÚshell_direct_meta_materializer   Úget_base_modulesrƒ  Úsimple_layer_modulesr\   ÚcallableÚtrue_sequentialÚsumr]   rY  rZ  r[  r¹   rJ  r3   r¹  r
   rË  r,   r-   r  r*   rÀ  rª   Ú	quant_logÚfinalizer^  r   Údebugr#   r¼  rK  rL  Úpre_quantizeÚ
model_typer   r   r"   rß   Úcollect_memory_infor  Ú
is_skippedrv   ró   r   ræ   Ú
preprocessÚdictÚshell_module_materializeré   rx   rl  rt  Úpost_quantizeÚpublishÚsteps).rH   Úkwargsr`   Úembedding_targetsr?   rª   r´  rµ  Úembedding_target_namesÚlm_head_nameÚ	tied_keysÚitemÚlm_head_moduleÚforward_pass_use_cacheÚlayersr�   ré   r×  rÉ  r¶   r¹  Úquant_lm_head_in_loopÚtotal_layersrY  ÚpreprocessorÚplanÚ
start_stepÚ	total_logÚlast_quantized_layer_indexÚprogress_indexr9  rz  Úsubsetsr~  Úlayer_titlerì  Ú	converterrÈ   Úlayer_strategy_modulesÚlayer_strategy_device_mapÚsubset_namesÚsubset_named_modulesrú   rî   ÚpreparedrÔ  s.   &,                                           @r7   ÚloopÚWeightOnlyLooper.loop  s 
  ø€ à—‘×6Ñ6ˆÜ˜,¬´JÄ	ÔK]Ð(^×_Ò_Ü%ð?óð ð
 !×9Ñ9Ó;ÐØ�?�?ˆ?×0Ü%Ð&eÓfÐfß¤Z°¼i×%HÒ%HÜ%Øjóð ô Ð+Ó,×@Ð@°·±ˆ
ØBGˆ�‰Ô?ßØ+0ˆLÔ(Ü�H‰HÐrÔsà×2Ñ2Ð3DÔEÙDUÕ!VÑDUÑ+@¨4¸&¢$ÑDUÐÒ!VØ—‘×AÑAÓC×^Ð^ÀtÇÁ×G^ÑG^ˆßˆz˜l×2×2Ñ2°|Õ7aØ�‰×$Ñ$×+Ñ+×?×?Ð?ÄGÈDÏOÉO×LaÑLa×LgÑLgÐi}×D~ÒD~Ø ŸO™O×1Ñ1×DÑD�	Û%�DØ#Ö+Ü1ð bóð ñ &ô (¨¯©×(=Ñ(=À<ÔPˆNØÒ%Ü Ð#8¸¸ÐF\Ð!]Ó^Ð^Ü˜n¬eÔ4IÓ.J×KÒKÜ)Ø ¤ nÓ!5Ð 6ð  7Fô  G\ð  F]ð  ^óð ô �t—‘×,Ñ,×3Ñ3°[×AÒAð �O‰O×!Ñ!×(Ñ(×2Ò2àð 	ð 27ˆ�‰×Ñ×$Ñ$Ô.ä6Ø�O‰O×!Ñ!Ø�O‰O×/Ñ/Ó1ó
Ñˆ�ð
  Ÿ?™?×OÑOÐPT×P_ÑP_×PeÑPeÖfˆKÜ §¡× 5Ñ 5°{ÓCˆFØÔ!Ø—‘×=Ñ=Ø%+Üð >ö ñ gð ×'×'Ð'Ü�H‰HÐ9Ô:ÜØ—o‘o×+Ñ+Ø—‘×7Ñ7¸d¿o¹o×>SÑ>SÐ7ÓTØ&×;Ñ;õð Ÿ™×<Ñ<ØŸ™×.Ñ.×5Ñ5Ø(Ø!Ø!&ð	 =ó 
ˆô % T§_¡_Ð6JÈDÓQÐÜÐ&×'Ò'Ù%7Ø!Ÿ_™_×2Ñ2×9Ñ9Ø %Ø%*ô&Ñ"ð &3Ð"à×+×+Ð+Ü  °Ó3Ð4ˆMä˜&“kˆÜ $ØŒN×bÐb˜|×3Ñ3×bÐb¸Ñ8bó!
Ð÷
 ô Ð!Ô"àœsÐ#4Ó5Õ5×>S¹ÐYZÕ[ð 	ô
 �V‰V”E˜,Ó'Ó(×/Ñ/Ó1×5Ñ5ÀaÐ5ÓHˆØ
�‰Ð-¨l¨^¸8ÐDÔEØ%0ˆ�‰Ô"Øˆ�‰ÔØˆÜ�< °$×7Ò7Ü-ØŸ/™/×3Ñ3Ø!Ø Ø%)Ø(,Ø!%Ø-1Øô	ˆLðY	LÜŸEœEô "ä" ;Ô/ó"ŸE™Eô "ä" ;Ô/ó"ó ÷ G\”(˜9 k°<Ó@ÑBÐacõeó fˆDð Ÿ™×.Ñ.¬{Ø�d—o‘o¨¯©Ð'8¸"¸dó0ó ˆJð ×,Ñ,Ð->ÈKÐ\^Ð,Ô_ßØ!Ÿ^™^×0Ñ0Ó2°D·N±N×4FÑ4FÐG�	Ø,0¯N©N×,>Ñ,>�—‘Ô)Ø—‘×'Ñ'¨d¯o©oÐ'Ô>ØJN�—‘ÔGØ ðR Š~Ø—‘”
Ø5K�O‰O×!Ñ!×(Ñ(Õ2ôM *IØ—‘×/Ñ/Ø+Ø'Ø'ô	*Ð&ô #(¬Ð,=Ó(>À×"M�Ø,¬sÐ3DÓ/EÕE�Ø Ô+ÙØ$/°;Ñ$>Ð!÷ *Ø2Ò>Ø#Ð&@Ô@ô —I‘IØUØ#Ø2ôð
 —H‘H”JÚ÷ %Ü'¨¯©×(=Ñ(=À<ÔP�FØ ,˜~Ð.‘Gà# KÕ0�FØ+�Gä!/°¸[Ó!I�Jß$Ø!%�Jà’>÷ -ñ 9à<¸[¸MÈÈkÐ\]ÍoÐM^Ð_ð  ð
 ,:�BÔ(Ø—H‘H˜[Ó)×2Ñ2°2Ó6×;Ñ;Ô=àŸ™×5Ñ5°fÓ=�ß(ð "&§¡×!6Ñ!6×!=Ñ!=×!HÑ!H�JØ!Ô%9Ô9Ü$8¸Õ$D˜	Ù!*¨6°4·?±?×3HÑ3H×3OÑ3OÓ!P˜Ø*0�F˜;Ñ'ô " &Ô)Ü# F×AR±ÐXZÔ[�ß1B©ÐH^Ð&Ø,0×,QÑ,QØØ+Að -Ró -Ð)ð
 —‘×2Ñ2°;Ô?Ü$+�LØ>@Ð(Ü'3˜Ø $× :Ñ :Ø)/Ø!%Ø(3Ø'1Ø(3Ø.?ð !;ó !˜ð !š=Ù$ð
  Ÿ>™>×4Ñ4°U×;Ò;Ù$à+D×+HÑ+HÈÓ+UÐ(Ø+Ò7ð EU˜EŸK™KÐ(@ÑAÜ1Ø GØ',§¡Ø.>õð (Ò3Ø(×3Ñ3°EÔ:Ü)¨%¯+©+¯/©/Ð:OÓ*PÔRV×WÒWØ+/¯?©?×+SÑ+SØ5:·\±\Ü+.Ø)7Ø16ð	 ,Tó ," ð $,°5·<±<Ó#?Ø3; E¤Là,×3Ñ3°E×:ñS (4ðV ×1Ñ1°$×2OÑ2OÐPdÓ2e×fñ[ %,ôb ˜4Ÿ?™?×:Ñ:Ð<MÈu×UÒUß,Ø.4˜˜{Ñ+øß&Ø—O‘O×1Ñ1°&Õ9à*.¯/©/×*GÑ*GÈÓ*O�F˜;Ñ'Ø—‘×'Ñ'¨¯
©
°;Õ(?Ô@Ø•>Ø+9¸AÕ+=�BÔ(Ø—G‘G—Iñw #Nðz Š~Ø—‘”
Ø5K�O‰O×!Ñ!×(Ñ(Ô2à—^‘^×(Ñ(Ó*¨D¯N©N×,>Ñ,>Ð?ˆ	Ø$(§N¡N×$6Ñ$6ˆ�‰Ô!Ø�‰×Ñ d§o¡oÐÔ6ØÐùô{ "Wøðl Š~Ø—‘”
Ø5K�O‰O×!Ñ!×(Ñ(Õ2úsc   ÄrØAr Ù$D r ÞA#r à<r à>Ar âr âA(r ã:Br æA=r èD/r í r íA'r î;#r ò:s)rQ   r‡   rŠ   rC   rR   rˆ   r‹   rF   rB   rA   r?   r>   r=   r<   r3   )Nr5   )"Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rI   rT   r@   Ústaticmethodrm   r~   rG   r˜   r¬   r±   rÅ   rß   r÷   r  r  r  ÚtorchÚinference_moder+  r1  rl  rt  r  r)  r«  r¶  rÀ  r  Ú__static_attributes__r5   r:   r7   r/   r/   E   sæ   † ÙN÷.ò(
õRð. ô
&ó ð
&õ!õF{ð. ô	/ó ð	/ð ô%ó ð%ð ô,ó ð,õ
(õTM!õ^(õT
õ&!
õF"ð ×ÒÓô1ó ð1õf	õU õn&
õPõ@
õ*8õtRõö&Tr:   r/   )Ir  Ú
__future__r   rÐ   rD   r  Úconcurrent.futuresr   Útypingr   r   r   r   r  Ú defuser.modeling.replace_modulesr   rA  r	   Úlooper.module_preprocessorr
   Úlooper.weight_only_processorr   Úlooper.named_moduler   Úmodelsr   Úmodels._constr   r   Únn_modules.converterr   Úquantization.configr   r   r   r   r   r   r   Úutilsr   Úutils.devicer   Úutils.device_telemetryr   Úutils.loggerr   r   Úutils.looper_helpersr   r   r   r    r!   Úutils.modelr"   r#   r$   r%   r&   r'   Úutils.offloadr(   Úexecution_stater)   Ú	extensionr*   r+   r,   r-   r^   r/   Ú__all__r5   r:   r7   Ú<module>r.     sž   ðñõ #ã 	Û Û Ý +ß .Ó .ã Ý >å !Ý ;Ý >Ý -Ý ß 6Ý 7÷÷ ñ õ %Ý %Ý :ß 7÷õ ÷÷ õ ,Ý 2ß FÓ Fñ ƒn€ô^Ð,ô ^ðB Ð
‚r:   