§
    kŠtjö3  ã                   óv  — d dl Z d dlZd dlZd dlZd dlmZ 	 dd„Zd„ Zd„ Zd„ Z	d„ Z
	 	 	 dd„Zd	„ Zd
„ Zd„ Zedk    ry e¦   «         Z ede¦  «         d dlmZ  eej        ¦  «         ej        sej        s
J d¦   «         ‚ ee¦  «        Znej        Zd dlmZ  eee¦  «        ZeD ]Z ee¦  «         ŒdS dS )é    N)ÚTensorProtoc                 ó.  — t          j        ¦   «         }|                     dddt          d¬¦  «         |                     dddt          d¬¦  «         |                     d	d
dt          dd¬¦  «         |                     dddt          dd¬¦  «         |                     ddt          dd¬¦  «         |                     ddt          dd¬¦  «         |                     ddt          dd¬¦  «         |                     ddt
          dd¬¦  «         |                     ddt          dd¬¦  «         |                     ddt          d d ¬¦  «         |                     d!dt          d d"¬¦  «         |                     d#dt          d d$¬¦  «         |                     d%dd&g d'¢d(¬)¦  «         |                     d*d+dd,d-¬.¦  «         |                     d¬/¦  «         |                     d0dt          d1d2¬¦  «         |                     d3dd,d4¬.¦  «         |                     d¬5¦  «         |                     d6dd,d7¬.¦  «         |                     d¬8¦  «         |                     d9d:dd,¬;¦  «         |                     d¬<¦  «         |                     | ¦  «        S )=Nz-iz--inputFz2Set the input file for reading the profile results)ÚrequiredÚtypeÚhelpz-mz--modelzIonnx model path to run profiling. Required when --input is not specified.z-bz--batch_sizeé   zbatch size of input)r   r   Údefaultr   z-sz--sequence_lengthé    zsequence length of inputz--past_sequence_lengthzpast sequence length for gpt2z--global_lengthz&number of global tokens for longformerz	--samplesiè  z\number of samples to test. Set it large enough to reduce the variance of performance result.z--thresholdg{®Gáz„?zfThreshold of run time ratio among all nodes. Nodes with larger ratio will show in top expensive nodes.z--thread_numéÿÿÿÿznumber of threads to usez--input_ids_namez"input name for input IDs, for bertz--segment_ids_namez$input name for segment IDs, for bertz--input_mask_namez'input name for attention mask, for bertz--dummy_inputsr	   )ÚbertÚgpt2Ú
