
    ΑiL                     &   S SK r S SKrS SKrS SKJrJr  S SKJrJ	r	J
r
JrJr  SSKJr  SSKJrJr  SSKJrJr  \" \R,                  R/                  5       5      r\" \R2                  R/                  5       5      rS	 r\" S
5       " S S\5      5       rg)    N)IrGraphcore)AddQuantDequantForInferencePassAddQuantDequantPassV2OutScaleForTrainingPassQuantizationTransformPassV2quant_config   )	Converter)OperatorDistAttrTensorDistAttr   )PassBaseregister_passc                 j    U R                   R                  5       U R                   R                  5       4$ )N)nodegraph_idid)r   s    t/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/passes/auto_parallel_quantization.py_node_idr   ,   s$    II $)),,.11    auto_parallel_quantizationc                   L   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )
QuantizationPass0   c                    > [         TU ]  5         U R                  SS 5        U R                  SS 5        U R                  SS5        U R                  SS 5        g )Ndist_contextparams_gradsmodetrainloss)super__init__set_attr)self	__class__s    r   r#   QuantizationPass.__init__2   sF    nd+nd+fg&fd#r   c                 P    U R                  S5      c  gU R                  S5      c  gg)Nr   Fr   T)get_attr)r%   s    r   _check_selfQuantizationPass._check_self9   s)    ==(0==(0r   c                     g)NT )r%   
other_passs     r   _check_conflict QuantizationPass._check_conflict@   s    r   c                    U R                  S5      nU R                  S5      nU R                  S5      nU R                  S5      n[        R                  R                  5       n[        R                  R                  [        R                  R                  5       R                  5      n	0 n
UR                   H  nUR                  XR                  '   M     US:w  a  SOSn[        [        R                  " UR                  5      US:g  S9n/ n/ n/ S	QnU H=  nU[         ;   a  UR#                  U5        M   U[$        ;   d  M,  UR#                  U5        M?     U R                  S
5      (       a  S
OSn['        U5      S:  al  [)        UU	U R                  S5      U R                  S5      U R                  S5      SUUS S S S S S US9nUR+                  5        H  nUR-                  U5        M     ['        U5      S:  aT  [/        UU	U R                  S5      U R                  S5      UUS9nUR+                  5        H  nUR-                  U5        M     [1        XUS9nUR+                  5        H  nUR-                  U5        M     US:w  a1  U R                  S5      (       a   [3        UU	U R                  S5      S9nUR9                  5       nU R;                  U5      n/ nU H  u  nnUR<                  UR?                  5       R@                  ;  a  M0  UR?                  5       R@                  UR<                     nUR?                  5       R@                  UR<                     nUR#                  UU45        M     S nU(       a'  UR?                  5       R@                  UR<                     nUR                   H*  nUR                  RC                  XR                     5        M,     U RE                  UX5        U RG                  UXHU	5        URI                  SU5        URI                  SU5        URI                  SU5        URI                  SU5        g !   [4        R6                  " S5         GN= f)Nr   r   r   r!   r    TF)for_test)conv2ddepthwise_conv2dmulmatmul	matmul_v2channel_wise_abs_maxabs_maxr   weight_bitsactivation_bitsnot_quant_patternmoving_average_abs_max)scopeplacer:   r;   skip_patternactivation_quantize_typequantizable_op_typeweight_quantize_typeweight_quantize_funcact_quantize_funcweight_preprocess_funcact_preprocess_funcoptimizer_funcexecutoris_test)r>   r?   
quant_bitsr@   rB   rJ   )r>   r?   rJ   onnx_format)r>   r?   rK   zXUnable to convert quant model with onnx_format=True, please update PaddlePaddle >= 2.4.0main_programstartup_program)%r)   paddlestaticglobal_scope	framework	CUDAPlacedistributedParallelEnvdev_idblocks
parent_idxidxr   r   GraphdescTRANSFORM_PASS_OP_TYPESappendQUANT_DEQUANT_PASS_OP_TYPESlenr   all_sub_graphsapplyr   r   r   loggingwarning
to_program move_persist_var_to_global_blocknameglobal_blockvars_set_forward_block_idxset_dist_attr_for_qat_programreset_scope_varr$   )r%   rM   rN   contextr   r   r   r!   r>   r?   parent_idx_dictblockrJ   
main_graphtransform_pass_opsquant_dequant_opsquantize_op_typesop_typerC   transform_pass	sub_graphquant_dequant_passout_scale_training_passout_scale_infer_passquant_programnew_params_gradsparamgrad	new_paramnew_gradnew_losss                                  r   _apply_single_impl#QuantizationPass._apply_single_implC   s   }}^4}}^4}}V$}}V$ **,  ****,33

 !((E).)9)9OII& ) '/$uJJ|(()DGO


  
 )G11"))'277!((1	 ) }}344 # 	 !"Q&8 MM-8 $.? @!]]+>?)A$6%9%)"&'+$(#N" (668	$$Y/ 9  !A%!6==):;!]]+>?$5" (668	"((3 9 #:g#
 $224I#)))4 5 7?t}}];;'F#}}->?($ #--/==mL 'KE4zz!;!;!=!B!BB%22499%**EI$11388CH##Y$9: ( $11388CH #))EJJ--oii.HI * 	**<	

 	]LG7*O<)9:*Ons   Q Q#c                 (   UR                  5       nUR                   H  nUR                  S:X  d  M  UR                  S5      R                  nUR                  U5      n/ nUR                  R                  5        H:  u  pxUR                  (       d  M  UR                  U5        UR                  U5        M<     U H  nUR                  U5        M     UR                  UR                  S5      5        UR                  R                  SU5        M     U$ )Nwhile	sub_blockX)rg   opstypeattrr   rn   rh   itemspersistable_clone_variabler]   _remove_varextendinputr[   	set_input)	r%   programrg   _op	_block_id_blockpersistables_name_vars	            r   re   1QuantizationPass.move_persist_var_to_global_block   s    ++-##Cxx7"HH[144	 y1!#);;#4#4#6KE'''$44T:$++E2 $7 *E&&u- *##CIIcN3""35 $ r   c                 F   UR                  5        GH  nUR                  UR                  5      nU(       a#  UR                  5       R	                  5       (       d  MK  UR                  5       nUR
                  UR
                  :X  a  Mw  UR                  U5      nUR                  UR                  R
                  UR                  R                  S.n	[        R                  " [        R                  " U5      U	5      n
UR                  5         UR                  X5        GM     g )N)dims_mappingprocess_shapeprocess_group)	list_varsfind_varrf   
get_tensor_is_initializedshape get_tensor_dist_attr_for_programr   process_meshprocess_idsr   slice_with_dist_attrnparray_clearset)r%   ry   r   r>   r?   var	scope_vartensorvar_dist_attr	dist_attrsliced_tensors              r   rk    QuantizationPass.reset_scope_var   s     **,Csxx0I)"6"6"8"H"H"J"J))+FyyFLL((II#NM - : :!.!;!;!A!A!.!;!;!G!GI &:: )M MMOJJ},) -r   c                 p   [        UR                  5       GH  u  pESn[        UR                  5       GH[  u  px[        5       n	SUR                  ;   d  UR                  S:X  Ga  UR
                  R                  S5      S   n
