Ë
    cQêjFU  ã                   óÜ  — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlZddl	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZ dd	lmZ  G d
„ d«      Zd"dedefd„Zd"dedefd„Z G d„ d«      Zdefd„Zdefd„Z	 d"dej:                  dej<                  dz  fd„Zd„ Z d„ Z!e"dk(  rÆ e!«       Z# e$de#› �«       e#jJ                  €e#jL                  dk(  rdnde#_%        e#jN                  r>ejP                  jS                  «       sJ ‚e#jT                  dk(  r/d  e«       v sJ ‚d!e#_+        ne#jX                  rJ ‚e#jV                  rJ ‚e#jX                  se#jV                  r	 ee#«       y e e#«       yy)#z]
Benchmark performance of SAM2 encoder with ORT or PyTorch. See benchmark_sam2.sh for usage.
é    N)ÚMapping)Údatetime)ÚSAM2ImageDecoder)ÚSAM2ImageEncoder)Údecoder_shape_dictÚencoder_shape_dictÚload_sam2_model)ÚInferenceSessionÚSessionOptionsÚget_available_providers)ÚCudaSessionc            +       ó  — e Zd Zddddddddddddej                  dddddd	dfd
edededej                  dededededededededededededededededef*d„Z	d „ Z
d!eeee   f   fd"„Zd!eeej                  f   fd#„Zy$)%Ú
TestConfigÚimage_encoderÚCPUExecutionProviderúmax-autotuneé   é   FTé   éè  Ú
model_typeÚ	onnx_pathÚsam2_dirÚdeviceÚ	componentÚ
batch_sizeÚheightÚwidthÚ
num_labelsÚ
num_pointsÚ	num_masksÚmulti_mask_outputÚuse_tf32Úenable_cuda_graphÚprefer_nhwcÚwarm_upÚenable_nvtx_profileÚenable_ort_profileÚenable_torch_profileÚrepeatsÚverbosec                 óú  — |dv sJ ‚|	dk\  r|	dk  sJ ‚|
dk\  r|
dk  sJ ‚|| _         || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        | j                  dk(  r&| j                  dk(  r| j                  dk(  sJ d«       ‚y y )N©Úsam2_hiera_tinyÚsam2_hiera_smallÚsam2_hiera_largeÚsam2_hiera_base_plusé    i   r   r   z7Only image size 1024x1024 is allowed for image encoder.)r   r   r   r   ÚproviderÚtorch_compile_moder   r   r   r   r    r!   r"   r   r#   r$   Údtyper%   r&   r'   r(   r)   r*   r+   )Úselfr   r   r   r   r   r3   r4   r   r   r   r   r    r!   r"   r#   r$   r5   r%   r&   r'   r(   r)   r*   r+   s                            úx/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/sam2/benchmark_sam2.pyÚ__init__zTestConfig.__init__   s  € ð6 ÐpÑpÐpÐpØ˜Š} ¨4¢Ð/Ð/Ø˜Š| ¨¢Ð-Ð-à$ˆŒØ"ˆŒØ ˆŒØ"ˆŒØ ˆŒØ"4ˆÔØ$ˆŒØˆŒØˆŒ
Ø$ˆŒØ$ˆŒØ"ˆŒØ!2ˆÔØˆŒØ ˆŒØ!2ˆÔØˆŒ
Ø&ˆÔØˆŒØ#6ˆÔ Ø"4ˆÔØ$8ˆÔ!ØˆŒØˆŒà�>‰>˜_Ò,Ø—;‘; $Ò&¨4¯:©:¸Ò+=ÐxÐ?xÓxÐ=Ð+=ð -ó    c                 ó   — t        | «      › S ©N)Úvars©r6   s    r7   Ú__repr__zTestConfig.__repr__V   s   € Ü�t“*�Ðr9   Úreturnc                 óø   — | j                   dk(  r+t        | j                  | j                  | j                  «      S t        | j                  | j                  | j                  | j                  | j                  «      S )Nr   )	r   r   r   r   r   r   r   r    r!   r=   s    r7   Ú
shape_dictzTestConfig.shape_dictY   sV   € Ø�>‰>˜_Ò,Ü% d§o¡o°t·{±{ÀDÇJÁJÓOÐOä% d§k¡k°4·:±:¸t¿¹ÐPT×P_ÑP_Ðae×aoÑaoÓpÐpr9   c                 óÞ  — | j                   }| j                  dk(  rEdt        j                  | j                  d| j
                  | j                  || j                  ¬«      iS t        j                  dddd|| j                  ¬«      t        j                  ddd	d	|| j                  ¬«      t        j                  dddd|| j                  ¬«      t        j                  d
d| j                  | j                  df|| j                  ¬«      t        j                  d
d| j                  | j                  ft        j                  | j                  ¬«      t        j                  | j                  ddd|| j                  ¬«      t        j                  | j                  || j                  ¬«      t        j                  | j
                  | j                  gt        j                  | j                  ¬«      dœS )Nr   Úimageé   )r5   r   r   é    é   é@   é€   r   r   é   )Úimage_features_0Úimage_features_1Úimage_embeddingsÚpoint_coordsÚpoint_labelsÚinput_masksÚhas_input_masksÚoriginal_image_size)r5   r   ÚtorchÚrandnr   r   r   r   ÚrandÚrandintr   r    Úint32ÚzerosÚonesÚtensor)r6   r5   s     r7   Úrandom_inputszTestConfig.random_inputs_   ss  € Ø—
