Ë
    éÓ^j}  ã                   ót   — d Z ddlZ	 ddlmZ dZddlmZ  G d„ d	«      Z G d
„ d«      Z	y# e$ r dZdZY Œ&w xY w)zE CUDA / AMP utils

Hacked together by / Copyright 2020 Ross Wightman
é    N)ÚampTFé   )Údispatch_clip_gradc                   ó.   — e Zd ZdZ	 	 	 	 	 dd„Zd„ Zd„ Zy)Ú
ApexScalerr   Nc                 óê   — t        j                  ||«      5 }|j                  |¬«       d d d «       |r4|�!t        t        j                  |«      ||¬«       |j                  «        y y # 1 sw Y   Œ@xY w©N)Úcreate_graph)Úmode)r   Ú
scale_lossÚbackwardr   Úmaster_paramsÚstep)	ÚselfÚlossÚ	optimizerÚ	clip_gradÚ	clip_modeÚ
parametersr
   Úneed_updateÚscaled_losss	            úZ/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/utils/cuda.pyÚ__call__zApexScaler.__call__   sj   € ô �^‰^˜D )Ó,ð 	<°Ø× Ñ ¨lÐ Ô;÷	<áØÐ$Ü"¤3×#4Ñ#4°YÓ#?ÀÐQZÕ[Ø�N‰NÕð ÷	<ð 	<ús   —A)Á)A2c                 óP   — dt         j                  v rt        j                  «       S y )NÚ
state_dict)r   Ú__dict__r   ©r   s    r   r   zApexScaler.state_dict%   s    € Øœ3Ÿ<™<Ñ'Ü—>‘>Ó#Ð#ð (ó    c                 óT   — dt         j                  v rt        j                  |«       y y )NÚload_state_dict)r   r   r    ©r   r   s     r   r    zApexScaler.load_state_dict)   s!   € Ø¤§¡Ñ,Ü×Ñ 
Õ+ð -r   ©NÚnormNFT)Ú__name__Ú
__module__Ú__qualname__Ústate_dict_keyr   r   r    © r   r   r   r      s'   „ Ø€Nð ØØØØóò"$ó,r   r   c                   ó6   — e Zd ZdZdd„Z	 	 	 	 	 dd„Zd„ Zd„ Zy)	ÚNativeScalerÚ
amp_scalerc                 óâ   — 	 t         j                  j                  |¬«      | _        y # t        t
        f$ r7}t         j                  j                  j                  «       | _        Y d }~y d }~ww xY w)N)Údevice)Útorchr   Ú
GradScalerÚ_scalerÚAttributeErrorÚ	TypeErrorÚcuda)r   r-   Úes      r   Ú__init__zNativeScaler.__init__1   sO   € ð	7Ü Ÿ9™9×/Ñ/°vÐ/Ó>ˆD�LøÜ¤	Ð*ò 	7Ü Ÿ:™:Ÿ>™>×4Ñ4Ó6ˆD�L‰Lûð	7ús   ‚%( ¨A.·-A)Á)A.Nc                 ó(  — | j                   j                  |«      j                  |¬«       |re|�-|€J ‚| j                   j                  |«       t	        |||¬«       | j                   j                  |«       | j                   j                  «        y y r	   )r0   Úscaler   Úunscale_r   r   Úupdate)r   r   r   r   r   r   r
   r   s           r   r   zNativeScaler.__call__7   s~   € ð 	�‰×Ñ˜4Ó ×)Ñ)°|Ð)ÔDÙØÐ$Ø!Ð-Ð-Ð-Ø—‘×%Ñ% iÔ0Ü" :¨y¸yÕIØ�L‰L×Ñ˜iÔ(Ø�L‰L×ÑÕ!ð r   c                 ó6   — | j                   j                  «       S ©N)r0   r   r   s    r   r   zNativeScaler.state_dictJ   s   € Ø�|‰|×&Ñ&Ó(Ð(r   c                 ó:   — | j                   j                  |«       y r;   )r0   r    r!   s     r   r    zNativeScaler.load_state_dictM   s   € Ø�‰×$Ñ$ ZÕ0r   )r3   r"   )r$   r%   r&   r'   r5   r   r   r    r(   r   r   r*   r*   .   s,   „ Ø!€Nó7ð ØØØØó"ò&)ó1r   r*   )
Ú__doc__r.   Úapexr   Úhas_apexÚImportErrorr   r   r   r*   r(   r   r   ú<module>rA      sQ   ðñó ðÝØ€Hõ
 *÷,ñ ,÷: 1ò  1øðI ò Ø
€CØ‚Hðús   ˆ+ «	7¶7