Ë
    –\;j13  ã                   óŒ   — 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y)é    N)Ú
get_loggerz&%(asctime)s-%(levelname)s: %(message)s)Úfmtc                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚOperatorStatsUnitc                 óJ   — d | _         d| _        d| _        d| _        d| _        y )Nr   )Úop_typeÚ
fp32_callsÚ
fp16_callsÚ
bf16_callsÚother_calls©Úselfs    údG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/static/amp/debugging.pyÚ__init__zOperatorStatsUnit.__init__   s&   € ØˆŒØˆŒØˆŒØˆŒØˆÕó    c                 ó:  — |€| j                   dz   | _         y |t        j                  j                  j                  j
                  j                  k(  r| j                  dz   | _        y |t        j                  j                  j                  j
                  j                  k(  r| j                  dz   | _	        y |t        j                  j                  j                  j
                  j                  k(  r| j                  dz   | _        y | j                   dz   | _         y )Né   )r   ÚpaddleÚbaseÚcoreÚVarDescÚVarTypeÚFP32r	   ÚFP16r
   ÚBF16r   )r   Údtypes     r   ÚupdatezOperatorStatsUnit.update"   sÉ   € Øˆ=Ø#×/Ñ/°!Ñ3ˆDÕàœŸ™×(Ñ(×0Ñ0×8Ñ8×=Ñ=Ò=Ø"&§/¡/°AÑ"5�•Øœ&Ÿ+™+×*Ñ*×2Ñ2×:Ñ:×?Ñ?Ò?Ø"&§/¡/°AÑ"5�•Øœ&Ÿ+™+×*Ñ*×2Ñ2×:Ñ:×?Ñ?Ò?Ø"&§/¡/°AÑ"5�•à#'×#3Ñ#3°aÑ#7�Õ r   c                 óü   — | xj                   |j                   z  c_         | xj                  |j                  z  c_        | xj                  |j                  z  c_        | xj                  |j                  z  c_        y ©N)r	   r
   r   r   )r   Úanothers     r   ÚaddtozOperatorStatsUnit.addto/   sU   € Ø�Š˜7×-Ñ-Ñ-�Ø�Š˜7×-Ñ-Ñ-�Ø�Š˜7×-Ñ-Ñ-�Ø×Ò˜G×/Ñ/Ñ/Ör   c                 ó^   — | 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‰OØ�O‰OØ×Ñð	
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r#   © r   r   r   r      s   „ òò8ò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yy)NTF)	r   r   r   r   r   ÚFP64r   r   r   ©r   s    r   Ú_is_floating_pointr+   >   s“   € ØÜ�‰×Ñ× Ñ ×(Ñ(×-Ñ-Ü�‰×Ñ× Ñ ×(Ñ(×-Ñ-Ü�‰×Ñ× Ñ ×(Ñ(×-Ñ-Ü�‰×Ñ× Ñ ×(Ñ(×-Ñ-ð	ñ ð àr   c           	      óJ  — |r|j                  |«      n|j                  |«      }t        |t        «      sJ ‚t	        |«      dk(  ry |d   }	 | j                  |«      }|j                  S #  t        j                  dj                  |j                  |rdnd||«      «       Y y xY w)Nr   z*Operator < {} > gets {} < {} : {} > error!ÚinputÚoutput)r-   r.   Ú
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_blockr>   J   s›   € Ù&.�—‘˜Ô"°B·I±I¸hÓ4G€IÜ�i¤Ô&Ð&Ð&Ü
ˆ9ƒ~˜ÒØà˜‰|€Hð	Ø×"Ñ" 8Ó,ˆØ�y‰yÐøðÜ�‰Ø8×?Ñ?Ø—‘¡H™°(¸HÀhóô	
ñ
 ús   ÁA) Á)7B"c                 óL  — d }d }| j                   D ]‡  }t        || |d«      }|€Œ|€|}Œ||k7  sŒt        |«      rPt        |«      rEt        j	                  dj                  | j                  | j                   | j                  «      «       Œzt        |«      sŒ†|}Œ‰ | j                  D ]z  }t        || |d«      }|€Œ|€|}Œ||k7  sŒt        |«      sŒ+t        |«      sŒ7t        j	                  dj                  | j                  | j                   | j                  «      «       Œ| |S )NTzTOperator < {} > has different input data types, input_names = {}, output_names = {}.Fz]Operator < {} > has different input / output data types, input_names = {}, output_names = {}.)Úinput_namesr>   r+   r3   r4   r5   r6   Úoutput_names)r8   r7   r<   Úcompute_dtypeÚin_nameÚ	var_dtypeÚout_names          r   Ú_extract_compute_dtyperF   ]   s!  € Ø€HØ€MØ—>”>ˆÜ-¨e°R¸À$ÓGˆ	ØÐØàÐ Ø%‰Mà 	Ó)Ü% mÔ4Ô9KØô:ô —O‘OØn×uÑuØŸG™G R§^¡^°R·_±_óõô
 (¨	Õ2ð %.‘Mð+ "ð. —O”OˆÜ-¨e°R¸À5ÓIˆ	ØÐØàÐ ð &‰Mà 	Ó)Ü% mÕ4Ô9KØõ:ô —O‘OØw×~Ñ~ØŸG™G R§^¡^°R·_±_óõð $ð( Ðr   c                 óÆ   — i }| D ]Y  }|j                  «       D ]D  \  }}|j                  |d «      €t        j                  |«      ||<   Œ1||   j                  |«       ŒF Œ[ |S r   )ÚitemsÚgetÚcopyr!   )Úop_stats_listÚmerged_op_stats_dictÚeach_op_stats_dictr   Úunits        r   Ú_merge_op_statsrO   Ž   sk   € ØÐÛ+ÐØ/×5Ñ5Ö7‰MˆG�TØ#×'Ñ'¨°Ó6Ð>Ü04·	±	¸$³Ð$ WÒ-à$ WÑ-×3Ñ3°DÕ9ñ	 8ð ,ð  Ðr   c                 óÞ  — d„ }g }| j                   D ]Ø  }i }|j                  D ]´  }|j                  |j                  d «      €t	        «       }|||j                  <   n||j                     }|j                  dv rd }nJ ||j                  «      rt        ||dd«      }n)d|j                  v rt        ||dd«      }nt        ||«      }|j                  |¬«       Œ¶ |j                  |«       ŒÚ |S )Nc                 ó@   — g d¢}| |v ry| j                  dd«      |v ryy)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Ñ%ØØ�?‰?˜7 BÓ'¨?Ñ:ØØr   )Úcreate_py_readerÚreadÚcreate_double_buffer_readerÚXTÚParamr*   )
ÚblocksÚopsrI   r6   r   r>   r@   rF   r   Úappend)ÚprogramrZ   rK   r7   Úblock_op_stats_dictr8   rN   rB   s           r   Ú_get_op_stats_listre   ™   sô   € òð €MØ—”ˆØ ÐØ—)”)ˆBØ"×&Ñ& r§w¡w°Ó5Ð=Ü(Ó*�Ø/3Ð# B§G¡GÒ,à*¨2¯7©7Ñ3�à�w‰wð ñ ð
 !%‘Ù-¨b¯g©gÔ6ä 9¸%ÀÀSÈ$Ó O‘Ø˜BŸN™NÑ*ä 9Ø˜2˜w¨ó!‘ô !7°r¸5Ó A�Ø�K‰K˜mˆKÕ,ð/ ð0 	×ÑÐ0Õ1ð5  ð6 Ðr   c           	      ó  — d„ }| €t         j                  j                  «       } t        | «      }t	        |«      }|r‚t        |«      dkD  rtt        t        |«      «      D ]]  }t        dj                  dt        |«      z   dz   «      «       t         j                  j                  j                   |||   «      «       Œ_ t        dj                  d«      «       t         j                  j                  j                   ||«      «       y)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                 ó\   — | j                  «       D ]  \  }}|j                  «       | |<   Œ | S r   )rH   r#   )Úop_stats_unit_dictÚkeyÚvalues      r   Ú_convert_to_listz0collect_operator_stats.<locals>._convert_to_list
  s3   € Ø,×2Ñ2Ö4‰JˆC�Ø&+×&;Ñ&;Ó&=Ð˜sÒ#ð 5à!Ð!r   Nr   z
