
    yjd                         d dl Z d dlZej        fdZddZ G d d          Z G d d          Z G d	 d
          ZddZ	ddZ
d Z	 	 ddZdS )    Nc                     t          j        | g                              |          }t          j        |          pt          j        |          S N)nparrayastypeisinfisnan)valuedtyper   s      k/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/amp/accuracy_compare.pyis_infiniter      s<    HeW$$U++E8E??-bhuoo-    {Gz?c                 ~    t          j        t          j        | g          t          j        |g          ||          S )N)atolrtol)r   allcloser   )actualexpectedr   r   s       r   is_allcloser      s<    ;
&BHhZ00t$   r   c                   &    e Zd Zd Zd Zd Zd ZdS )
TensorInfoc                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d S r   )deviceop_typetensor_namer   numel	max_value	min_value
mean_valuehas_infhas_nannum_zeroselfs    r   __init__zTensorInfo.__init__#   sT    

r   c                     d| j          d| j         d| j         d| j         d| j         d| j         d| j         d| j         d	| j        d
d| j	        d
d| j
        d
S )Nz[TensorInfo] device=z
, op_type=z, tensor_name=, dtype=, numel=z
, num_inf=z
, num_nan=z, num_zero=, max_value=.6f, min_value=, mean_value=)r   r   r   r   r   r!   r"   r#   r   r   r    r$   s    r   __str__zTensorInfo.__str__0   s    @dk  @  @T\  @  @Y]Yi  @  @sws}  @  @  HL  HR  @  @  ^b  ^j  @  @  vz  vB  @  @  OS  O\  @  @  jn  jx  @  @  @  JN  JX  @  @  @  ko  kz  @  @  @  	@r   c                 &    | j         dz   | j        z   S )N/)r   r   r$   s    r   keyzTensorInfo.key3   s     |c!D$444r   c                    	 |                                                     d          }|D ]}|                    dd                              dd                              dd          }|                    d          }|d         dk    r|d	         | _        p|d         d
k    r|d	         | _        |d         dk    r|d	         | _        |d         dk    r|d	         | _        |d         dk    r t          j        |d	                   | _	        |d         dk    r!t          j
        |d	                   | _        |d         dk    r!t          j
        |d	                   | _        D|d         dk    r!t          j
        |d	                   | _        q|d         dk    rt          |d	                   | _        |d         dk    rt          |d	                   | _        |d         dk    rt          j        |d	                   | _        n)# t$          $ r}t'          d|            Y d }~nd }~ww xY w| S )N [ ],=r   op   r   tensorr   r   maxminmeannum_infnum_nanr#   z!! Error parsing )stripsplitreplacer   r   r   r   r   int64r   float32r   r   r    intr!   r"   r#   	Exceptionprint)r%   line
line_fragsfragword_strwordses          r   init_from_stringzTensorInfo.init_from_string8   s>   	.++C00J" 7 7LLb))11#r::BB3KK  !s++8t###(8DLL1X))"'(DKK1X))',QxD$$1X((!&qDJJ1X((!#%(!3!3DJJ1X&&%'Za%9%9DNN1X&&%'Za%9%9DNN1X''&(jq&:&:DOO1X**#&uQx==DLL1X**#&uQx==DLL1X++$&HU1X$6$6DM576  	. 	. 	.,d,,--------	.s   HH 
I $H;;I N)__name__
__module____qualname__r&   r.   r1   rO    r   r   r   r   "   sS          @ @ @5 5 5
         r   r   c                   0    e Zd Z	 d	dZd Zd Zd Zd ZdS )
MixedPrecisionTensorInfor         ?c                    d| _         || _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        ||j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        d| j        v r||j        z  | _        ||j        z  | _	        |x|j        | _        |j        | _        |j        | _        |j        | _
        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |||j        |j        k    sJ |j        |j        k    sJ d| d|             |                     | j        | j                  | _        |                     | j        | j                  | _        |                     | j        | j                  | _        |                                   d S )NTGRADzError:
	FP32 Tensor Info:z
	FP16 Tensor Info:)!	is_normalfp32_idxfp32_tensor_name