longformerr	   zEType of model inputs. The default will create dummy inputs with ones.)r   r	   Úchoicesr   z-gz	--use_gpuÚ
store_truezuse GPU)r   Úactionr   )Úuse_gpuz
--providerÚcudazExecution provider to usez--basic_optimizationz_Enable only basic graph optimizations. By default, all optimizations are enabled in OnnxRuntime)Úbasic_optimizationz--kernel_time_onlyz.Only include the kernel time and no fence time)Úkernel_time_onlyz-vz	--verbose)r   r   )Úverbose)ÚargparseÚArgumentParserÚadd_argumentÚstrÚintÚfloatÚset_defaultsÚ
parse_args)ÚargvÚparsers     ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/profiler.pyÚparse_argumentsr"      s£  € ÝÔ$Ñ&Ô&€Fà
×ÒØØØÝØAð ñ ô ð ð ×ÒØØØÝØXð ñ ô ð ð ×ÒØØØÝØØ"ð ñ ô ð ð ×ÒØØØÝØØ'ð ñ ô ð ð ×ÒØ ØÝØØ,ð ñ ô ð ð ×ÒØØÝØØ5ð ñ ô ð ð ×ÒØØÝØØkð ñ ô ð ð ×ÒØØÝØØuð ñ ô ð ð ×ÒØØÝØØ'ð ñ ô ð ð ×ÒØØÝØØ1ð ñ ô ð ð ×ÒØØÝØØ3ð ñ ô ð ð ×ÒØØÝØØ6ð ñ ô ð ð ×ÒØØØØ9Ð9Ð9ØTð ñ ô ð ð ×Ò˜˜k°EÀ,ÐU^ÐÑ_Ô_Ð_Ø
×Ò ÐÑ&Ô&Ð&à
×ÒØØÝØØ(ð ñ ô ð ð ×ÒØØØØnð	 ñ ô ð ð ×Ò¨5ÐÑ1Ô1Ð1à
×ÒØØØØ=ð	 ñ ô ð ð ×Ò¨ÐÑ/Ô/Ð/à
×Ò˜˜k°EÀ,ÐÑOÔOÐOØ
×Ò ÐÑ&Ô&Ð&à×Ò˜TÑ"Ô"Ð"ó    c                 ó”   — ddl m}  || ||| |d¬¦  «        }|D ]}|                     d |¦  «        }	Œ|                     ¦   «         }
|
S )Nr   )Úcreate_onnxruntime_sessionT)Úenable_all_optimizationÚnum_threadsÚenable_profiling)Úbenchmark_helperr%   ÚrunÚend_profiling)Úonnx_model_pathr   Úproviderr   Ú
thread_numÚ
all_inputsr%   ÚsessionÚinputsÚ_Úprofile_files              r!   Úrun_profiler4   �   s}   € Ø;Ð;Ð;Ð;Ð;Ð;à(Ð(ØØØØ$6Ð 6ØØðñ ô €Gð ð &ð &ˆØ�KŠK˜˜fÑ%Ô%ˆˆà×(Ò(Ñ*Ô*€LØÐr#   c                 ó¢   — t          |                      d¦  «        ¦  «        t          k    r#t          | |                      d¦  «        ¦  «        nd S )NÚvalue)r   Ú
WhichOneofr   Úgetattr)Údims    r!   Úget_dim_from_type_protor:   °   sC   € Ý48¸¿ºÈÑ9PÔ9PÑ4QÔ4QÕUXÒ4XÐ4X�7�3˜Ÿš wÑ/Ô/Ñ0Ô0Ð0Ð^bÐbr#   c                 ó8   — d„ | j         j        j        D ¦   «         S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )r:   )Ú.0Úds     r!   ú
<listcomp>z-get_shape_from_type_proto.<locals>.<listcomp>µ   s!   € ÐQÐQÐQ¨1Õ# AÑ&Ô&ÐQÐQÐQr#   )Útensor_typeÚshaper9   )Ú
type_protos    r!   Úget_shape_from_type_protorD   ´   s   € ØQÐQ°
Ô0FÔ0LÔ0PÐQÑQÔQÐQr#   c                 óú  ‡— i Š|                       ¦   «         D �]F}t          |j        ¦  «        }g }t          |¦  «        D ]/\  }}t	          |t
          ¦  «        r|                     |¦  «         Œ0t          |¦  «        dk    r dS t          |¦  «        dk    r|||d         <   t          |¦  «        dk    r|||d         <   |j        j        j	        }	|	t          j        t          j        t          j        fv sJ ‚|	t          j        k    rt          j        n'|	t          j        k    rt          j        nt          j        }
t          j        ||
¬¦  «        }|‰|j        <   �ŒHˆfd„t)          |¦  «        D ¦   «         }|S )a  Create dummy inputs for ONNX model.

    Args:
        onnx_model (OnnxModel): ONNX model
        batch_size (int): batch size
        sequence_length (int): sequence length
        samples (int): number of samples

    Returns:
        List[Dict]: list of inputs
    é   Nr   r   ©Údtypec                 ó   •— g | ]}‰‘ŒS r=   r=   ©r>   r2   Údummy_inputss     €r!   r@   z'create_dummy_inputs.<locals>.<listcomp>Þ   ó   ø€ Ð7Ð7Ð7 1�,Ð7Ð7Ð7r#   )Ú'get_graph_inputs_excluding_initializersrD   r   Ú	enumerateÚ
