o
    ü* i  ã                   @   s\   d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 ddlmZ dd	„ ZdS )
é    )Ú
MethodTypeN)Ú_C_opsÚ_legacy_C_ops)Úfleet)Úcoreé   )ÚParallelModec                 C   s.   dd„ }t j }|j ¡ tjurt|| ƒ| _| S )Nc                 S   sð  | j sd S g }g }g }g }t|dd ƒrmt|jd tƒrm|jD ]M}|d D ]F}d }t|dƒr6|jd ur6|j}n|jd ur>|j}|d urj| |¡ |j	t
jjjtjfv rX| |¡ q$|j	tjfv re| |¡ q$| |¡ q$qntjj}	|	jd j}
|
r¢t|dƒs€J ‚t|dƒs‡J ‚|jrd|_|jD ]}| ¡  qt|d	ƒsžJ ‚|j}n|j}|D ]F}d }t|dƒr¹|jd ur¹|j}n|jd urÁ|j}|d urí| |¡ |j	t
jjjtjfv rÛ| |¡ q§|j	tjfv rè| |¡ q§| |¡ q§t t dg¡ tj¡¡}t t dg¡ tj¡¡}t t dg¡ tj¡¡}| j| _ t!|ƒr/t" #|| j$||¡ t% &| j |¡| _ t!|ƒrEt" #|| j$||¡ t% &| j |¡| _ t!|ƒr[t" #|| j$||¡ t% &| j |¡| _ | j  'd
¡| _ tj(j)| j tj(j*j+d d | j  'd¡| _ d S )NÚ_param_groupsr   ÚparamsÚ	main_gradZsharding_configsÚ_comm_buffersÚ_sharding_enableFÚ_local_parameter_listZint32)ÚopÚgroupÚbool),Z_enableÚgetattrÚ
isinstancer	   ÚdictÚhasattrr   ZgradÚappendZdtyper   ZVarDescZVarTypeZFP16ÚpaddleZfloat16Zbfloat16r   Z_user_defined_strategyZhybrid_configsZcomm_overlapr   r   Zscale_gradsr   Z_parameter_listZ	to_tensorÚnpÚarrayZastypeZbool_Z_temp_found_inf_value_falseZ
_found_infÚlenr   Zcheck_finite_and_unscaleZ_scaler   Z
bitwise_orÚcastÚdistributedZ
all_reduceZReduceOpÚMAX)ÚselfZ	optimizerZparam_gradsZparam_grads_bf16Zparam_grads_fp16Zparam_grads_fp32r   ÚparamZtgt_gradZstrategyZsharding_stage_1_overlapÚbufferÚ
parametersZtemp_found_inf_fp16Ztemp_found_inf_bf16Ztemp_found_inf_fp32© r"   úk/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/distributed/fleet/scaler.pyÚunscale_method   sÖ   
ÿ
ÿ


þÿ
€ëÿÿþ



þÿ
€
üÿ
üÿ
üÿÿz*distributed_scaler.<locals>.unscale_method)r   Z_hcgZget_parallel_moder   ZDATA_PARALLELr   Z_unscale)Zscalerr$   Z	fleet_envr"   r"   r#   Údistributed_scaler   s
   zr%   )Útypesr   Únumpyr   r   r   r   Zpaddle.distributedr   Zpaddle.frameworkr   Zbase.topologyr   r%   r"   r"   r"   r#   Ú<module>   s   