<{:-^120}>z op list of block Ú z op list of all blocks )r   ÚstaticÚdefault_main_programre   rO   r1   ÚrangeÚprintr5   ÚstrÚampÚ	debuggingÚ_print_operator_stats)rc   Úprint_subblocksrk   rK   Úmerged_op_statsÚis         r   Úcollect_operator_statsrx   Â   sÕ   € òP"ð
 €Ü—-‘-×4Ñ4Ó6ˆä& wÓ/€MÜ% mÓ4€OÙœ3˜}Ó-°Ò1Ü”s˜=Ó)Ö*ˆAÜ�,×%Ñ%Ð&:¼SÀ»VÑ&CÀcÑ&IÓJÔKÜ�J‰J× Ñ ×6Ñ6Ù  ¨qÑ!1Ó2õð +ô
 
ˆ,×
Ñ
Ð7Ó
8Ô9Ü
‡J�J×Ñ×.Ñ.Ù˜Ó)õr   )NF)rJ   Úloggingr   Úpaddle.base.log_helperr   r$   ÚINFOr3   r   r+   r>   rF   rO   re   rx   r'   r   r   Ú<module>r|      sU   ðó Û ã Ý -á
Øˆg�l‰lÐ Hô€÷
!
ñ !
òH	òò&.òb ò&ôR[r   