fp32_dtypefp32_max_valuefp32_min_valuefp32_mean_valuefp32_num_zeroscaled_fp32_max_valuescaled_fp32_min_valuefp16_tensor_name
fp16_dtypefp16_max_valuefp16_min_valuefp16_mean_valuefp16_num_zerofp16_has_inffp16_has_nanfp32_div_fp16_max_valuefp32_div_fp16_min_valuefp32_div_fp16_mean_valuer   r   r#   r   r   r   r   r    r!   r"   _div_check_normal)r%   fp32_tensor_infofp16_tensor_inforZ   
grad_scales        r   r&   z!MixedPrecisionTensorInfo.__init__\   s      $""#!%)"%)" $""#!  '+$'+$(,%'+3DL)/DJ!1!:D$4$@D!.4DO"2"<D"2"<D#3#>D ...!1!;; * !1!;; * '+3DL)/DJ!1!:D$4$@D!.4DO"2"<D"2"<D#3#>D  0 8D 0 8D',<,H#+/?/GGGGG#)-=-CCCCg.>ggUegg DCC ,099#T%8, ,D( ,099#T%8, ,D( -1II$d&:- -D) 	r   c                 p   d }d| j          d| j         }|d| j         d| j         d || j                   d || j                   d || j                   
z  }|d	| j         d| j         d || j	                   d || j
                   d || j                   d
| j         d| j         z  }|S )Nc                     | | dn| S )Nr+   rS   )r
   s    r   
