
    |jL1                         d dl Z d dlZd dlZd dlmZ  eeej        d          Z G d d          Zd Z	d Z
d	 Zd
 Zd ZddZdS )    N)
get_loggerz&%(asctime)s-%(levelname)s: %(message)s)fmtc                   &    e Zd Zd Zd Zd Zd ZdS )OperatorStatsUnitc                 L    d | _         d| _        d| _        d| _        d| _        d S )Nr   )op_type
fp32_calls
fp16_calls
bf16_callsother_callsselfs    k/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/static/amp/debugging.py__init__zOperatorStatsUnit.__init__   s,        c                    || j         dz   | _         d S |t          j        k    r| j        dz   | _        d S |t          j        k    r| j        dz   | _        d S |t          j        k    r| j        dz   | _        d S | j         dz   | _         d S )N   )r   paddlefloat32r	   float16r
   bfloat16r   )r   dtypes     r   updatezOperatorStatsUnit.update"   s    =#/!3D&&"&/A"5&.(("&/A"5&/))"&/A"5#'#3a#7   r   c                     | xj         |j         z  c_         | xj        |j        z  c_        | xj        |j        z  c_        | xj        |j        z  c_        d S N)r	   r
   r   r   )r   anothers     r   addtozOperatorStatsUnit.addto/   sX    7--7--7--G//r   c                 6    | j         | j        | j        | j        gS r   )r
   r   r	   r   r   s    r   convert_to_listz!OperatorStatsUnit.convert_to_list5   s!    OOO	
 	
r   N)__name__
__module____qualname__r   r   r   r    r   r   r   r      sP          8 8 80 0 0
 
 
 
 
r   r   c                 
   | t           j        j        j        j        j        t           j        j        j        j        j        t           j        j        j        j        j        t           j        j        j        j        j        fv rdS dS )NTF)	r   basecoreVarDescVarTypeFP64FP32FP16BF16r   s    r   _is_floating_pointr.   >   sd     (- (- (- (-	   tur   c           	      ~   |r|                     |          n|                    |          }t          |t                    sJ t	          |          dk    rd S |d         }	 |                     |          }|j        S #  t                              d	                    |j
        |rdnd||                     Y d S xY w)Nr   z*Operator < {} > gets {} < {} : {} > error!inputoutput)r0   r1   
