U
    “±Ëh>  ã                   @   sn   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ e  e¡Zdd„ Zdd	„ ZdS )
é    N)Ú	Precision)Úget_shared_initializersÚ?update_decoder_subgraph_share_buffer_and_use_decoder_masked_mha)ÚTensorProtoÚhelper)ÚWhisperConfigc                 C   sL   t tdd„ | ƒƒ}t|ƒt|ƒks&t‚t||ƒD ]\}}|j|ks0t‚q0d S )Nc                 S   s   | S )N© )Ú
beam_inputr   r   úY/tmp/pip-unpacked-wheel-socb9apf/onnxruntime/transformers/models/whisper/whisper_chain.pyÚ<lambda>   ó    zverify_inputs.<locals>.<lambda>)ÚlistÚfilterÚlenÚAssertionErrorÚzipÚname)Úbeam_inputsÚgraph_inputsZbeam_required_inputsZgraph_inputr	   r   r   r
   Úverify_inputs   s    r   c                 C   sJ  t j| jdd}d|j_t j| jdd}d|j_t | j¡}| j	t
jkrLdndddd	d
| j	t
jkrfdnd| j	t
jkrxdnd| jr„dnd| jrdndd| jrždnd| jrªdndg}dg}d\}}}| j	t
jkrtjddgdgdtjd}tjddgdgdtjd}tjddgdgdtjd}tjd||dd}	d|	_|	j t d|j¡t d |j¡t d!|j¡t d"| j¡t d#d¡t d$d%¡g¡ t dtjd&d'd(g¡}
t dtjd)g¡}t dtjd)g¡}t d	tjd)g¡}t d
tjd)g¡}t dtjd)g¡}t dtjd)g¡}|
||||||g}| jr>t dtj|jg¡}| |¡ | jrft dtjd&|jg¡}| |¡ | jrŒt dtjd&d*g¡}| |¡ | jr°t dtjd)g¡}| |¡ t dtjd&d
dg¡}|g}t | d+ƒr| j!rt"|jƒrøt# $d,¡ n
t# %d-¡ t&||ƒ}|	j t d.|j¡t d/|j¡g¡ tj'dd)d0tj'dd1d0g}| j	t
jkrf||||	gn|	g}t (|d2|||¡}t)||ƒ |j*|j*ksšt+‚t# $d3|j*› d4¡ tj,|d5||j*d6}t-j. /| j0¡rt# $d7| j0› d8| j0d9 › ¡ t- 1| j0¡ t- 1| j0d9 ¡ t j2|| j0dddt-j. 3| j0¡› d9d: t j4j5| j0dd; d S )<NT)Zload_external_datazencoderdecoderinit subgraphzdecoder subgraphZinput_features_fp16Úinput_featuresÚ
max_lengthÚ
min_lengthÚ	num_beamsÚnum_return_sequencesZlength_penalty_fp16Úlength_penaltyZrepetition_penalty_fp16Úrepetition_penaltyÚ
vocab_maskÚ Úprefix_vocab_maskÚdecoder_input_idsÚlogits_processorÚ	sequences)NNNZCastZCastInputFeaturesToFp16)ÚinputsÚoutputsr   ÚtoZCastLengthPenaltyToFp16ZCastRepetitionPenaltyToFp16Z
BeamSearchZBeamSearch_zcode)r#   r$   r   zcom.microsoftÚeos_token_idÚpad_token_idÚdecoder_start_token_idÚno_repeat_ngram_sizeZearly_stoppingZ
model_typeé   Z
batch_sizeZfeature_sizeZsequence_lengthé   Zinitial_sequence_lengthÚuse_gpuzUUpdated whisper decoder subgraph to use DecoderMaskedMultiHeadAttention successfully!zPDecoderMaskedMultiHeadAttention could not be applied to whisper decoder subgraphÚdecoderÚencoder)ÚdomainÚversioné   zbeam-search-testzUsing IR version z for chained modelzonnxruntime.transformers)Zproducer_nameZopset_importsÚ
ir_versionzOverwriting z and z.data)Zsave_as_external_dataZall_tensors_to_one_fileZconvert_attributeÚlocation)Z
full_check)6ÚonnxZ
load_modelZencoder_pathÚgraphr   Zdecoder_pathr   Zfrom_pretrainedZmodel_name_or_pathZ	precisionr   ZFLOAT16Zuse_prefix_vocab_maskZuse_forced_decoder_idsZuse_logits_processorr   Z	make_noder   r/   Ú	attributeÚextendZmake_attributer&   r'   r(   r)   Zmake_tensor_value_infoÚFLOATZINT32Zuse_vocab_maskZ
vocab_sizeÚappendÚhasattrr,   r   ÚloggerÚinfoÚwarningr   Zmake_opsetidZ
make_graphr   r2   r   Zmake_model_gen_versionÚosÚpathÚisfileZbeam_model_output_dirÚremoveÚsaveÚbasenameÚcheckerZcheck_model)ÚargsZencoder_modelZdecoder_modelÚconfigr   Zbeam_outputsZinput_features_cast_nodeZlen_pen_cast_nodeZrep_pen_cast_nodeÚnoder   r   r   r   r   r   r   r   r   r   r    r!   r"   Zgraph_outputsZinitializersZopset_importZgraph_nodesZ
beam_graphZ
beam_modelr   r   r
   Úchain_model   s   ô
ûûû

úÿ  ÿù	
  ÿ
  ÿ

  ÿ

þÿ
ÿý
üúrH   )Úloggingr>   r4   Zbenchmark_helperr   Zconvert_generationr   r   r   r   Ztransformersr   Ú	getLoggerÚ__name__r;   r   rH   r   r   r   r
   Ú<module>   s   
	