‘
ˆØ�>‰>˜_Ò,ØœUŸ[™[¨¯©¸!¸T¿[¹[È$Ï*É*Ð\aÐjn×juÑjuÔvÐwÐwô %*§J¡J¨q°"°c¸3ÀeÐTX×T_ÑT_Ô$`Ü$)§J¡J¨q°"°c¸3ÀeÐTX×T_ÑT_Ô$`Ü$)§J¡J¨q°#°r¸2ÀUÐSW×S^ÑS^Ô$_Ü %§¡Ø�t˜dŸo™o¨t¯©ÀÐBÈ%ÐX\×XcÑXcô!ô !&§¡Ø�q˜4Ÿ?™?¨D¯O©OÐ<ÄEÇKÁKÐX\×XcÑXcô!ô  %Ÿ{™{¨4¯?©?¸A¸sÀCÈuÐ]a×]hÑ]hÔiÜ#(§:¡:¨d¯o©oÀUÐSW×S^ÑS^Ô#_Ü',§|¡|°T·[±[À$Ç*Á*Ð4MÔUZ×U`ÑU`Ðim×itÑitÔ'uñð r9   N)Ú__name__Ú
__module__Ú__qualname__rR   Úfloat32Ústrr   ÚintÚboolr8   r>   r   ÚlistrA   ÚTensorrZ   © r9   r7   r   r      sn  „ ð )Ø'Ø)ØØØØØØØ"'ØØ"'Ø�m‰mØ!ØØ$)Ø#(Ø%*ØØñ39yàð9yð ð9yð ð	9yð
 —‘ð9yð ð9yð ð9yð ð9yð ð9yð ð9yð ð9yð ð9yð  ð9yð  ð!9yð"  ð#9yð& ð'9yð( ð)9yð* "ð+9yð, !ð-9yð. #ð/9yð0 ð19yð2 ó39yòvðq˜G C¨¨c© NÑ3ó qð˜w s¨E¯L©LÐ'8Ñ9ô r9   r   Úconfigr?   c                 óð  — | j                   rt        dt        | «      › �«       | j                  dk(  r¨t	        | j
                  t        «      rt        j                  j                  «       n| j
                  j                  }t        j                  || j                  «      }t        | j                  «      |d<   | j                   rd|d<   | j                  |fdg}ndg}t#        | j$                  ||¬«      }|S )Nzcreate session for ÚCUDAExecutionProviderr#   r   r%   r   )Ú	providers)r+   Úprintr<   r3   Ú
isinstancer   r_   rR   ÚcudaÚcurrent_deviceÚindexr   Úget_cuda_provider_optionsr$   r`   r#   r%   r
   r   )re   Úsession_optionsÚ	device_idÚprovider_optionsrh   Úort_sessions         r7   Úcreate_ort_sessionrs   t   sÑ   € Ø‡~‚~ÜÐ#¤D¨£L >Ð2Ô3à‡�Ð1Ò1Ü3=¸f¿m¹mÌSÔ3Q”E—J‘J×-Ñ-Ô/ÐW]×WdÑWd×WjÑWjˆ	Ü&×@Ñ@ÀÈF×LdÑLdÓeÐÜ'*¨6¯?©?Ó';Ð˜Ñ$Ø×ÒØ./Ð˜]Ñ+Ø—o‘oÐ'7Ð8Ð:PÐQ‰	à+Ð,ˆ	ä" 6×#3Ñ#3°_ÐPYÔZ€KØÐr9   c                 óž   — t        | |«      }t        || j                  | j                  «      }|j	                  | j                  «       «       |S r;   )rs   r   r   r$   Úallocate_buffersrA   )re   ro   rr   Úcuda_sessions       r7   Úcreate_sessionrw   †   sC   € Ü$ V¨_Ó=€KÜ˜{¨F¯M©M¸6×;SÑ;SÓT€LØ×!Ñ! &×"3Ñ"3Ó"5Ô6ØÐr9   c                   ó$   — e Zd ZdZddefd„Zd„ Zy)ÚOrtTestSessionz;A wrapper of ORT session to test relevance and performance.Nre   c                 óP   — t        ||«      | _        |j                  «       | _        y r;   )rw   rr   rZ   Ú	feed_dict)r6   re   ro   s      r7   r8   zOrtTestSession.__init__�   s!   € Ü)¨&°/ÓBˆÔØ×-Ñ-Ó/ˆ�r9   c                 óL   — | j                   j                  | j                  «      S r;   )rr   Úinferr{   r=   s    r7   r}   zOrtTestSession.infer”   s   € Ø×Ñ×%Ñ% d§n¡nÓ5Ð5r9   r;   )r[   r\   r]   Ú__doc__r   r8   r}   rd   r9   r7   ry   ry   �   s   „ ÙEñ0˜zó 0ó6r9   ry   rv   c                 ó~   — t        j                   «       }| j                  |«      }t        j                   «       }||z
  S r;   )Útimer}   )rv   Ú