isinstancer   ÚappendÚlenrA   Ú	elem_typer   ÚFLOATÚINT32ÚINT64ÚnumpyÚfloat32Úint64Úint32ÚonesÚnameÚrange)Ú
onnx_modelÚ
batch_sizeÚsequence_lengthÚsamplesÚgraph_inputrB   Úsymbol_dimsÚir9   rR   Ú	data_typeÚdatar/   rK   s                @r!   Úcreate_dummy_inputsrf   ¸   sŠ  ø€ ð €LØ!×IÒIÑKÔKð .ñ .ˆÝ)¨+Ô*:Ñ;Ô;ˆØˆÝ Ñ&Ô&ð 	&ð 	&‰FˆAˆsÝ˜#�sÑ#Ô#ð &Ø×"Ò" 1Ñ%Ô%Ð%øõ ˆ{ÑÔ˜aÒÐØ�4�4Ýˆ{ÑÔ˜aÒÐØ$.ˆE�+˜a”.Ñ!Ýˆ{ÑÔ˜aÒÐØ$3ˆE�+˜a”.Ñ!àÔ$Ô0Ô:ˆ	Ø�[Ô.µÔ0AÅ;ÔCTÐUÐUÐUÐUÐUð �KÔ-Ò-Ð-õ ŒMˆMà!*­kÔ.?Ò!?Ð!?•%”+�+ÅUÄ[ð 	õ
 Œz˜% yÐ1Ñ1Ô1ˆØ)-ˆ�[Ô%Ñ&Ñ&à7Ð7Ð7Ð7­¨g©¬Ð7Ñ7Ô7€JØÐr#   c                 ób   — ddl m}m}  || |||¦  «        \  }	}
} ||||dd|	|
|d¬¦	  «	        }|S )a-  Create dummy inputs for BERT model.

    Args:
        onnx_model (OnnxModel): ONNX model
        batch_size (int): batch size
        sequence_length (int): sequence length
        samples (int): number of samples
        input_ids_name (str, optional): Name of graph input for input IDs. Defaults to None.
        segment_ids_name (str, optional): Name of graph input for segment IDs. Defaults to None.
        input_mask_name (str, optional): Name of graph input for attention mask. Defaults to None.

    Returns:
        List[Dict]: list of inputs
    r   )Úfind_bert_inputsÚgenerate_test_dataé{   F)Ú