_float_strz4MixedPrecisionTensorInfo.__str__.<locals>._float_str   s    %*%6e>>>EAr   z#[MixedPrecisionTensorInfo] op_type=r)   z
  FP32: tensor_name=r(   r*   r,   r-   z
  FP16: tensor_name=z
, has_inf=z
, has_nan=)r   r   r[   r\   r]   r^   r_   rc   rd   re   rf   rg   ri   rj   )r%   ru   	debug_strs      r   r.   z MixedPrecisionTensorInfo.__str__   s   	B 	B 	B ]$,\\PTPZ\\	  hd.C  h  hT_  h  hjtjtuy  vI  kJ  kJ  h  h  Xb  Xb  cg  cv  Xw  Xw  h  h  FP  FP  QU  Qe  Ff  Ff  h  h  	h	  bd.C  b  bT_  b  bjtjtuy  vI  kJ  kJ  b  b  Xb  Xb  cg  cv  Xw  Xw  b  b  FP  FP  QU  Qe  Ff  Ff  b  b  rv  rC  b  b  OS  O`  b  b  	b	r   c                 (    |||dk    r||z  ndS d S )Nr   r:   rS   )r%   abs      r   rn   zMixedPrecisionTensorInfo._div   s&    =Q]FF1q55)tr   c                     | j         | j        S | j        | j         dz   t          | j                  z   S | j                            dd          dz   t          | j                  z   S )N#
.cast_fp16z/.cast_fp16/)r[   rc   strrZ   rC   r$   s    r   get_tensor_namez(MixedPrecisionTensorInfo.get_tensor_name   sq     ((("*(3.T]1C1CCC %--lNKKdm$$%r   c                 2   | j         5| j         t          j        t          j                  j        k    r	d| _        d S | j        | j        | j        | j	        | j
        | j        g}|D ]}|t          |          r
d| _         d S | j        | j        r	d| _        d S | j        | j        r	d| _        d S | j        *| j
        #t          | j
        | j                  s	d| _        d S | j	        *| j        %t          | j        | j	                  sd| _        d S d S d S d S )NF)r   r   iinfoint32r<   rY   r]   r^   ra   rb   re   rf   r   ri   rj   r   )r%   
check_listr
   s      r   ro   z&MixedPrecisionTensorInfo._check_normal   sS    :!dj28BH3E3E3I&I&I"DNF &&

   	 	E [%7%7 !&(T->("DNF(T->("DNF &2#/ 3T5OPP 0 #DNF&2#/ 3T5OPP 0 #DNF 32////r   N)r   rV   )rP   rQ   rR   r&   r.   rn   r~   ro   rS   r   r   rU   rU   [   sl        ILJ J J JX    

 
 
- - - - -r   rU   c                   R    e Zd Zd Zd Zd Zd Z	 ddZ	 ddZd Z	d	 Z
d
 Zd ZdS )ExcelWriterc                    || _         || _        	 dd l}n# t          $ r t	          d           Y nw xY w|                    |          | _        | j                            dddddd          | _        | j                            dd	d
          | _	        | j                            ddd
          | _
        | j                            ddd
          | _        | j                            ddd
          | _        d S )Nr   zRimport xlsxwriter failed. please run 'pip install xlsxwriter==3.0.9' to install itTr:   blackz#6495EDcenter)boldborder
font_colorbg_coloralignz#F5F5F5)r   r   redyelloworange)log_fp32_dirlog_fp16_dir
xlsxwriterImportErrorrH   Workbookworkbook
add_formattitle_formattensor_name_formatred_bg_cell_formatyellow_bg_cell_formatorange_bg_cell_format)r%   r   r   output_pathxlws        r   r&   zExcelWriter.__init__   sJ   ((	$$$$$ 	 	 	d    	
 [11 M44%%! 
 
 #'-":":y11#
 #
 #'-":":u--#
 #
 &*]%=%=x00&
 &
" &*]%=%=x00&
 &
"""s    11c                 F    | j                                          d | _         d S r   )r   closer$   s    r   r   zExcelWriter.close  s!    r   c                     ||                     ||d           d S |dk    r|                     |||| j                   d S |                     |||           d S )N--fp16)writer   r%   	worksheetr
   rowcols        r   _write_dtypezExcelWriter._write_dtype  si    =OOCd+++++S%1KLLLLLS%00000r   c                     |                                 }|j        &|j        r|                    |||| j                   d S |                    |||           d S r   )r~   r[   rc   r   r   )r%   r   mp_tensor_infor   r   r   s         r   _write_tensor_namezExcelWriter._write_tensor_name"  sf    $4466+7/ 8 OOCk43JKKKKKOOCk22222r   Tc                    ||                     ||d           d S t          |          dk     r|d}n|d}|r9t          |t          j                  r|                     |||| j                   d S |                     |||           d S )Nr   gh㈵>z.6Er+   )r   absr   r   float16r   r%   r   r
   r   r   check_finite	value_strs          r   _write_maxmin_valuezExcelWriter._write_maxmin_value,  s     =OOCd+++++5zzD  $NN		$NN	 5E2: > > 5S)T5LMMMMMS)44444r   c                 r    ||                     ||d           d S |d}|                     |||           d S )Nr   z>10d)r   r   s          r   _write_tensor_num_zeroz"ExcelWriter._write_tensor_num_zero;  sJ     =OOCd+++++ IOOCi00000r   c                     ||                     ||d           d S |dk    r|                     |||| j                   d S |                     |||           d S )Nr   r:   )r   r   r   s        r   _write_infinite_statusz"ExcelWriter._write_infinite_statusD  si    =OOCd+++++zzS%1HIIIIIS%00000r   c                     dd}||                     ||d           d S |d} ||d          s |||          r|                     |||           d S |                     |||| j                   d S )Nr:   c                 &    | |dz  k    o| |dz  k     S )Ngffffff?g?rS   )r
   scales     r   	_in_rangez7ExcelWriter._write_fp32divfp16_value.<locals>._in_rangeN  s    54<'@EEDL,@@r   r   r+   )r   )r:   )r   r   )r%   r   r
   r   r   
loss_scaler   r   s           r   _write_fp32divfp16_valuez$ExcelWriter._write_fp32divfp16_valueM  s    	A 	A 	A 	A =OOCd+++++ Iya((( QIIeZ,H,H QS)44444S)T5OPPPPPr   c                    dddddddddddd}g d}| j         T|                    dd	| j                   |                    d
d| d| j                   |                    g d           n| j        8|                    dd| d| j                   |                    g d           no|                    dd	| j                   |                    dd| d| j                   |                    dd| j                   |                    g d           t          t          |                    D ]I}t          t          d          |z             }|	                    |dz   |z   |||                             Jt          t          |                    D ]%}|
                    ||||         | j                   &d S )N   <   
         )r   r   r   r#   infiniter   r   r   r    r?   r@   )r   r   r   r   zE1:H1fp32zI1:J1zfp32 (scale=))r   r   r   r    r   r   zE1:J1zfp16 (scale=)r   r   r   r    r#   r?   r@   zI1:N1zO1:Q1zfp16 / fp32)r   r   r   r    r#   r   r   r   r    r#   r?   r@   r   r   r    A:)r   merge_ranger   extendr   rangelenchrord
set_columnr   )r%   r   r   r   column_width_dicttitle_namesr   col_chars           r   _write_titleszExcelWriter._write_titlesZ  st   
 
 FEE$!!'643DEEE!!5
555t7H     	 	 	 	 &!!5
555t7H     
 
 
 
 !!'643DEEE!!5
555t7H   !!'=$:KLLL    ( [))** 	 	C3s88c>**H  3)+<[=M+N    [))** 	K 	KCOOCk#&68IJJJJ	K 	Kr   c                    | j         J | j                             |          }d}|                     |||           |dz  }g }|D ]i}|j        s#|j        |vr|                    |j                   |r|j        r7|                    |d|j                   |                     |||d           |j        t          j
        t          j                  j        k    r#|                    |d|j        | j                   n|                    |d|j                   |j        r|                    |dd           n|                    |dd| j                   d}	| j        |                     ||j        ||	           |                     ||j        ||	dz              |                     ||j        ||	dz              |                     ||j        ||	dz              |                     ||j        ||	dz              |	dz  }	| j        B|                     ||j        ||	           |                     ||j        ||	dz              |	dz  }	| j        |                     ||j        ||	           |                     ||j        ||	dz              |                     ||j        ||	dz              |                     ||j        ||	dz              |                     ||j        ||	dz              |	dz  }	|                     ||j         ||	           |                     ||j!        ||	dz              |	dz  }	| j        l| j        e| "                    ||j#        ||	|           | "                    ||j$        ||	dz   |           | "                    ||j%        ||	dz   |           |	dz  }	|dz  }ktM          d	|            d S )
Nr:   r         01      z&-- OP Types produce infinite outputs: )'r   add_worksheetr   rY   r   appendr   r   r   r   r   r   r<   bad_value_formatr   r   r   r\   r   r]   r^   r_   r   r`   r   ra   rb   rd   re   rf   rg   r   ri   rj   r   rk   rl   rm   rH   )
r%   mp_tensor_info_list	sheetnamer   skip_normal_tensorsr   r   infinite_op_typestensor_infor   s
             r   r   zExcelWriter.add_worksheet  s    }(((M//	::	9j#666q. g	 g	K)>'/@@@!(()<===" {'< OOCK$7888##I{CCCC 28BH#5#5#999K-t/D    Q(9:::$ FQ,,,,QT-DEEEC ,!!)[-CS#NNN(({93a   (({93a   (({:Cq   ++{8#sQw   q$,,,!;#Dc3   ,,!#9a	   1HC ,!!)[-CS#NNN(({93a   (({93a   (({:Cq   ++{8#sQw   q++{7c   ++{7cAg   q ,1B1N--7   --7!G   --8!G   q1HCCJ7HJJKKKKKr   N)T)rP   rQ   rR   r&   r   r   r   r   r   r   r   r   r   rS   r   r   r   r      s         
  
  
D  1 1 13 3 3 8<5 5 5 5  8<1 1 1 11 1 1Q Q QPK PK PKduL uL uL uL uLr   r   c           	      n   g }t          t          |                     D ]}|dz  dk    r't          d|ddt          |           ddd           | |         }d	|v rWt                      }|                    |           |j        |j        d
k    rd}|	|j        |v r|                    |           |S )Nr   r   -- Processing -8d / z lineendz[PRECISION]r5   T)r   r   rH   r   rO   r   r   r   )linesspecified_op_listtensor_info_listirI   r   has_tensor_names          r   parse_linesr   $  s    3u:: 5 5r6Q;;@@@@3u::@@@@    QxD  $,,K((...'3+r11"&!)&*;;; ''444r   c                    | |d S | dz   |z   }d }d}	 t          |d          5 }|                                }t          ||          }d d d            n# 1 swxY w Y   n%# t          $ r t	          d|d           d |fcY S w xY w||fS )Nr0   Frz	the file zis not found)open	readlinesr   FileNotFoundErrorrH   )log_dirfilenamer   complete_filenamer   r   fr   s           r   	parse_logr   ?  s   (*t#0O%#S)) 	EQKKMME*52CDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E  % % %k,n===_$$$$% _,,s4   A! %A	A! AA! AA! !BBc           	      .   g }|[i }i }| O| D ]L}|                                 }|                    |d          }|dz   ||<   |||dz   t          |          z   <   Mi }	t          t	          |                    D ]}
|
dz  dk    r't          d|
ddt	          |          ddd	
           ||
         }|                                                     dd                              dd          }|	                    |d          }|                    |dz   t          |          z   d           }||dz   |	|<   t          ||||          }|                    |           n| i }t          t	          |                     D ]}