input_dictÚstartÚ_Úends        r7   Úmeasure_latencyr…   ˜   s2   € Ü�I‰I‹K€EØ×Ñ˜:Ó&€AÜ
�)‰)‹+€CØ�‰;Ðr9   c                 óÄ  — | j                   j                  }|dk(  }|r€t        j                  j	                  d«      j
                  dk\  rT| j                  rHdt        j                  j                  j                  _	        dt        j                  j                  _	        |xr | j                  t        j                  k7  }| j                  «       }t        j                  «       5  t        j                  || j                  |¬«      5  t!        | j"                  | j$                  | j                   ¬«      }| j&                  dk(  �rñ|rU| j(                  dk7  rFt        j*                  |j,                  j.                  | j(                  dd	¬
«      |j,                  _        | j1                  «       d   }t        j2                  |«      j5                  | j                   | j                  ¬«      }t7        |«      }|r(| j(                  dk7  rt9        d| j(                  › d�«       t;        | j<                  «      D ]  }	 ||«      \  }
}}Œ |re| j>                  rYdd l }ddlm!} |jE                  «        t9        d«       |jG                  d«      5   ||d¬«       d d d «       |jI                  «        |rò| jJ                  ræt        jL                  jO                  t        jL                  jP                  jR                  t        jL                  jP                  jT                  gd¬«      5 }t9        d«       t        jL                  jW                  d«      5   ||«       d d d «       d d d «       t9        jY                  «       j[                  dd¬«      «       |j]                  d«       | j^                  dk(  r	 d d d «       d d d «       y t9        d| j^                  › d�«       ta        j`                  «       }t;        | j^                  «      D ]/  }	 ||«      \  }
}}|sŒt        j                  jc                  «        Œ1 �n‡|d   |d   |d   |d   |d    |d!   |d"   |d#   f}te        || jf                  ¬$«      }|rA| j(                  dk7  r2t        j*                  |j.                  | j(                  dd	¬
«      |_        t;        | j<                  «      D ]  }	 ||Ž \  }}}Œ |rc| j>                  rWdd l }ddlm!} |jE                  «        t9        d%«       |jG                  d«      5   ||d&diŽ d d d «       |jI                  «        |rï| jJ                  rãt        jL                  jO                  t        jL                  jP                  jR                  t        jL                  jP                  jT                  gd¬«      5 }t9        d'«       t        jL                  jW                  d(«      5   ||Ž  d d d «       d d d «       t9        jY                  «       j[                  dd¬«      «       |j]                  d)«       | j^                  dk(  r	 d d d «       d d d «       y t9        d| j^                  › d�«       ta        j`                  «       }t;        | j^                  «      D ],  }	 ||Ž \  }}}|sŒt        j                  jc                  «        Œ. ta        j`                  «       }||z
  | j^                  z  cd d d «       cd d d «       S # 1 sw Y   �ŒdxY w# 1 sw Y   �Œ°xY w# 1 sw Y   �ŒµxY w# 1 sw Y   �ŒüxY w# 1 sw Y   �ŒKxY w# 1 sw Y   �ŒPxY w# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)*Nrk   r   é   T)Údevice_typer5   Úenabled)r   r   ÚnoneF)ÚmodeÚ	fullgraphÚdynamicrC   )r   r5   zBRunning warm up. It will take a while since torch compile mode is ú.©Úcudartz#Start nvtx profiling on encoder ...Úone_run)r'   )Ú
activitiesÚrecord_shapesz$Start torch profiling on encoder ...ÚencoderÚcuda_time_totalé
   )Úsort_byÚ	row_limitztorch_image_encoder.jsonzStart z runs of performance tests...rJ   rK   rL   rM   rN   rO   rP   rQ   )Úmultimask_outputz"Start nvtx profiling on decoder...r'   z$Start torch profiling on decoder ...Údecoderztorch_image_decoder.json)4r   ÚtyperR   rk   Úget_device_propertiesÚmajorr#   ÚbackendsÚmatmulÚ
allow_tf32Úcudnnr5   r^   rZ   Úinference_modeÚautocastr	   r   r   r   r4   Úcompiler   ÚforwardrA   rS   Útor   ri   Úranger&   r'   Únvtxr�   ÚcudaProfilerStartÚannotateÚcudaProfilerStopr)   ÚprofilerÚprofileÚProfilerActivityÚCPUÚCUDAÚrecord_functionÚkey_averagesÚtableÚexport_chrome_tracer*   r€   Úsynchronizer   r"   )re   rˆ   Úis_cudaÚenabled_auto_castÚ
ort_inputsÚ
sam2_modelÚimage_shapeÚimgÚsam2_encoderrƒ   Ú_image_features_0Ú_image_features_1Ú_image_embeddingsr¨   r�   Úprofr‚   Útorch_inputsÚsam2_decoderÚ_masksÚ_iou_predictionsÚ_low_res_masksr„   s                          r7   Ú	run_torchrÆ   Ÿ   sj  € Ø—-‘-×$Ñ$€KØ˜VÑ#€Gñ ”5—:‘:×3Ñ3°AÓ6×<Ñ<ÀÒAÀfÇoÂoØ04Œ�‰×Ñ×"Ñ"Ô-Ø*.Œ�‰×ÑÔ'àÒA F§L¡L´E·M±MÑ$AÐØ×%Ñ%Ó'€Jä	×	Ñ	Ó	ñ p.¤§¡¸KÈvÏ|É|ÐevÔ!wñ p.Ü$ V§_¡_°f×6GÑ6GÐPV×P]ÑP]Ô^ˆ
Ø×Ñ˜Ó.Ù˜6×4Ñ4¸Ò>Ü38·=±=Ø×,Ñ,×4Ñ4Ø×2Ñ2Ø"Ø!ô	4�
×(Ñ(Ô0ð !×+Ñ+Ó-¨gÑ6ˆKÜ—+‘+˜kÓ*×-Ñ-°V·]±]È&Ï,É,Ð-ÓWˆCÜ+¨JÓ7ˆLá˜6×4Ñ4¸Ò>ÜÐZÐ[a×[tÑ[tÐZuÐuvÐwÔxä˜6Ÿ>™>Ó*ò \�ÙJVÐWZÓJ[ÑGÐ!Ð#4Ñ6Gð\ñ ˜6×5Ò5ÛÝ'à×(Ñ(Ô*ÜÐ;Ô<Ø—]‘] 9Ó-ñ @Ù  ¸$Õ?÷@à×'Ñ'Ô)á˜6×6Ò6Ü—^‘^×+Ñ+Ü %§¡× ?Ñ ?× CÑ CÄUÇ^Á^×EdÑEd×EiÑEiÐjØ"&ð ,ó ð *ð ÜÐ@ÔAÜŸ™×7Ñ7¸	ÓBñ *Ù$ SÔ)÷*÷*ô �d×'Ñ'Ó)×/Ñ/Ð8IÐUWÐ/ÓXÔYØ×(Ñ(Ð)CÔDà�~‰~ Ò"Ø÷Wp.÷ p.ð p.ôZ �F˜6Ÿ>™>Ð*Ð*GÐHÔIÜ—I‘I“KˆEÜ˜6Ÿ>™>Ó*ò -�ÙJVÐWZÓJ[ÑGÐ!Ð#4Ð6GÚÜ—J‘J×*Ñ*Õ,ò-ð Ð-Ñ.ØÐ-Ñ.ØÐ-Ñ.Ø˜>Ñ*Ø˜>Ñ*Ø˜=Ñ)ØÐ,Ñ-ØÐ0Ñ1ð	ˆLô ,ØØ!'×!9Ñ!9ôˆLñ
 ˜6×4Ñ4¸Ò>Ü',§}¡}Ø ×(Ñ(Ø×2Ñ2Ø"Ø!ô	(�Ô$ô ˜6Ÿ>™>Ó*ò W�Ù;GÈÐ;VÑ8�Ð(©.ðWñ ˜6×5Ò5ÛÝ'à×(Ñ(Ô*ÜÐ:Ô;Ø—]‘] 9Ó-ñ JÙ  ,ÐIÀDÒI÷Jà×'Ñ'Ô)á˜6×6Ò6Ü—^‘^×+Ñ+Ü %§¡× ?Ñ ?× CÑ CÄUÇ^Á^×EdÑEd×EiÑEiÐjØ"&ð ,ó ð 4ð ÜÐ@ÔAÜŸ™×7Ñ7¸	ÓBñ 4Ù$ lÑ3÷4÷4ô �d×'Ñ'Ó)×/Ñ/Ð8IÐUWÐ/ÓXÔYØ×(Ñ(Ð)CÔDà�~‰~ Ò"Ø÷Mp.÷ p.ð p.ôP �F˜6Ÿ>™>Ð*Ð*GÐHÔIÜ—I‘I“KˆEÜ˜6Ÿ>™>Ó*ò -�Ù;GÈÐ;VÑ8�Ð(¨.ÚÜ—J‘J×*Ñ*Õ,ð-ô
 �i‰i‹kˆØ�e‘˜vŸ~™~Ñ-÷ap.÷ p.ò p.÷6@ñ @ú÷*ñ *ú÷*ñ *ú÷lJñ Jú÷4ñ 4ú÷4ñ 4ú÷wp.ð p.ú÷ p.÷ p.ñ p.úsá   Ã##]ÄF ]Ê[3ÊB]Ì+\Í		\ 	Í\ÍA]Î-]Î>A]ÐD]Ô	\Ô B]Ö-+\4×\'	×\4×&A]Ø9]Ù
A]ÚA]Û 	]Û3[=Û8]Ü \
Ü\Ü\Ü]Ü\$Ü]Ü'\1Ü,\4Ü4\>Ü9]Ý]
	Ý]Ý]ÚargsÚ
csv_writerc                 ób	  — | j                   }| j                  }| j                  }|r7t        j                  j                  «       }t        j                  d|«      }d}nd}t        j                  d«      }d}d}t        j                  t        j                  t        j                  dœ}t        d+i d| j                  “d	| j                  “d
| j                  “d| j                  “d|“d| j                  “d| j                   “d| j"                  “d|“dd“d|“d|| j$                     “d| j&                  “d| j                  “d| j(                  “d| j*                  “d| j,                  “d| j.                  “d| j0                  “dd“Ž}	| j2                  dk(  �rSt5        «       }
| j6                  |
_        |	j,                  rd|
_        d|
_        d|
_        t?        |	|
«      }|	jA                  «       }	 tC        |	j(                  «      D ]  }tE        ||«      }Œ 	 |	j*                  rUdd l%}dd!lm&} |jO                  «        |jQ                  d"«      5  |jS                  |«      }d d d «       |jU                  «        |	j,                  r|jV                  jY                  «        |dk(  ry g }tC        |«      D ]  }tE        ||«      }|j[                  |«       Œ! t]        j^                  |«      }~n0t        j`                  «       5  	 tc        |	«      }	 d d d «       |dk(  ry | j2                  d#z   |rdndz   }i d| j                  “d| j                  “d| j$                  “d$|“d|“d|	j&                  “d|	jd                  “d| j                  “d| j                   “d| j"                  “d%| jf                  “d&|	jh                  “d'|	jj                  “d(|	jl                  “d)| j6                  “d|	j(                  “d|“| j*                  | j0                  |d*œ¥}|�|jo                  |«       tI        tq        |	«      › «       tI        |› «       y # tF        $ r}tI        d|	›d |› �«       Y d }~y d }~ww xY w# 1 sw Y   �Œ
xY w# tF        $ r#}tI        d|	›d |› �«       Y d }~d d d «       y d }~ww xY w# 1 sw Y   �ŒšxY w),Nrk   rg   r   ÚcpuFr   ©Úfp32Úfp16Úbf16r   r   r   r   r3   r   r   r   r   r#   Tr$   r5   r%   r*   r&   r'   r(   r)   r4   r+   Úorté   zFailed to run config=z. Exception: r�   r‘   ú:Úuse_gpur"   r   r    r!   Úintra_op_num_threads)r'   r4   ÚengineÚaverage_latencyrd   )9rÒ   Úuse_cuda_graphr*   rR   rk   rl   r   r^   Úfloat16Úbfloat16r   r   r   r   r   r   r   r   r5   r%   r&   r'   r(   r)   r4   rÔ   r   rÓ   Úenable_profilingÚlog_severity_levelÚlog_verbosity_levelrw   rZ   r§   r…   Ú	Exceptionri   r¨   r�   r©   rª   r}   r«   rr   Úend_profilingÚappendÚ
statisticsÚmeanÚno_gradrÆ   r#   r™   r   r    r!   Úwriterowr<   )rÇ   rÈ   rÒ   r$   r*   rp   r   r3   Údtypesre   Úsess_optionsÚsessionr�   rƒ   Úer¨   r�   Úlatency_listÚlatencyrÕ   rÔ   Úrows                         r7   Úrun_testrê     sõ  € ð —L‘L€GØ"×1Ñ1ÐØ—<‘<€GáÜ—J‘J×-Ñ-Ó/ˆ	Ü—‘˜f iÓ0ˆØ*‰àˆ	Ü—‘˜eÓ$ˆØ!ÐØ)ˆä—m‘m¬U¯]©]ÄEÇNÁNÑS€FÜò Ø—?’?ðà—.’.ðð —’ðð —.’.ð	ñ
 ðð —?’?ðð �{Š{ðð �jŠjðñ ðñ ðñ ,ðð �T—Z‘ZÒ ðð ×$Ò$ðð —’ðð —’ðð  !×4Ò4ð!ð"  ×2Ò2ð#ð$ "×6Ò6ð%ð&  ×2Ò2ð'ñ( ð)€Fð. ‡{�{�eÓÜ%Ó'ˆØ,0×,EÑ,EˆÔ)Ø×$Ò$Ø,0ˆLÔ)Ø./ˆLÔ+Ø/0ˆLÔ,ä  ¨Ó6ˆØ×)Ñ)Ó+ˆ
