o
    ;ήc^                     @   s\  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZmZ ejejejedd d dlmZ edZed Zd%dd	Zd
d Zdd Zdd Zdd Zdd Zedkred dZdZ dZ!e	j"e!e edddde#ddd	Z$e$% Z&e'd e'd d Z(d!Z)ed"e&e(dd# ed$e$e)dd# ee)e( dS dS )&    N)Path)
Gpt2Helper)TensorProtonumpy_helperz..)create_onnxruntime_session   c                 C   sX   t tjd< ttjd< ttjd< | d ur| tjd< d S |d ur%|tjd< d S ttjd< d S )N!ORT_DEBUG_NODE_IO_DUMP_SHAPE_DATA!ORT_DEBUG_NODE_IO_DUMP_INPUT_DATA"ORT_DEBUG_NODE_IO_DUMP_OUTPUT_DATAORT_DEBUG_NODE_IO_NAME_FILTER ORT_DEBUG_NODE_IO_OP_TYPE_FILTER;ORT_DEBUG_NODE_IO_DUMPING_DATA_TO_FILES_FOR_ALL_NODES_IS_OK)
ZERO_VALUEosenvironNON_ZERO_VALUE)node_name_filternode_type_filter r   _/tmp/pip-target-vg8gfxp4/lib/python/onnxruntime/transformers/models/gpt2/parity_check_helper.pyenviron_setting_nodes   s   


r   c                 C   s   dt jd< | t jd< d S )Nfiles'ORT_DEBUG_NODE_IO_DUMP_DATA_DESTINATIONORT_DEBUG_NODE_IO_OUTPUT_DIRr   r   )output_pathr   r   r   environ_setting_paths)   s   
r   c                  C   s    dD ]} | t jv rt j| = qd S )N)r   r	   r
   r   r   $ORT_DEBUG_NODE_IO_DUMP_DATA_TO_FILESr   r   r   )flagr   r   r   environ_reset/   s
   

r   c                 C   s2   t   t  t| t| |dd}t|| d S )NF)enable_all_optimization)r   r   r   r   r   onnxruntime_inference)
model_pathdummy_inputsoutputs_pathuse_gpusessionr   r   r   	inference>   s
   r'   c                 C   sb   t |}| r| rdd l}|| |jddd tjt| |||fd}|	  |
  d S )Nr   T)parentsexist_ok)targetargs)r   existsis_dirshutilrmtreemkdirmultiprocessingProcessr'   startjoin)r"   r#   r$   r%   dir_pathr.   processr   r   r   generate_outputs_filesF   s   
r7   c              
   C   s  i }i }dd l }| tj| dD ]}tj|t|j}tj|s%qt|d}t }|	|
  t|}	t|dm}t }
|
	|
  t|
}|jdkrb	 W d    W d    qtt||	 t|d  }t|r	 W d    W d    q||t|jdd < tj|	|ddd|t|jdd < W d    n1 sw   Y  W d    n1 sw   Y  qdg}t| d	d
 ddD ]\}}|| d| d||   q|D ]}t| qd S )Nr   z*.tensorprotorbgư>.g-C6?)rtolatolzNode	Diff	Closec                 S   s   | d S )Nr   r   )xr   r   r   <lambda>o   s    z!post_processing.<locals>.<lambda>T)keyreverse	)globr   pathr4   r   namer,   openr   ParseFromStringreadr   to_arraysizenumpyaverageabsmathisnansplitallclosesorteditemsappendprint)r$   outputs_path_otherrecordif_closerA   filenamefilename_otherftensorarraytensor_otherarray_otherdiffresultskvliner   r   r   post_processingS   sH   


"

( 
rc   __main__spawn         i   iQ  cpuT)devicefloat16zNpython convert_to_onnx.py -m gpt2 --output gpt2_fp32.onnx -o -p fp32 --use_gpuzNpython convert_to_onnx.py -m gpt2 --output gpt2_fp16.onnx -o -p fp16 --use_gpuz
./fp32_gpuz
./fp16_gpuz./gpt2_fp32.onnx)r%   z./gpt2_fp16.onnx)NN)*rL   r1   r   syspathlibr   rI   torchgpt2_helperr   onnxr   r   rB   rR   r4   dirname__file__benchmark_helperr   strr   r   r   r   r   r'   r7   rc   __name__set_start_methodsequence_lengthpast_sequence_length
batch_sizeget_dummy_inputsrj   dummy_inputs_fp16to_fp32dummy_inputs_fp32systemoutputs_path_fp32_gpuoutputs_path_fp16_gpur   r   r   r   <module>   sX    
"