test_casesÚseedr   Ú	input_idsÚsegment_idsÚ
input_maskÚrandom_mask_length)Úbert_test_datarh   ri   )r]   r^   r_   r`   Úinput_ids_nameÚsegment_ids_nameÚinput_mask_namerh   ri   rm   rn   ro   r/   s                r!   Úcreate_bert_inputsru   â   sv   € ð. DÐCÐCÐCÐCÐCÐCÐCà)9Ð)9¸*ÀnÐVfÐhwÑ)xÔ)xÑ&€Iˆ{˜JØ#Ð#ØØØØØØØØØ ð
ñ 
ô 
€Jð Ðr#   c                 óz  ‡— |||||z   dœ}i Š|                       ¦   «         D ]ý}t          |j        ¦  «        }t          |¦  «        D ];\  }}	t	          |	t
          ¦  «        r!|	|vrt          d|	› �¦  «        ‚||	         ||<   Œ<|j        j        j        }
|
t          j
        t          j        t          j        fv sJ ‚|
t          j
        k    rt          j        n'|
t          j        k    rt          j        nt          j        }t          j        ||¬¦  «        }|‰|j        <   Œþˆfd„t'          |¦  «        D ¦   «         }|S )aÂ  Create dummy inputs for GPT-2 model.

    Args:
        onnx_model (OnnxModel): ONNX model
        batch_size (int): batch size
        sequence_length (int): sequence length
        past_sequence_length (int): past sequence length
        samples (int): number of samples

    Raises:
        RuntimeError: symbolic is not supported. Use the tool convert_to_onnx.py to export ONNX model instead.

    Returns:
        List[Dict]: list of inputs
    )r^   Úseq_lenÚpast_seq_lenÚtotal_seq_lenúsymbol is not supported: rG   c                 ó   •— g | ]}‰‘ŒS r=   r=   rJ   s     €r!   r@   z&create_gpt2_inputs.<locals>.<listcomp>7  rL   r#   )rM   rD   r   rN   rO   r   ÚRuntimeErrorrA   rR   r   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   )r]   r^   r_   Úpast_sequence_lengthr`   Úsymbolsra   rB   rc   r9   rR   rd   re   r/   rK   s                 @r!   Úcreate_gpt2_inputsr     sb  ø€ ð$ !Ø"Ø,Ø(Ð+?Ñ?ð	ð €Gð €LØ!×IÒIÑKÔKð .ð .ˆÝ)¨+Ô*:Ñ;Ô;ˆÝ Ñ&Ô&ð 	,ð 	,‰FˆAˆsÝ˜#�sÑ#Ô#ð ,Ø˜gÐ%Ð%Ý&Ð'HÀ3Ð'HÐ'HÑIÔIÐIà& sœ|�E˜!‘HøàÔ$Ô0Ô:ˆ	Ø�[Ô.µÔ0AÅ;ÔCTÐUÐUÐUÐUÐUð �KÔ-Ò-Ð-õ ŒMˆMà!*­kÔ.?Ò!?Ð!?•%”+�+ÅUÄ[ð 	õ
 Œz˜% yÐ1Ñ1Ô1ˆØ)-ˆ�[Ô%Ñ&Ð&à7Ð7Ð7Ð7­¨g©¬Ð7Ñ7Ô7€JØÐr#   c                 óÊ  ‡— ||dœ}i Š|                       ¦   «         D �])}t          |j        ¦  «        }t          |¦  «        D ];\  }}	t	          |	t
          ¦  «        r!|	|vrt          d|	› �¦  «        ‚||	         ||<   Œ<|j        j        j        }
|
t          j
        t          j        t          j        fv sJ ‚|
t          j
        k    rt          j        n'|
t          j        k    rt          j        nt          j        }d|j        v r"t          j        ||¬¦  «        }d|dd…d|…f<   nt          j        ||¬¦  «        }|‰|j        <   �Œ+ˆfd„t)          |¦  «        D ¦   «         }|S )aÎ  Create dummy inputs for Longformer model.

    Args:
        onnx_model (OnnxModel): ONNX model
        batch_size (int): batch size
        sequence_length (int): sequence length
        global_length (int): number of global tokens
        samples (int): number of samples

    Raises:
        RuntimeError: symbolic is not supported. Use the tool convert_longformer_to_onnx.py to export ONNX model instead.

    Returns:
        List[Dict]: list of inputs
    )r^   r_   rz   ÚglobalrG   r   Nc                 ó   •— g | ]}‰‘ŒS r=   r=   rJ   s     €r!   r@   z,create_longformer_inputs.<locals>.<listcomp>f  rL   r#   )rM   rD   r   rN   rO   r   r|   rA   rR   r   rS   rT   rU   rV   rW   rX   rY   r[   ÚzerosrZ   r\   )r]   r^   r_   Úglobal_lengthr`   r~   ra   rB   rc   r9   rR   rd   re   r/   rK   s                 @r!   Úcreate_longformer_inputsr…   ;  s‹  ø€ ð  (¸OÐLÐL€Gà€LØ!×IÒIÑKÔKð .ñ .ˆÝ)¨+Ô*:Ñ;Ô;ˆÝ Ñ&Ô&ð 	,ð 	,‰FˆAˆsÝ˜#�sÑ#Ô#ð ,Ø˜gÐ%Ð%Ý&Ð'HÀ3Ð'HÐ'HÑIÔIÐIà& sœ|�E˜!‘HøàÔ$Ô0Ô:ˆ	Ø�[Ô.µÔ0AÅ;ÔCTÐUÐUÐUÐUÐUð �KÔ-Ò-Ð-õ ŒMˆMà!*­kÔ.?Ò!?Ð!?•%”+�+ÅUÄ[ð 	ð �{Ô'Ð'Ð'Ý”;˜u¨IÐ6Ñ6Ô6ˆDØ&'ˆD����N�]�NÐ"Ñ#Ð#å”:˜e¨9Ð5Ñ5Ô5ˆDØ)-ˆ�[Ô%Ñ&Ñ&à7Ð7Ð7Ð7­¨g©¬Ð7Ñ7Ô7€JØÐr#   c           	      óÜ  — | j         dk    r| j         nt          j        d¬¦  «        }dt          j        vrt          |¦  «        t          j        d<   ddlm} ddlm	}  | || j
        ¦  «        ¦  «        }d }| j        dk    r4t          || j        | j        | j        | j        | j        | j        ¦  «        }n‡| j        dk    r(t'          || j        | j        | j        | j        ¦  «        }nT| j        d	k    r(t+          || j        | j        | j        | j        ¦  «        }n!t/          || j        | j        | j        ¦  «        }t1          | j
        | j        | j        | j        | j         |¦  «        }|S )