ð	Ü˜6Ÿ>™>Ó*ò 9�Ü# G¨ZÓ8‘ñ9ð ×%Ò%ÛÝ#à×$Ñ$Ô&Ø—‘˜yÓ)ñ .Ø—M‘M *Ó-�÷.à×#Ñ#Ô%à×$Ò$Ø×Ñ×-Ñ-Ô/à�aŠ<ØàˆÜ�w“ò 	)ˆAÜ% g¨zÓ:ˆGØ×Ñ Õ(ð	)ô %Ÿ/™/¨,Ó7ˆáä�]‰]‹_ñ 	ðÜ"+¨FÓ"3‘÷	ð �aŠ<Øà�[‰[˜3Ñ©G¡&¸Ñ?€FðØ�d—o‘oðà�T—^‘^ðð 	�—‘ðð 	�7ð	ð
 	Ð.ðð 	�v×)Ñ)ðð 	�F—O‘Oðð 	�d—o‘oðð 	�$—+‘+ðð 	�—‘ðð 	˜T×2Ñ2ðð 	�f×'Ñ'ðð 	�f×'Ñ'ðð 	�V×%Ñ%ðð 	 × 9Ñ 9ðð  	�6—>‘>ð!ð" 	�7ð#ð$  $×7Ñ7Ø"×5Ñ5ØØ*ò+€Cð0 ÐØ×Ñ˜CÔ ä	ŒT�&‹\ˆNÔÜ	ˆSˆE…OøôE ò 	ÜÐ* 6 )¨=¸¸Ð<Ô=Üûð	ú÷.ñ .ûô* ò ÜÐ. v i¨}¸Q¸CÐ@ÔAÛ÷	ð 	ûðú÷	ñ 	úsT   Ç0&Q ÉQ(Ë>R$Ì Q5Ñ	Q%Ñ
Q Ñ Q%Ñ(Q2Ñ5	R!Ñ>RÒR$ÒR!Ò!R$Ò$R.c                 óT  — | j                   rdnd}dj                  || j                  t        j                  «       j                  d«      «      }t        |dd¬«      5 }g d¢}t        j                  ||¬	«      }|j                  «        t        | |«       d d d «       y # 1 sw Y   y xY w)
NÚgpurÊ   zbenchmark_sam_{}_{}_{}.csvz%Y%m%d-%H%M%SÚaÚ )r‹   Únewline)r   r   r5   rÒ   r$   r%   r#   r   r   r   r"   r   r    r!   rÓ   r&   r*   r'   r4   rÔ   rÕ   )Ú
fieldnames)rÒ   ÚformatrÔ   r   ÚnowÚstrftimeÚopenÚcsvÚ
DictWriterÚwriteheaderrê   )rÇ   ÚfeaturesÚcsv_filenameÚcsv_fileÚcolumn_namesrÈ   s         r7   Úrun_perf_testrü   œ  s‘   € ØŸš‰u¨%€HØ/×6Ñ6ØØ�‰Ü�‰‹×Ñ Ó0ó€Lô
 