SU
;   a  U
S U
R                  S5       n
UR                  S:X  d(  Xv-
  [        UR                  U   R                  5      :  a)  UR                  U   R                  U
5      R                  nOUR                  U   R                  Xv-
     nUR                  U5      R                  nUR                  nXR                  ;   a  UR                  U
   nOUR                  U
   nSU	l        SU	l        Xl        U	R%                  UR
                  R                  S5      S   U5        UR
                  R'                  5        GH%  nUR
                  R                  U5      S   nUR                  U5      nUR(                   Vs/ s H  nSPM     nnUS:X  a  MW  US;   a  UR+                  S	5      (       av  UR-                  S	5      S:w  aa  UR
                  R                  S5      S   nUR                  U5      nU	R/                  U5      nUR-                  S	5      nUR0                  U   /n[3        5       nUUl        UUl        UR5                  UU5        U	R%                  UU5        GM(     UR
                  R7                  5        GHI  nUR
                  R9                  U5      S   nUR                  U5      nUR(                   Vs/ s H  nSPM     nnUS
:X  a&  UR5                  UU5        U	R;                  UU5        M{  US:X  a  UR+                  S	5      (       av  UR-                  S	5      S:w  aa  UR
                  R                  S5      S   nUR                  U5      nU	R/                  U5      nUR-                  S	5      nUR0                  U   /n[3        5       nUUl        UUl        UR5                  UU5        U	R;                  UU5        GML     UR=                  SS5        US-  nGOUR                  U   R                  Xv-
     nUR
                  R?                  UR
                  RA                  5       5        UR                  U5      nUc   S5       eUR                  nUR                   U	l        UR"                  U	l        UR                  U	l        Sn[        URB                  5       Hp  u  nn
UR                  S:X  a%  U
URB                  ;  a  SU
;   d  SU
;   d   eUS-  nM;  UU-  nURB                  U   n UR                  U    n!U	R%                  U
U!5        Mr     [        URD                  5       H  u  nnURD                  U   n"UR                  U"   n#U	R;                  UU#5        UR                  U   RG                  U5      (       a  M[  UR                  U   R                  U"5      n$URI                  U$5      R                  n%UR                  U5      n&UR5                  U&U%5        M     URK                  X5        GM^     URL                  RO                  5        Hw  u  n'n(U'UR                  U   RL                  ;   d  M%  UR                  U   RL                  U'   n)URI                  U)5      n*U*(       d  M[  UR5                  U(U*R                  5        My     GM     g s  snf s  snf )Nr   quantizemoving_average_abs_max_scaler   z
.quantizeddefault)Scale	ZeroPoint
quant_axisYOutScale	op_device r   zorigin op must have dist attr.r   z@scalez@zero_point)(	enumeraterW   r   r   r   r[   r   indexr_   _var_recursiveopget_dist_op_for_programr   r   outputs_dist_attrsinputs_dist_attrsimpl_idx	impl_typeset_input_dist_attrinput_namesr   has_attrr   get_input_dist_attrr   r    set_tensor_dist_attr_for_programoutput_namesoutputset_output_dist_attr	_set_attrset_original_idoriginal_idinput_arg_namesoutput_arg_names_find_var_recursiveget_dist_tensor_for_programset_op_dist_attr_for_programrh   r   )+r%   ry   rM   r   ibrn   
qat_offsetipquant_opquant_op_dist_attr
input_name
consume_opconsume_op_dist_attrref_process_meshconsume_input_dist_attr	slot_namein_name	input_variref_dims_mappingx_namex_varx_dist_attrr   tensor_dist_attroutput_name
output_var	origin_opdist_origin_oporigin_op_dist_attrscale_offsetrY   origin_input_nameorigin_input_dist_attrorigin_output_nameorigin_output_dist_attrorigin_output_varorigin_out_tensor_dist_attrquant_output_varrf   dst_varsrc_vardist_tensors+                                              r   rj   .QuantizationPass.set_dist_attr_for_qat_program   sY    #=#7#78IBJ )%)) 4%5%7" (--/}}(FF "*!4!4S!9!!<J!Z/%/<j..|<&

 !)GG?c,2E2Eb2I2M2M.NN )//3+^J7R # &2%8%8%<%@%@O&
 ,8+O+O",i ) (<'H'H$!%L%LL0CCJO 0
 1BB:N 0 34&/3<&06F3&:: ++C035L &.]]%>%>%@	"*--"5"5i"@"C$)$8$8$A	8A+H1B(+H$+$&*@@ ( 1 1, ? ?$,MM,$?2$E)1)<)<S)A!)D(-(<(<V(D$6$J$J(.%& !,
 .6]]<-H
$/$<$<Z$H4" 0 ,:+;(8H(58H(5$EE%'7 +>>#%5; &AB &.]]%?%?%A	&.mm&:&:9&Ea&H%*%9%9+%F
8B8H8H+I8H1B8H(+I$+(II *,C /CC +-D %&*4 ( 1 1, ? ?$,MM,$?2$E)1)<)<S)A!)D(-(<(<V(D$6$J$J(.%& !,
 .6]]<-H
$/$<$<Z$H4" 0 ,:+;(8H(58H(5$EE&(8 +??')9G &BN &&{B7!OJ !- 3 3B 7 ; ;BO LIMM11)..2L2L2NO%1%I%I!&N *5 85 +9*B*B'2E2N2N&/3F3P3P&0+88 '3 $%L+4X5M5M+NZ%NNg5 *)2K2K K !)J 6#0J#>!? )A-L$|+,5,E,Ec,J)/AA 1 /
 +>>&(>' ,O. -6 11-([ .7-G-G-L*/BB 2 0
 +??')@  ,2226JJ'    1=0C0C "1,n-?@ . !- H H$5!""+) 8
 05/C/CK/P,(II 02M3-: 99E !5N "'!1!1!3g<..r2777*11"5::4@G"."J"J#K '  AA!6!6 "4U 9l ,IB ,Js   \.
\3
r-   )__name__
__module____qualname____firstlineno__r#   r*   r/   r   re   rk   rj   __static_attributes____classcell__)r&   s   @r   r   r   0   s/    $I+V"-0X Xr   r   )rb   numpyr   rO   paddle.frameworkr   r   paddle.static.quantizationr   r   r   r   r	   auto_parallel.static.converterr   #auto_parallel.static.dist_attributer   r   	pass_baser   r   list#SUPPORT_WEIGHT_QUANTIZATION_OP_DICTkeysr\    SUPPORT_ACT_QUANTIZATION_OP_DICTr^   r   r   r-   r   r   <module>r	     s       *  7 /4499;  #11668 
2 +,^x ^ -^r   