|
dz  dk    r't          d|
ddt	          |           ddd	
           | |
         }|                                 }|                    |d          }|dz   ||<   t          |d ||          }|                    |           |S )Nr   r:   r{   r   r   r   r   z FP16 Tensor Infor   r   r|   r5   z
.cast_fp32z FP32 Tensor Info)	r1   getr}   r   r   rH   rC   rU   r   )fp32_tensor_info_listfp16_tensor_info_listrr   r   fp32_tensor_info_dictfp32_write_countr   tensor_info_keycountfp32_read_countr   rq   fp32_tensor_info_keyrp   r   
fp32_counts                   r   merge_tensor_info_listr  Q  s    ( " ,4  "-//"3"3(,,_a@@49AI 1 &o&;c%jj&HII s01122 	7 	7A2v{{`Q```s3H/I/I````     5Q7 $$&&r**r** !
 $''(<a@@E488$s*SZZ7     +8=	 455 "2E: N  &&~6666+	7. 
	*
s01122 	7 	7A2v{{`Q```s3H/I/I````    02K)oo//ONN?A66E*/!)J'5T5* N  &&~6666r   r:   Fc                    t          | ||          }|}g }t          j        |           }|D ]}	d|	v r|                    |	           t	          dt          |           d|  d|            t          |          D ]}
t	          d|  d|
            t          | |
d           \  }}t	          d| d|
            t          ||
d           \  }}t	          d|
            t          |||          }t	          d	|
            |	                    ||