ˆl ¨bÔ	1ð #°Xò
ˆô. —^‘^ H¸ÔFˆ
Ø×ÑÔ ä��zÔ"÷7#÷ #ñ #ús   Á8BÂB'c                  ó~  — t        j                  d¬«      } | j                  ddddgdd¬«       | j                  d	dg d
¢dd¬«       | j                  dddd¬«       | j                  d¬«       | j                  dddd¬«       | j                  d¬«       | j                  ddt        g d¢dd¬«       | j                  ddt        dd¬«       | j                  ddt        dd ¬«       | j                  d!dt        dd"¬«       | j                  d#dt        d$d%¬«       | j                  d&dt        d'd(¬«       | j                  d)dt
        d*d*d+gd,¬-«       | j                  d.dddd/¬0«       | j                  d1dddd2¬0«       | j                  d3dddd4¬0«       | j                  d5dddd6¬0«       | j                  d7dddd8¬0«       | j                  d9dt
        d:g d;¢d<¬-«       | j                  d=dt
        d>d?¬«       | j                  d@dt
        dAdB¬«       | j                  dCdt
        d g dD¢dE¬-«       | j                  «       }|S )FNz,Benchmark SMA2 for ONNX Runtime and PyTorch.)Údescriptionz--componentFr   Úimage_decoderzDcomponent to benchmark. Choices are image_encoder and image_decoder.)ÚrequiredÚchoicesÚdefaultÚhelpz--dtyperË   rÌ   zData type for inference.z	--use_gpuÚ