isinstancelistlen_var_recursiver   _loggerwarningformattype)blockoparg_nameis_input	var_namesvar_namevars          r   _get_var_dtype_from_blockrA   J   s    &.G"""BIIh4G4GIi&&&&&
9~~t|H	""8,,y8??H:(Hh 	
 	
 	

 tts   "A> >;B<c           
         d }d }| j         D ]}t          || |d          }|||}||k    rct          |          rCt          |          r4t                              d| j         d| j          d| j         d           tt          |          r|}| j        D ]s}t          || |d          }|||}||k    rQt          |          rBt          |          r3t                              d| j         d| j          d| j         d           t|S )NTzOperator < z1 > has different input data types, input_names = z, output_names = .Fz: > has different input / output data types, input_names = )input_namesrA   r.   r6   r7   r9   output_names)r;   r:   r?   compute_dtypein_name	var_dtypeout_names          r   _extract_compute_dtyperJ   ]   s   HM> . .-eR$GG	 %MM	))%m44 
.9K: : 
. OO Tbg  T  T`b`n  T  T  BD  BQ  T  T  T    (	22 . %.MO  -eR5II	  &MM	))%m44 9K: :  OO ]bg  ]  ]ikiw  ]  ]  KM  KZ  ]  ]  ]   r   c                     i }| D ]e}|                                 D ]N\  }}|                    |d           t          j        |          ||<   3||                             |           Of|S r   )itemsgetcopyr   )op_stats_listmerged_op_stats_dicteach_op_stats_dictr   units        r   _merge_op_statsrS      s    + : :/5577 	: 	:MGT#''66>04	$$W--$W-33D9999		:
  r   c                    d }g }| j         D ]}i }|j        D ]}|                    |j        d           t	                      }|||j        <   n||j                 }|j        dv rd }nO ||j                  rt          ||dd          }n,d|j        v rt          ||dd          }nt          ||          }|                    |           |	                    |           |S )Nc                 N    g d}| |v rdS |                      dd          |v rdS dS )N)cast
batch_norminstance_norm
layer_normT_grad F)replace)r   special_op_lists     r   _is_special_ops_with_input_xz8_get_op_stats_list.<locals>._is_special_ops_with_input_x   s@    OOOo%%4??7B''?::4ur   )create_py_readerreadcreate_double_buffer_readerXTParamr-   )
blocksopsrM   r9   r   rA   rD   rJ   r   append)programr^   rO   r:   block_op_stats_dictr;   rR   rF   s           r   _get_op_stats_listri      s4      M 2 2 ) 	- 	-B"&&rw55=(**/3#BG,,*273w   
 !%--bg66 	B 9%S$ O OBN** 92w! ! !7r5 A AKKmK,,,,01111r   Fc           	      ^   d }| t           j                                        } t          |           }t	          |          }|rt          |          dk    rt          t          |                    D ]j}t          d                    dt          |          z   dz                        t           j
        j                             |||                              kt          d                    d                     t           j
        j                             ||                     dS )a
  
    Collect the number of operators for different data types through parsing
    the program. The statistical data are categorized according to four data
    types, namely float32, float16, bfloat16 and others.

    Args:
        program(Program, optional): The program to parse. Default None, and the default main_program will be parsed.
        print_subblocks(bool, optional): Whether to print the operator stats for each subblock. Default False.

    Examples:

        .. code-block:: python

            >>> import paddle
            >>> paddle.enable_static()

            >>> class SimpleConvNet(paddle.nn.Layer):
            ...     def __init__(self):
            ...         super().__init__()
            ...         self.conv = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=3)
            ...         self.linear = paddle.nn.Linear(in_features=26, out_features=10)
            ...
            ...     def forward(self, x):
            ...         out = self.conv(x)
            ...         out = paddle.nn.functional.relu(out)
            ...         out = self.linear(out)
            ...         out = paddle.nn.functional.softmax(out)
            ...         return out

            >>> main_program = paddle.static.Program()
            >>> startup_program = paddle.static.Program()
            >>> with paddle.utils.unique_name.guard():
            ...     with paddle.static.program_guard(main_program, startup_program):
            ...         model = SimpleConvNet()
            ...         x = paddle.static.data(
            ...             name='input', shape=[None, 1, 28, 28], dtype='float32'
            ...         )
            ...         out = model(x)
            ...         loss = paddle.mean(out)
            ...         optimizer = paddle.optimizer.AdamW()
            ...         optimizer = paddle.static.amp.decorate(optimizer)
            ...         optimizer.minimize(loss)
            >>> paddle.static.amp.debugging.collect_operator_stats(main_program)
            <------------------------------------------------ op list of all blocks ------------------------------------------------->
            <------------------------------------------------------- op list -------------------------------------------------------->
            <--------------- Op Name ---------------- | -- FP16 Calls --- | -- BF16 Calls --- | --- FP32 Calls--- | -- Other Calls -->
            adamw                                   |  0                |  0                |  4                |  0
            cast                                    |  5                |  0                |  6                |  0
            check_finite_and_unscale                |  0                |  0                |  1                |  0
            conv2d                                  |  1                |  0                |  0                |  0
            conv2d_grad                             |  1                |  0                |  0                |  0
            elementwise_add                         |  2                |  0                |  0                |  0
            elementwise_add_grad                    |  2                |  0                |  0                |  0
            elementwise_mul                         |  0                |  0                |  1                |  0
            elementwise_mul_grad                    |  0                |  0                |  1                |  0
            fill_constant                           |  0                |  0                |  1                |  0
            matmul_v2                               |  1                |  0                |  0                |  0
            matmul_v2_grad                          |  1                |  0                |  0                |  0
            memcpy                                  |  0                |  0                |  0                |  1
            reduce_mean                             |  0                |  0                |  1                |  0
            reduce_mean_grad                        |  0                |  0                |  1                |  0
            relu                                    |  1                |  0                |  0                |  0
            relu_grad                               |  1                |  0                |  0                |  0
            reshape2                                |  0                |  0                |  1                |  0
            reshape2_grad                           |  0                |  0                |  1                |  0
            softmax                                 |  0                |  0                |  1                |  0
            softmax_grad                            |  0                |  0                |  1                |  0
            update_loss_scaling                     |  0                |  0                |  1                |  0
            <----------------------------------------------------- op count: 22 ----------------------------------------------------->
    c                 h    |                                  D ]\  }}|                                | |<   | S r   )rL   r   )op_stats_unit_dictkeyvalues      r   _convert_to_listz0collect_operator_stats.<locals>._convert_to_list  sA    ,2244 	> 	>JC&+&;&;&=&=s##!!r   Nr   z
<{:-^120}>z op list of block  z op list of all blocks )r   staticdefault_main_programri   rS   r4   rangeprintr8   stramp	debugging_print_operator_stats)rg   print_subblocksro   rO   merged_op_statsis         r   collect_operator_statsr|      s5   P" " "
 -4466&w//M%m44O 3}--11s=))** 	 	A,%%&:SVV&Cc&IJJKKKJ 66  q!122    
,

7
8
8999
J..))    r   )NF)rN   loggingr   paddle.base.log_helperr   r    INFOr6   r   r.   rA   rJ   rS   ri   r|   r#   r   r   <module>r      s       - - - - - -
*gl H  
!
 !
 !
 !
 !
 !
 !
 !
H	 	 	  &* * *Z     & & &R[ [ [ [ [ [r   