|d
           t	          d|            t	                       |
                                 d S )Nworker_z-- There are z workerlogs under z: z&-- [Step 1/4] Parsing FP32 logs under r0   z&-- [Step 2/4] Parsing FP16 logs under z2-- [Step 3/4] Merge FP32 and FP16 tensor info for z?-- [Step 4/4] Add worksheet for mixed precision tensor info of Fz-- Write to )r   oslistdirr   rH   r   sortedr   r  r   r   )	dump_pathanother_dump_pathoutput_filenamer   dump_all_tensorsexcel_writerrr   workerlog_filenames	filenamesnamer   r   fp32_has_tensor_namer   fp16_has_tensor_namer   s                   r   compare_accuracyr    s    y*;_MMLJ
9%%I - -&&t,,,	f/00ffIffQdff   .// 
 
MyMM8MMNNN6?x7
 7
33 	S5FSSSS	
 	
 	
 7@x7
 7
33 	M8MMNNN4!#8*
 
 	XhXX	
 	
 	
 	""		
 	
 	
 	
 

*
*
*+++	GGGr   )r   r   r   )r:   F)r  numpyr   r   r   r   r   rU   r   r   r   r  r  rS   r   r   <module>r     s<   
			      Z . . . .   6 6 6 6 6 6 6 6rT T T T T T T TnoL oL oL oL oL oL oL oLd	   6- - - -$9 9 9@ / / / / / /r   