store_truezUse GPU for inference.)r   Úactionr  )rÒ   z--use_cuda_graphzUse cuda graph in onnxruntime.)rÖ   z--intra_op_num_threads)r   r   rI   rÐ   r‡   é   r   z&intra_op_num_threads for onnxruntime. )r   r›   r  r  r  z--batch_sizer   z
batch size)r   r›   r  r  z--heightr   zimage heightz--widthzimage widthz	--repeatsr   z8number of repeats for performance test. Default is 1000.z	--warm_upr   z)number of runs for warm up. Default is 5.z--enginerÏ   rR   zengine for inference)r   r›   r  r  r  z--multimask_outputz:Export mask_decoder or image_decoder with multimask_output)r   r  r  r  z--prefer_nhwcz;Use prefer_nhwc=1 provider option for CUDAExecutionProviderz--enable_nvtx_profilezVEnable nvtx profiling. It will add an extra run for profiling before performance test.z--enable_ort_profilezEnable ORT profiling.z--enable_torch_profilezYEnable PyTorch profiling. It will add an extra run for profiling before performance test.z--model_typer0   r-   zsam2 model namez
--sam2_dirz./segment-anything-2z6The directory of segment-anything-2 git root directoryz--onnx_pathz6./sam2_onnx_models/sam2_hiera_large_image_encoder.onnxzpath of onnx modelz--torch_compile_mode)zreduce-overheadr   zmax-autotune-no-cudagraphsrŠ   z4torch compile mode. none will disable torch compile.)ÚargparseÚArgumentParserÚadd_argumentÚset_defaultsr`   r_   Ú
parse_args)ÚparserrÇ   s     r7   Ú_parse_argumentsr  Á  s&  € Ü×$Ñ$Ð1_Ô`€Fà
×ÑØØØ  /Ð2ØØSð ô ð ×ÑØ˜EÒ+CÈVÐZtð ô ð ×ÑØØØØ%ð	 ô ð ×Ñ ÐÔ&à
×ÑØØØØ-ð	 ô ð ×Ñ uÐÔ-à
×ÑØ ØÜÚ#ØØ5ð ô ð ×ÑØØÜØØð ô ð ×ÑØØÜØØð ô ð ×ÑØØÜØØð ô ð ×ÑØØÜØØGð ô ð ×ÑØØÜØØ8ð ô ð ×ÑØØÜØØ˜Ð Ø#ð ô ð ×ÑØØØØØIð ô ð ×ÑØØØØØJð ô ð ×ÑØØØØØeð ô ð ×ÑØØØØØ$ð ô ð ×ÑØ ØØØØhð ô ð ×ÑØØÜØ"ÚcØð ô ð ×ÑØØÜØ&ØEð ô ð ×ÑØØÜØHØ!ð ô ð ×ÑØØÜØÚYØCð ô ð ×ÑÓ€Dà€Kr9   Ú__main__z
arguments:r   r   rŠ   rÏ   rg   Fr;   )-r~   r  rõ   rß   r€   Úcollections.abcr   r   rR   rÿ   r   r   r   Ú
sam2_utilsr   r   r	   Úonnxruntimer
   r   r   Ú*onnxruntime.transformers.io_binding_helperr   r   rs   rw   ry   r…   rÆ   Ú	Namespacerö   rê   rü   r  r[   rÇ   ri   r4   r   rÒ   rk   Úis_availablerÔ   r)   r'   rd   r9   r7   ú<module>r     s”  ðñó Û 
Û Û Ý #Ý ã Ý *Ý *ß NÑ Nç QÑ QÝ B÷Wñ Wñt˜zð ÐDTó ñ$˜:ð Àó ÷6ñ 6ð +ó ð|.�jó |.ðB )-ñ{Ø
×
Ñ
ð{à—‘ Ñ%ó{ò|"#òJeðP ˆzÒÙÓ€DÙ	ˆJ�t�fÐ
Ôà×ÑÐ&à48·N±NÀoÒ4U¡.Ð[aˆÔà‡|‚|Ø�z‰z×&Ñ&Ô(Ð(Ð(Ø�;‰;˜%ÒØ*Ñ.EÓ.GÑGÐGÐGØ(-ˆDÕ%ð ×+Ò+Ð+Ð+Ø×,Ò,Ð,Ð,à×Ò 4×#<Ò#<Ù��á�dÕð+ r9   