Nr   F)ÚlogicalÚOMP_NUM_THREADS)Úload)Ú	OnnxModelr   r   r   )r.   ÚpsutilÚ	cpu_countÚosÚenvironr   Úonnxr‰   r]   rŠ   ÚmodelrK   ru   r^   r_   r`   rr   rs   rt   r   r}   r…   r„   rf   r4   r   r-   r   )Úargsr'   r‰   rŠ   r]   r/   r3   s          r!   r*   r*   j  sš  € Ø%)¤_°qÒ%8Ð%8�$”/�/½fÔ>NÐW\Ð>]Ñ>]Ô>]€Kð ¥¤
Ð*Ð*Ý(+¨KÑ(8Ô(8�Œ
Ð$Ñ%àÐÐÐÐÐØ$Ð$Ð$Ð$Ð$Ð$à�˜4˜4 ¤
Ñ+Ô+Ñ,Ô,€Jà€JØÔ˜FÒ"Ð"Ý'ØØŒOØÔ ØŒLØÔØÔ!ØÔ ñ
ô 
ˆ
ˆ
ð 
Ô	˜fÒ	$Ð	$Ý'ØØŒOØÔ ØÔ%ØŒLñ
ô 
ˆ
ˆ
ð 
Ô	˜lÒ	*Ð	*Ý-ØØŒOØÔ ØÔØŒLñ
ô 
ˆ
ˆ
õ )¨°T´_ÀdÔFZÐ\`Ô\hÑiÔiˆ
åØŒ
ØŒØŒØÔØŒØñô €Lð Ðr#   Ú__main__Ú	Arguments)Úsetup_loggerzMrequires either --model to run profiling or --input to read profiling results)Úprocess_results)N)NNN)r   r�   rV   r‹   r�   r   r"   r4   r:   rD   rf   ru   r   r…   r*   Ú__name__Ú	argumentsÚprintr)   r”   r   Úinputr�   r3   Úprofile_result_processorr•   ÚresultsÚliner=   r#   r!   ú<module>r�      sÆ  ðØ €€€Ø 	€	€	€	à €€€Ø €€€Ø Ð Ð Ð Ð Ð ððI#ð I#ð I#ð I#ðXð ð ð&cð cð cðRð Rð Rð'ð 'ð 'ð^ ØØð&ð &ð &ð &ðR-ð -ð -ð`,ð ,ð ,ð^3ð 3ð 3ðl ˆzÒÐØ�Ñ!Ô!€IØ	€Eˆ+�yÑ!Ô!Ð!à-Ð-Ð-Ð-Ð-Ð-à€L�Ô"Ñ#Ô#Ð#àŒ?ð 'ØŒÐoÐoÐ oÑoÔoˆØ�s˜9‘~”~ˆˆà ”ˆØ8Ð8Ð8Ð8Ð8Ð8àˆo˜l¨IÑ6Ô6€Gàð ð ˆØˆˆd‰Œˆˆð% Ðð"ð r#   