Ë
    cQêj¦Á  ã                   óŒ  — d dl Z d dlZd dl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	Z	d dl
mZ dddddd	d
dddœ	ZddddœZd„ Zd„ Zd?d„Zdededefd„Zdedededefd„Zdededededef
d„Z	 d@ded ed!efd"„Zd#efd$„Z	 d@ded efd%„Z	 d@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	 	 	 dAdededed-efd.„Z	 	 dBded efd/„Z	 	 dBdeded&ededed'ed(eded)ed*ed-ed!efd0„Z	 	 dCd1ed2ededed'ed(eded)ed*ed3ed4ed5efd6„Z	 	 	 dDd1ed2edededed'ed(eded)ed*ed3ed4ed5ed!efd7„Z 	 	 	 dDd1ed2ededed'ed(eded)ed*ed3ed4ed!efd8„Z!	 	 	 dDd1ed2ededed'ed(eded)ed*ed3ed4ed!efd9„Z"	 dEd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$dEd<„Z%d=„ Z&e'd>k(  rd dl(Z(	  e&«        yy# e)$ r!  e(jT                   ejV                  «       Ž  Y yw xY w)Fé    N)ÚPath©Úmeasure_memoryzrunwayml/stable-diffusion-v1-5zstabilityai/stable-diffusion-2z stabilityai/stable-diffusion-2-1z+stabilityai/stable-diffusion-xl-refiner-1.0z/stabilityai/stable-diffusion-3-medium-diffusersz'stabilityai/stable-diffusion-3.5-mediumz&stabilityai/stable-diffusion-3.5-largez black-forest-labs/FLUX.1-schnellzblack-forest-labs/FLUX.1-dev)	ú1.5z2.0ú2.1zxl-1.0z3.0Mz3.5Mz3.5LzFlux.1SzFlux.1DÚCUDAExecutionProviderÚMIGraphXExecutionProviderÚTensorrtExecutionProvider)ÚcudaÚmigraphxÚtensorrtc                  ó   — g d¢} d}| |fS )N)
z.a photo of an astronaut riding a horse on marsz@cute grey cat with blue eyes, wearing a bowtie, acrylic paintingzia cute magical flying dog, fantasy art drawn by disney concept artists, highly detailed, digital paintingzdan illustration of a house with large barn with many cute flower pots and beautiful blue sky sceneryzgone apple sitting on a table, still life, reflective, full color photograph, centered, close-up productzWbackground texture of stones, masterpiece, artistic, stunning photo, award winner photozSnew international organic style house, tropical surroundings, architecture, 8k, hdrznbeautiful Renaissance Revival Estate, Hobbit-House, detailed painting, warm colors, 8k, trending on Artstationzcblue owl, big green eyes, portrait, intricate metal design, unreal engine, octane render, realisticzldelicate elvish moonstone necklace on a velvet background, symmetrical intricate motifs, leaves, flowers, 8kz*bad composition, ugly, abnormal, malformed© )ÚpromptsÚnegative_prompts     ú/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/models/stable_diffusion/benchmark.pyÚexample_promptsr   &   s   € ò€Gð C€Oà�OÐ#Ð#ó    c                   ó   — y)N)zwarm upÚbadr   r   r   r   Úwarmup_promptsr   9   s   € Ør   c                 ó    — t        d|| |¬«      S )NT)Úis_gpuÚfuncÚmonitor_typeÚstart_memoryr   )r   r   r   s      r   Úmeasure_gpu_memoryr   =   s   € Ü ¨D¸|ÐZfÔgÐgr   Ú
model_nameÚ	directoryÚdisable_safety_checkerc                 óp  — ddl m}m} dd l}|�Ft        j
                  j                  |«      sJ ‚|j                  «       }|j                  |||¬«      }n|j                  | d|d¬«      }|j                  |j                  j                  «      |_
        |j                  d¬«       |rd |_        d |_        |S )Nr   )ÚDDIMSchedulerÚOnnxStableDiffusionPipeline)ÚproviderÚsess_optionsÚonnxT)Úrevisionr$   Úuse_auth_token©Údisable)Ú	diffusersr"   r#   ÚonnxruntimeÚosÚpathÚexistsÚSessionOptionsÚfrom_pretrainedÚfrom_configÚ	schedulerÚconfigÚset_progress_bar_configÚsafety_checkerÚfeature_extractor)	r   r   r$   r    r"   r#   r,   Úsession_optionsÚpipes	            r   Úget_ort_pipeliner:   A   sº   € ßDãàÐÜ�w‰w�~‰~˜iÔ(Ð(Ð(Ø%×4Ñ4Ó6ˆØ*×:Ñ:ØØØ(ð ;ó 
‰ð +×:Ñ:ØØØØð	 ;ó 
ˆð #×.Ñ.¨t¯~©~×/DÑ/DÓE€D„NØ× Ñ ¨Ð Ô.áØ"ˆÔØ!%ˆÔà€Kr   Úenable_torch_compileÚuse_xformersc                 óŒ  — d| v r‹ddl m} |j                  | t        j                  ¬«      j                  d«      }|rQ|j                  j                  t        j                  ¬«       t        j                  |j                  dd¬	«      |_        |S d
| v r‹ddl m	} |j                  | t        j                  ¬«      j                  d«      }|rQ|j                  j                  t        j                  ¬«       t        j                  |j                  dd¬	«      |_        |S ddl m
}m} ddlm}	m}
 |j                  | |
¬«      j                  d«      }|j                  j                  |	¬«       |r|j                  «        |rwt        j                  |j                  «      |_        t        j                  |j                  «      |_        t        j                  |j                   «      |_        t#        d«       |j%                  |j&                  j(                  «      |_        |j+                  d¬«       |rd |_        d |_        |S )NÚFLUXr   )ÚFluxPipeline)Útorch_dtyper   )Úmemory_formatzmax-autotuneT)ÚmodeÚ	fullgraphzstable-diffusion-3)ÚStableDiffusion3Pipeline)r"   ÚStableDiffusionPipeline)Úchannels_lastÚfloat16z)Torch compiled unet, vae and text_encoderr)   )r+   r?   r1   ÚtorchÚbfloat16ÚtoÚtransformerrF   ÚcompilerD   r"   rE   rG   ÚunetÚ*enable_xformers_memory_efficient_attentionÚvaeÚtext_encoderÚprintr2   r3   r4   r5   r6   r7   )r   r    r;   r<   r?   r9   rD   r"   rE   rF   rG   s              r   Úget_torch_pipelinerR   _   s¿  € Ø�ÑÝ*à×+Ñ+¨JÄEÇNÁNÐ+ÓS×VÑVÐW]Ó^ˆÙØ×Ñ×Ñ¬e×.AÑ.AÐÔBÜ$Ÿ}™}¨T×-=Ñ-=ÀNÐ^bÔcˆDÔØˆà˜zÑ)Ý6à'×7Ñ7¸
ÔPU×P^ÑP^Ð7Ó_×bÑbÐciÓjˆÙØ×Ñ×Ñ¬e×.AÑ.AÐÔBÜ$Ÿ}™}¨T×-=Ñ-=ÀNÐ^bÔcˆDÔØˆç@ß,à"×2Ñ2°:È7Ð2ÓS×VÑVÐW]Ó^€Dà‡I�I‡L�L˜}€LÔ-áØ×7Ñ7Ô9áÜ—M‘M $§)¡)Ó,ˆŒ	Ü—=‘= §¡Ó*ˆŒÜ!ŸM™M¨$×*;Ñ*;Ó<ˆÔÜÐ9Ô:à"×.Ñ.¨t¯~©~×/DÑ/DÓE€D„NØ× Ñ ¨Ð Ô.áØ"ˆÔØ!%ˆÔà€Kr   ÚengineÚ
batch_sizeÚstepsc                 óv   — |j                  d«      d   j                  dd«      }| › d|› d|› d|› �|rdz   S d	z   S )
Nú/éÿÿÿÿzstable-diffusion-ÚsdÚ_Ú_bÚ_sÚ Ú_safe)ÚsplitÚreplace)rS   r   rT   rU   r    Úshort_model_names         r   Úget_image_filename_prefixrb   Œ   sV   € Ø!×'Ñ'¨Ó,¨RÑ0×8Ñ8Ð9LÈdÓSÐØˆX�QÐ'Ð(¨¨:¨,°b¸¸Ð@ÑJ`ÀBÑnÐnÐfmÑnÐnr   Úimage_filename_prefixÚskip_warmupc                 óŒ  ‡ ‡‡‡‡‡
— ddl m} t        ‰ |«      sJ ‚t        «       \  }}ˆˆˆ ˆ
ˆˆfd„}t	        |	||«      }t	        |	||«      } |«        g }t        |«      D ]¦  \  }}||k\  r nœt        j                  «       } ‰ |g‰z  ‰‰‰|g‰z  ¬«      j                  }t        j                  «       }||z
  }|j                  |«       t        d|d›d�«       t        |«      D ]  \  }}|j                  |› d|› d|› d	�«       Œ! Œ¨ dd
lm} d|‰‰‰‰||t        |«      t        |«      z  t        j                   |«      ||dœS )Nr   )r#   c                  óP   •— ‰ry t        «       \  } } ‰| g‰z  ‰‰‰|g‰z  ¬«       y )N©ÚpromptÚheightÚwidthÚnum_inference_stepsr   ©r   )rh   ÚnegativerT   ri   r9   rd   rU   rj   s     €€€€€€r   Úwarmupz run_ort_pipeline.<locals>.warmup¤   s;   ø€ ÙØÜ)Ó+Ñˆ�ÙØ�8˜jÑ(ØØØ %Ø%˜J¨Ñ3ö	
r   rg   úInference took ú.3fú secondsrZ   ú.jpg©Ú__version__r,   ©rS   Úversionri   rj   rU   rT   Úbatch_countÚnum_promptsÚaverage_latencyÚmedian_latencyÚfirst_run_memory_MBÚsecond_run_memory_MB)r+   r#   Ú
isinstancer   r   Ú	enumerateÚtimeÚimagesÚappendrQ   Úsaver,   rt   ÚsumÚlenÚ
statisticsÚmedian)r9   rT   rc   ri   rj   rU   rx   rw   r   Úmemory_monitor_typerd   r#   r   r   rn   Úfirst_run_memoryÚsecond_run_memoryÚlatency_listÚirh   Úinference_startr€   Úinference_endÚlatencyÚkÚimageÚort_versions   `` ```    `                r   Úrun_ort_pipeliner’   ‘   s|  ý€ õ 6ä�dÐ7Ô8Ð8Ð8ä.Ó0Ñ€Gˆ_÷

ñ 

ô *Ð*=¸vÀ|ÓTÐÜ*Ð+>ÀÈÓUÐá
„Hà€LÜ˜wÓ'ò ?‰	ˆˆ6Ø�ÒÙÜŸ)™)›+ˆÙØ�8˜jÑ(ØØØ %Ø,Ð-°
Ñ:ô
÷ ‰&ð 	ô Ÿ	™	›ˆØ /Ñ1ˆØ×Ñ˜GÔ$Ü� ¨˜}¨HÐ5Ô6Ü! &Ó)ò 	?‰HˆAˆuØ�J‰JÐ/Ð0°°!°°A°a°S¸Ð=Õ>ñ	?ð?õ$ 7ð  ØØØØØ Ø"Ø"Ü˜|Ó,¬s°<Ó/@Ñ@Ü$×+Ñ+¨LÓ9Ø/Ø 1ñð r   Úreturnc                 ó¶   — |s|rd| in	d| g|z  ini }t         j                  j                  «       r(t        j                  d¬«      j	                  d«      |d<   |S )Nr   r   )Údeviceé{   Ú	generator)rH   r   Úis_availableÚ	GeneratorÚmanual_seed)r   Úuse_num_images_per_promptÚis_fluxrT   Úkwargss        r   Úget_negative_prompt_kwargsrž   Ü   se   € ñ ñ )ð  Ñ0à# oÐ%6¸Ñ%CÑDð ð ô ‡z�z×ÑÔ Ü#Ÿo™o°VÔ<×HÑHÈÓMˆˆ{Ñà€Mr   c                 ób  ‡ ‡‡‡‡‡
‡— t        «       \  }}dd l}t        ‰ |j                  «      Šˆˆˆˆ ˆ
ˆˆfd„}t	        |	||«      }t	        |	||«      } |«        t        j                  d«       g }t        |«      D ]ì  \  }}||k\  r nât
        j                  j                  «        t        j                  «       }t        |d‰‰«      } ‰ d|g‰z  ‰‰‰dœ|¤Žj                  }t
        j                  j                  «        t        j                  «       }||z
  }|j                  |«       t        d|d›d�«       t        |«      D ]  \  }}|j                  |› d|› d|› d	�«       Œ! Œî d
t
        j                   ‰‰‰‰||t#        |«      t%        |«      z  t'        j(                  |«      ||dœS )Nr   c                  ód   •— ‰ry t        «       \  } }t        |d‰‰«      } ‰d| g‰z  ‰‰	‰dœ|¤Ž y )NF©rh   ri   rj   rk   r   ©r   rž   )
rh   rm   Úextra_kwargsrT   ri   rœ   r9   rd   rU   rj   s
      €€€€€€€r   rn   z"run_torch_pipeline.<locals>.warmup  sE   ø€ ÙØÜ)Ó+Ñˆ�Ü1°(¸EÀ7ÈJÓWˆÙÐq�V�H˜zÑ)°&ÀÐ[`ÑqÐdpÓqr   Fr¡   ro   rp   rq   rZ   rr   rH   ru   r   )r   r+   r}   r?   r   rH   Úset_grad_enabledr~   r   Úsynchronizer   rž   r€   r�   rQ   r‚   rt   rƒ   r„   r…   r†   )r9   rT   rc   ri   rj   rU   rx   rw   r   r‡   rd   r   r   r+   rn   rˆ   r‰   rŠ   r‹   rh   rŒ   r£   r€   r�   rŽ   r�   r�   rœ   s   `` ```    `                @r   Úrun_torch_pipeliner¦   ï   sÃ  þ€ ô  /Ó0Ñ€Gˆ_ãä˜˜y×5Ñ5Ó6€G÷rò rô *Ð*=¸vÀ|ÓTÐÜ*Ð+>ÀÈÓUÐá
„Hä	×Ñ˜5Ô!à€LÜ˜wÓ'ò ?‰	ˆˆ6Ø�ÒÙÜ�
‰
×ÑÔ ÜŸ)™)›+ˆÜ1°/À5È'ÐS]Ó^ˆÙð 
Ø�8˜jÑ(ØØØ %ñ	
ð
 ñ
÷ ‰&ð 	ô 	�
‰
×ÑÔ ÜŸ	™	›ˆØ /Ñ1ˆØ×Ñ˜GÔ$Ü� ¨˜}¨HÐ5Ô6Ü! &Ó)ò 	?‰HˆAˆuØ�J‰JÐ/Ð0°°!°°A°a°S¸Ð=Õ>ñ	?ð'?ð. Ü×$Ñ$ØØØØ Ø"Ø"Ü˜|Ó,¬s°<Ó/@Ñ@Ü$×+Ñ+¨LÓ9Ø/Ø 1ñð r   r$   ri   rj   rx   rw   Útuningc                 óL  — |}|r|dv r|dddœf}t        j                   «       }t        | |||«      }t        j                   «       }t        d||z
  › d�«       t        d| |||«      }t	        ||||||||	|
||¬«      }|j                  | ||j                  dd	«      |d
dœ«       |S )N)r   é   )Útunable_op_enableÚtunable_op_tuning_enableúModel loading took rq   Úort©rd   ÚExecutionProviderr]   F©r   r   r$   r    Úenable_cuda_graph)r   r:   rQ   rb   r’   Úupdater`   )r   r   r$   rT   r    ri   rj   rU   rx   rw   r   r‡   r§   rd   Úprovider_and_optionsÚ
load_startr9   Úload_endrc   Úresults                       r   Úrun_ortr·   8  sÝ   € ð  $ÐÙ�(Ð7Ñ7Ø (ÀÐ_`Ñ*aÐbÐä—‘“€JÜ˜J¨	Ð3GÐI_Ó`€DÜ�y‰y‹{€HÜ	Ð ¨:Ñ 5Ð6°hÐ
?Ô@ä5°e¸ZÈÐUZÐ\rÓsÐÜØØØØØØØØØØØô€Fð ‡M�Mà$Ø"Ø ×(Ñ(Ð)<¸bÓAØ&<Ø!&ñ	
ôð €Mr   Úuse_io_bindingc                 óê   — ddl m} |�4t        j                  j	                  |«      r|j                  |||¬«      }n&|j                  | d||¬«      }|j                  |«       |rd |_        d |_        |S )Nr   )ÚORTPipelineForText2Image)r$   r¸   T)Úexportr$   r¸   )	Úoptimum.onnxruntimerº   r-   r.   r/   r1   Úsave_pretrainedr6   r7   )r   r   r$   r    r¸   rº   Úpipelines          r   Úget_optimum_ort_pipeliner¿   l  s~   € õ =àÐ¤§¡§¡°	Ô!:Ø+×;Ñ;¸IÐPXÐiwÐ;Óx‰à+×;Ñ;ØØØØ)ð	 <ó 
ˆð 	× Ñ  Ô+áØ"&ˆÔØ%)ˆÔ"à€Or   c                 ó  ‡ ‡‡‡‡‡‡
‡‡— t        dt        ‰ «      «       ddlm} t	        ‰ |«      Št        «       \  }}ˆˆˆˆˆ ˆˆˆ
ˆf	d„}t        |	||«      }t        |	||«      } |«        t        |‰
‰‰«      }g }t        |«      D ]½  \  }}||k\  r n³t        j                  «       }‰
r ‰ d|‰‰‰‰dœ|¤Žj                  }n ‰ d|g‰z  ‰‰‰dœ|¤Žj                  }t        j                  «       }||z
  }|j                  |«       t        d|d›d	�«       t        |«      D ]  \  }}|j                  |› d
|› d
|› d�«       Œ! Œ¿ ddlm} d|‰‰‰‰‰|t        |«      t!        |«      z  t#        j$                  |«      ||dœS )NzPipeline typer   )ÚORTFluxPipelinec            	      ó†   •	— ‰ry t        «       \  } }t        |‰
‰‰«      }‰
r ‰d| ‰‰‰	‰dœ|¤Ž y  ‰d| g‰z  ‰‰‰	dœ|¤Ž y )N©rh   ri   rj   rk   Únum_images_per_promptr¡   r   r¢   )rh   rm   r£   rw   rT   ri   rœ   r9   rd   rU   r›   rj   s      €€€€€€€€€r   rn   z(run_optimum_ort_pipeline.<locals>.warmupœ  ss   ø€ ÙØÜ)Ó+Ñˆ�Ü1°(Ð<UÐW^Ð`jÓkˆÙ$Ùð ØØØØ$)Ø&1ñð óñ Ðu˜˜ :Ñ-°fÀEÐ_dÑuÐhtÓur   rÃ   r¡   ro   rp   rq   rZ   rr   rs   Úoptimum_ortru   r   )rQ   ÚtypeÚ&optimum.onnxruntime.modeling_diffusionrÁ   r}   r   r   rž   r~   r   r€   r�   r‚   r,   rt   rƒ   r„   r…   r†   )r9   rT   rc   ri   rj   rU   rx   rw   r   r‡   r›   rd   rÁ   r   r   rn   rˆ   r‰   r£   rŠ   r‹   rh   rŒ   r€   r�   rŽ   r�   r�   r‘   rœ   s   `` ``` `  ``                 @r   Úrun_optimum_ort_pipelinerÈ   ‡  sÐ  ÿø€ ô 
ˆ/œ4 ›:Ô&ÝFä˜˜Ó/€Gä.Ó0Ñ€Gˆ_÷vô vô& *Ð*=¸vÀ|ÓTÐÜ*Ð+>ÀÈÓUÐá
„Hä-¨oÐ?XÐZaÐcmÓn€Là€LÜ˜wÓ'ò ?‰	ˆˆ6Ø�ÒÙÜŸ)™)›+ˆÙ$Ùð ØØØØ$)Ø&0ñð ñ÷ ‰fñ ñ ð Ø�x *Ñ,°VÀ5Ð^cñØgsñç‰fð ô Ÿ	™	›ˆØ /Ñ1ˆØ×Ñ˜GÔ$Ü� ¨˜}¨HÐ5Ô6Ü! &Ó)ò 	?‰HˆAˆuØ�J‰JÐ/Ð0°°!°°A°a°S¸Ð=Õ>ñ	?ð+?õ0 7ð  ØØØØØ Ø"Ø"Ü˜|Ó,¬s°<Ó/@Ñ@Ü$×+Ñ+¨LÓ9Ø/Ø 1ñð r   c                 óp  — t        j                   «       }t        | ||||¬«      }t        j                   «       }t        d||z
  › d�«       |r| dz   t        |«      j                  z   n| }t        d||||«      }t        ||||||||	|
||¬«      }|j                  | ||j                  dd«      |d	d
œ«       |S )N©r¸   r¬   rq   rZ   Úoptimumr®   r¯   r]   Fr°   )	r   r¿   rQ   r   Únamerb   rÈ   r²   r`   )r   r   r$   rT   r    ri   rj   rU   rx   rw   r   r‡   r¸   rd   r´   r9   rµ   Úfull_model_namerc   r¶   s                       r   Úrun_optimum_ortrÎ   á  sä   € ô  —‘“€JÜ#Ø�I˜xÐ)?ÐP^ô€Dô �y‰y‹{€HÜ	Ð ¨:Ñ 5Ð6°hÐ
?Ô@áAJ�j 3Ñ&¬¨i«×)=Ñ)=Ò=ÐPZ€OÜ5Ø�? J°Ð7MóÐô &ØØØØØØØØØØØô€Fð ‡M�Mà$Ø"Ø ×(Ñ(Ð)<¸bÓAØ&<Ø!&ñ	
ôð €Mr   Úwork_dirrv   Úmax_batch_sizeÚnvtx_profileÚuse_cuda_graphc                 óÀ  ‡‡‡‡‡-— t        d«       ddlm}  |«        ‰|k  sJ ‚ddlm}  ||«      }|j                  «       }ddlm}m} ddl	m
} |j                  } || ||«      \  }}}}} ||d|d|||||¬	«	      Š-‰-j                  j                  |||d
‰‰‰dddt        j                  j!                  «       ¬«       ‰-j#                  ‰‰‰«       ˆˆˆ-ˆˆfd„}t%        |
||	«      }t%        |
||	«      } |«        t'        d|‰‰|«      }g }t)        «       \  } }!t+        | «      D ]¬  \  }"}#|"|k\  r n¢t-        j,                  «       }$‰-j/                  |#g‰z  |!g‰z  ‰‰‰dd¬«      \  }%}&t-        j,                  «       }'|'|$z
  }(|j1                  |(«       t        d|(d›d|&› �«       t+        |%«      D ]  \  })}*|*j3                  |› d|"› d|)› d�«       Œ! Œ® ‰-j5                  «        ddlm}+ ddlm}, i d|j=                  «       “dd“d|,“dd|+› d�“d|“d ‰“d!‰“d"‰“d#‰“d$|“d%|“d&t?        |«      tA        |«      z  “d'tC        jD                  |«      “d(|“d)|“d*|“d+|“S ),Nzd[I] Initializing ORT TensorRT EP accelerated StableDiffusionXL txt2img pipeline (static input shape)r   ©Úinit_trt_plugins©ÚPipelineInfo©Ú
EngineTypeÚget_engine_paths©rE   ÚDDIMF©r3   Ú
output_dirÚverboserÑ   rÐ   rÒ   Úframework_model_dirÚengine_typeé   T)Úopt_image_heightÚopt_image_widthÚopt_batch_sizeÚstatic_batchÚstatic_image_shapeÚmax_workspace_sizeÚ	device_idc                  ó\   •— t        «       \  } }‰j                  | g‰z  |g‰z  ‰‰‰¬«       y ©N)Údenoising_steps©r   Úrun)rh   rm   rT   ri   r¾   rU   rj   s     €€€€€r   rn   z"run_ort_trt_static.<locals>.warmupZ  s5   ø€ Ü)Ó+Ñˆ�Ø�‰�f�X 
Ñ*¨X¨J¸Ñ,CÀVÈUÐdiˆÕjr   Úort_trtg      @r–   ©rì   ÚguidanceÚseedúEnd2End took rp   ú seconds. Inference latency: rZ   rr   rs   r   rS   r,   rv   r$   z	tensorrt(ú)r   ri   rj   rU   rT   rw   rx   ry   rz   r{   r|   r    r±   )#rQ   Útrt_utilitiesrÕ   Údiffusion_modelsr×   Ú
short_nameÚengine_builderrÙ   rÚ   Úpipeline_stable_diffusionrE   ÚORT_TRTÚbackendÚbuild_enginesrH   r   Úcurrent_deviceÚload_resourcesr   rb   r   r~   r   rî   r�   r‚   Úteardownr   rt   r,   rÌ   rƒ   r„   r…   r†   ).rÏ   rv   rT   r    ri   rj   rU   rx   rw   r   r‡   rÐ   rÑ   rÒ   rÕ   r×   Úpipeline_inforø   rÙ   rÚ   rE   rá   Úonnx_dirÚ
engine_dirrÞ   rà   rZ   rn   rˆ   r‰   rc   rŠ   r   r   r‹   rh   rŒ   r€   Úpipeline_timer�   rŽ   r�   r�   Útrt_versionr‘   r¾   s.     ` ```                                      @r   Úrun_ort_trt_staticr    sC  ü€ ô  
Ð
pÔqõ /áÔà˜Ò'Ð'Ð'å-á  Ó)€MØ×)Ñ)Ó+€Jç;ÝAà×$Ñ$€KÙ?OÐPXÐZgÐitÓ?uÑ<€Hˆj˜*Ð&9¸1ñ 'ØØØØØ!Ø%Ø%Ø/Øô
€Hð ×Ñ×"Ñ"ØØØØ
ØØØ!ØØØÜ—*‘*×+Ñ+Ó-ð #ô ð  ×Ñ˜F E¨:Ô6÷kð kô *Ð*=¸vÀ|ÓTÐÜ*Ð+>ÀÈÓUÐá
„Hä5°iÀÈZÐY^Ð`vÓwÐà€LÜ.Ó0Ñ€Gˆ_Ü˜wÓ'ò ?‰	ˆˆ6Ø�ÒÙÜŸ)™)›+ˆà (§¡ØˆH�zÑ!ØÐ 
Ñ*ØØØ!ØØð !-ó !
Ñˆ�ô Ÿ	™	›ˆØ /Ñ1ˆØ×Ñ˜GÔ$Ü�˜g c˜]Ð*GÈÀÐWÔXÜ! &Ó)ò 	?‰HˆAˆuØ�J‰JÐ/Ð0°°!°°A°a°S¸Ð=Õ>ñ	?ð%?ð* ×ÑÔå3å6ðØ�m×(Ñ(Ó*ðà�-ðð 	�;ðð 	�i ˜}¨AÐ.ð	ð
 	�Zðð 	�&ðð 	�ðð 	�ðð 	�jðð 	�{ðð 	�{ðð 	œ3˜|Ó,¬s°<Ó/@Ñ@ðð 	œ*×+Ñ+¨LÓ9ðð 	Ð/ðð 	Ð 1ðð  	!Ð"8ð!ð" 	˜^ð#ð r   c                 óâ  ‡‡‡‡‡‡1— t        d«       ddlm} ddlm}  |«        ‰|k  sJ ‚ddlm}  ||«      }ddlm}m	} ddl
m} |j                  } || ||«      \  }}}}} ||d|d	||d
|¬«      Š1‰1j                  j                  |||d‰‰‰d
d
d	|¬«       t        ‰1j                  j!                  «       ‰1j                  j!                  «       «      }|j#                  |«      \  }}‰1j                  j%                  |«       ‰1j'                  ‰‰‰«       ˆˆˆ1ˆˆˆfd„} t)        || |
«      }!t)        || |
«      }" | «        t+        d|‰‰|«      }#g }$t-        «       \  }%}&t/        |%«      D ]«  \  }'}(|'|k\  r n¡t1        j0                  «       })‰1j3                  |(g‰z  |&g‰z  ‰‰‰d¬«      \  }*}+t1        j0                  «       },|,|)z
  }-|$j5                  |-«       t        d|-d›d|+› �«       t/        |*«      D ]  \  }.}/|/j7                  |#› d|'› d|.› d�«       Œ! Œ­ ‰1j9                  «        dd l}0d|0j<                  d‰‰‰‰|	|t?        |$«      tA        |$«      z  tC        jD                  |$«      |!|"|dœS )Nú][I] Initializing TensorRT accelerated StableDiffusionXL txt2img pipeline (static input shape)r   ©ÚcudartrÔ   rÖ   rØ   rÛ   rÜ   FT)r3   rÞ   rß   rÑ   rÐ   rÒ   rá   râ   ©r  rà   r  Ú
onnx_opsetrå   rã   rä   ræ   Ústatic_shapeÚenable_all_tacticsÚtiming_cachec                  ób   •— ‰ry t        «       \  } }‰j                  | g‰z  |g‰z  ‰‰‰¬«       y rë   rí   )rh   rm   rT   ri   r¾   rd   rU   rj   s     €€€€€€r   rn   z#run_tensorrt_static.<locals>.warmupæ  s;   ø€ ÙØÜ)Ó+Ñˆ�Ø�‰�f�X 
Ñ*¨X¨J¸Ñ,CÀVÈUÐdiˆÕjr   Útrtr–   )rì   rò   ró   rp   rô   rZ   rr   r   Údefault)rS   rv   r$   ri   rj   rU   rT   rw   rx   ry   rz   r{   r|   r±   )#rQ   r   r
  rö   rÕ   r÷   r×   rù   rÙ   rÚ   rú   rE   ÚTRTrü   Úload_enginesÚmaxÚmax_device_memoryÚ
cudaMallocÚactivate_enginesrÿ   r   rb   r   r~   r   rî   r�   r‚   r   r   rt   rƒ   r„   r…   r†   )2rÏ   rv   r   rT   r    ri   rj   rU   rx   rw   r   r‡   rÐ   rÑ   rÒ   rd   r
  rÕ   r×   r  rÙ   rÚ   rE   rá   r  r  rÞ   rà   r  r  rZ   Úshared_device_memoryrn   rˆ   r‰   rc   rŠ   r   r   r‹   rh   rŒ   r€   r  r�   rŽ   r�   r�   r  r¾   s2      ` ```       `                                 @r   Úrun_tensorrt_staticr  ™  sÍ  ý€ ô$ 
Ð
iÔjåõ /áÔà˜Ò'Ð'Ð'å-á  Ó)€Mç;ÝAà—.‘.€KÙJZØ�- óKÑG€Hˆj˜*Ð&9¸<ñ
 'ØØØØØ!Ø%ØØô	€Hð ×Ñ×!Ñ!ØØ/ØØØ!ØØØØØ Ø!ð "ô ô ˜H×,Ñ,×>Ñ>Ó@À(×BRÑBR×BdÑBdÓBfÓgÐØ$×/Ñ/Ð0AÓBÑ€AÐØ×Ñ×%Ñ%Ð&:Ô;ð ×Ñ˜F E¨:Ô6÷kñ kô *Ð*=¸vÀ|ÓTÐÜ*Ð+>ÀÈÓUÐá
„Hä5°e¸ZÈÐUZÐ\rÓsÐà€LÜ.Ó0Ñ€Gˆ_Ü˜wÓ'ò ?‰	ˆˆ6Ø�ÒÙÜŸ)™)›+ˆà (§¡ØˆH�zÑ!ØÐ 
Ñ*ØØØ!Øð !-ó !
Ñˆ�ô Ÿ	™	›ˆØ /Ñ1ˆØ×Ñ˜GÔ$Ü�˜g c˜]Ð*GÈÀÐWÔXÜ! &Ó)ò 	?‰HˆAˆuØ�J‰JÐ/Ð0°°!°°A°a°S¸Ð=Õ>ñ	?ð#?ð( ×ÑÔãð Ø—?‘?ØØØØØ Ø"Ø"Ü˜|Ó,¬s°<Ó/@Ñ@Ü$×+Ñ+¨LÓ9Ø/Ø 1Ø+ñð r   c                 óÞ  ‡ ‡‡‡‡‡‡‡‡‡*‡+‡,‡-‡.‡/— t        d«       dd l}ddlm} ddlm} ‰Š,‰Š-‰,dz  dk7  s‰-dz  dk7  rt        d‰,› d‰-› d�«      ‚ |«        ‰‰k  sJ ‚dd	lm} dd
l	m
Š*mŠ+ ˆ*ˆˆ+ˆˆˆˆˆˆ f	d„}ddlm}  ||«      } |||«      Š.t        ‰.j                  j!                  «       ‰.j                  j!                  «       «      }|j#                  |«      \  }}‰.j                  j%                  |«       ‰.j'                  ‰,‰-‰«       dˆ,ˆ-ˆ.ˆfd„	Š/ˆˆ/ˆfd„}t)        |
||	«      }t)        |
||	«      } |«        |j+                  «       }t-        d|‰‰|«      }g }t/        «       \  }} t1        |«      D ]Ÿ  \  }!}"|!|k\  r n•t3        j2                  «       }# ‰/|"g‰z  | g‰z  d¬«      \  }$}%t3        j2                  «       }&|&|#z
  }'|j5                  |'«       t        d|'d›d|%› �«       t1        |$«      D ]  \  }(})|)j7                  |› d|!› d|(› d�«       Œ! Œ¡ ‰.j9                  «        |d|j:                  d‰‰‰‰||t=        |«      t?        |«      z  tA        jB                  |«      ||‰dœS )Nr  r   r	  rÔ   é   zCImage height and width have to be divisible by 8 but specified as: z and ú.rÖ   rØ   c                 ó®   •	— ‰	j                   } ‰‰||«      \  }}}}} | |d|d‰‰‰||¬«	      }|j                  j                  |||d‰
‰‰ddd|¬«       |S )NrÜ   FrÝ   râ   Tr  )r  rü   r  )Úpipeline_classr  rá   r  r  rÞ   rà   r  r¾   rÙ   rT   rÚ   ri   rÐ   rÑ   rÒ   rj   rÏ   s            €€€€€€€€€r   Úinit_pipelinez-run_tensorrt_static_xl.<locals>.init_pipelineH  s”   ø€ Ø —n‘nˆáN^Ø�m [óO
ÑKˆ�*˜jÐ*=¸|ñ
 "ØØØ!ØØ%Ø)Ø)Ø 3Ø#ô

ˆð 	×Ñ×%Ñ%Ø!Ø 3ØØØ%Ø#Ø!ØØØ$Ø%ð 	&ô 	
ð ˆr   rÛ   c           	      ó4   •— ‰j                  | |‰‰‰d|¬«      S ©Ng      @rð   ©rî   )rh   r   rò   Úimage_heightÚimage_widthr¾   rU   s      €€€€r   Úrun_sd_xl_inferencez3run_tensorrt_static_xl.<locals>.run_sd_xl_inferencex  s.   ø€ Ø�|‰|ØØØØØ!ØØð ó 
ð 	
r   c                  óH   •— ‰ry t        «       \  } } ‰| g‰z  |g‰z  «       y ©Nrl   ©rh   rm   rT   r&  rd   s     €€€r   rn   z&run_tensorrt_static_xl.<locals>.warmupƒ  ó.   ø€ ÙØÜ)Ó+Ñˆ�Ù˜V˜H zÑ1°H°:À
Ñ3JÕKr   r  r–   ©rò   ró   rp   rô   rZ   ú.pngr   r  ©r   rS   rv   r$   ri   rj   rU   rT   rw   rx   ry   rz   r{   r|   r±   r(  )"rQ   r   r   r
  rö   rÕ   Ú
ValueErrorr÷   r×   rù   rÙ   rÚ   rú   rE   r  rü   r  r  r  rÿ   r   rÌ   rb   r   r~   r   r�   r‚   r   rt   rƒ   r„   r…   r†   )0rÏ   rv   rT   r    ri   rj   rU   rx   rw   r   r‡   rÐ   rÑ   rÒ   rd   r  r
  rÕ   r×   r   rE   r  r  rZ   r  rn   rˆ   r‰   r   rc   rŠ   r   r   r‹   rh   rŒ   r€   r  r�   rŽ   r�   r�   rÙ   rÚ   r$  r%  r¾   r&  s0   ` ` ```    ````                           @@@@@@r   Úrun_tensorrt_static_xlr/  !  s§  ÿþ€ ô" 
Ð
iÔjãÝÝ.ð €LØ€KØ�aÑ˜1Ò ¨a¡°1Ò 4ÜØQÐR^ÐQ_Ð_dÐepÐdqÐqrÐsó
ð 	
ñ
 Ôà˜Ò'Ð'Ð'å-ß;÷!ô !õF Bá  Ó)€MÙÐ4°mÓD€Hä˜H×,Ñ,×>Ñ>Ó@À(×BRÑBR×BdÑBdÓBfÓgÐØ$×/Ñ/Ð0AÓBÑ€AÐØ×Ñ×%Ñ%Ð&:Ô;ð ×Ñ˜L¨+°zÔB÷	
ð 	
öLô *Ð*=¸vÀ|ÓTÐÜ*Ð+>ÀÈÓUÐá
„Hà×#Ñ#Ó%€JÜ5°e¸ZÈÐUZÐ\rÓsÐà€LÜ.Ó0Ñ€Gˆ_Ü˜wÓ'ò ?‰	ˆˆ6Ø�ÒÙÜŸ)™)›+ˆá 3°V°H¸zÑ4IÈOÐK\Ð_iÑKiÐpsÔ tÑˆ�ÜŸ	™	›ˆØ /Ñ1ˆØ×Ñ˜GÔ$Ü�˜g c˜]Ð*GÈÀÐWÔXÜ! &Ó)ò 	?‰HˆAˆuØ�J‰JÐ/Ð0°°!°°A°a°S¸Ð=Õ>ñ	?ð?ð ×ÑÔð !ØØ—?‘?ØØØØØ Ø"Ø"Ü˜|Ó,¬s°<Ó/@Ñ@Ü$×+Ñ+¨LÓ9Ø/Ø 1Ø+ñð r   c                 óŒ  ‡‡‡‡‡‡%‡&— ddl m} ddlm}  |||j                  | ‰‰||‰¬«      Š%‰|k  sJ ‚‰%j                  ‰‰‰«       dˆˆ%ˆˆfd„	Š&ˆˆ&ˆfd„}t        |
||	«      }t        |
||	«      } |«        ‰%j                  j                  «       }t        d|‰‰|«      }g }t        «       \  }}t        |«      D ]­  \  }}||k\  r n£t        j                  «       } ‰&|g‰z  |g‰z  d¬	«      \  }}t        j                  «       }||z
  }|j                  |«       t        d
|d›d|› �«       t        |«      D ]-  \  } }!|› d|› d| › d�}"|!j                  |"«       t        d|"«       Œ/ Œ¯ ‰%j!                  «        ddlm}# ddlm}$ |d|$d|#› d�‰‰‰‰||t)        |«      t+        |«      z  t-        j.                  |«      |||dœS )Nr   )Úinitialize_pipeline)rÙ   )rv   rá   rÏ   ri   rj   rÒ   rÐ   rå   c           	      ó4   •— ‰j                  | |‰‰‰d|¬«      S r"  r#  )rh   r   rò   ri   r¾   rU   rj   s      €€€€r   r&  z+run_ort_trt_xl.<locals>.run_sd_xl_inferenceÚ  s.   ø€ Ø�|‰|ØØØØØ!ØØð ó 
ð 	
r   c                  óH   •— ‰ry t        «       \  } } ‰| g‰z  |g‰z  «       y r(  rl   r)  s     €€€r   rn   zrun_ort_trt_xl.<locals>.warmupå  r*  r   rï   r–   r+  ró   rp   rô   rZ   r,  zImage saved tors   r,   r   rõ   r-  r(  )Ú
demo_utilsr1  rù   rÙ   rû   rÿ   r   r  rÌ   rb   r   r~   r   r�   rQ   r‚   r   r   rt   r,   rƒ   r„   r…   r†   )'rÏ   rv   rT   r    ri   rj   rU   rx   rw   r   r‡   rÐ   rÑ   rÒ   rd   r1  rÙ   rn   rˆ   r‰   r   rc   rŠ   r   r   r‹   rh   rŒ   r€   r  r�   rŽ   r�   r�   Úfilenamer  r‘   r¾   r&  s'     ` ```       `                      @@r   Úrun_ort_trt_xlr6  ·  s  þ€ õ" /Ý)á"ØØ×&Ñ&ØØØØ%Ø%Ø!ô	€Hð ˜Ò'Ð'Ð'à×Ñ˜F E¨:Ô6÷	
ð 	
öLô *Ð*=¸vÀ|ÓTÐÜ*Ð+>ÀÈÓUÐá
„Hà×'Ñ'×,Ñ,Ó.€JÜ5°iÀÈZÐY^Ð`vÓwÐà€LÜ.Ó0Ñ€Gˆ_Ü˜wÓ'ò .‰	ˆˆ6Ø�ÒÙÜŸ)™)›+ˆá 3°V°H¸zÑ4IÈOÐK\Ð_iÑKiÐpsÔ tÑˆ�ÜŸ	™	›ˆØ /Ñ1ˆØ×Ñ˜GÔ$Ü�˜g c˜]Ð*GÈÀÐWÔXÜ! &Ó)ò 	.‰HˆAˆuØ/Ð0°°!°°A°a°S¸Ð=ˆHØ�J‰J�xÔ ÜÐ" HÕ-ñ	.ð.ð ×ÑÔå3å6ð !ØØØ˜{˜m¨1Ð-ØØØØ Ø"Ø"Ü˜|Ó,¬s°<Ó/@Ñ@Ü$×+Ñ+¨LÓ9Ø/Ø 1Ø+ñð r   c                 óH  — dt         j                  j                  _        dt         j                  j                  _        t        j
                  d«       t        j                  «       }t        | |||«      }t        j                  «       }t        d||z
  › d�«       t        d| |||«      }|s4t        j                  «       5  t        ||||||||	|
||¬«      }d d d «       nt        ||||||||	|
||¬«      }j                  | d |rdn|rdnd	|dd
œ«       |S # 1 sw Y   Œ*xY w)NTFr¬   rq   rH   r®   rL   Úxformersr  r°   )rH   ÚbackendsÚcudnnÚenabledÚ	benchmarkr¤   r   rR   rQ   rb   Úinference_moder¦   r²   )r   rT   r    r;   r<   ri   rj   rU   rx   rw   r   r‡   rd   r´   r9   rµ   rc   r¶   s                     r   Ú	run_torchr>    s@  € ð $(„E‡N�N×ÑÔ Ø%)„E‡N�N×ÑÔ"ä	×Ñ˜5Ô!ä—‘“€JÜ˜jÐ*@ÐBVÐXdÓe€DÜ�y‰y‹{€HÜ	Ð ¨:Ñ 5Ð6°hÐ
?Ô@ä5°g¸zÈ:ÐW\Ð^tÓuÐáÜ×!Ñ!Ó#ñ 	Ü'ØØØ%ØØØØØØØ#Ø'ôˆF÷	ð 	ô $ØØØ!ØØØØØØØØ#ô
ˆð ‡M�Mà$ØÙ%9™	É\¹zÐ_hØ&<Ø!&ñ	
ôð €M÷M	ð 	ús   ÃDÄD!c                  óx  — t        j                  «       } | j                  dddt        dg d¢d¬«       | j                  dd	dt        d
t	        t
        j                  «       «      d¬«       | j                  dddd¬«       | j                  dddt        t	        t        j                  «       «      dd¬«       | j                  dddt        d d¬«       | j                  dddt        dd¬«       | j                  dddd¬ «       | j                  d¬!«       | j                  d"ddd#¬ «       | j                  d¬$«       | j                  d%ddd&¬ «       | j                  d¬'«       | j                  d(ddd)¬ «       | j                  d¬*«       | j                  d+ddd,¬ «       | j                  d¬-«       | j                  d.d/t        d0g d1¢d2¬3«       | j                  d4dt        d5d6¬«       | j                  d7dt        d5d8¬«       | j                  d9d:dt        d;d<¬«       | j                  d=d>dt        d?d@¬«       | j                  dAdBdt        t        d0dC«      dDdE¬«       | j                  dFdGdt        t        d0dH«      dIdJ¬«       | j                  dKdLdddM¬ «       | j                  d¬N«       | j                  «       }|S )ONz-ez--engineFr,   )r,   rË   rH   r   z-Engines to benchmark. Default is onnxruntime.)ÚrequiredrÆ   r  ÚchoicesÚhelpz-rz
--providerr   z8Provider to benchmark. Default is CUDAExecutionProvider.z-tz--tuningÚ
store_truezCEnable TunableOp and tuning. This will incur longer warmup latency.)ÚactionrB  z-vz	--versionr   z>Stable diffusion version like 1.5, 2.0 or 2.1. Default is 1.5.)r@  rÆ   rA  r  rB  z-pz
--pipelinez[Directory of saved onnx pipeline. It could be the output directory of optimize_pipeline.py.)r@  rÆ   r  rB  z-wz
--work_dirr  z?Root directory to save exported onnx models, built engines etc.z--enable_safety_checkerzEnable safety checker)r@  rD  rB  )Úenable_safety_checkerz--enable_torch_compilez#Enable compile unet for PyTorch 2.0)r;   z--use_xformerszUse xformers for PyTorch)r<   z--use_io_bindingzUse I/O Binding for Optimum.rÊ   z--skip_warmupz
No warmup.r®   z-bz--batch_sizer©   )r©   é   é   é   r  é
   é   é    z)Number of images per batch. Default is 1.)rÆ   r  rA  rB  z--heighti   z$Output image height. Default is 512.z--widthz#Output image width. Default is 512.z-sz--stepsé2   zNumber of steps. Default is 50.z-nz--num_promptsrI  z!Number of prompts. Default is 10.z-cz--batch_counté   é   z(Number of batches to test. Default is 5.z-mz--max_trt_batch_sizerJ  rH  zdMaximum batch size for TensorRT. Change the value may trigger TensorRT engine rebuild. Default is 4.z-gz--enable_cuda_graphz/Enable Cuda Graph. Requires onnxruntime >= 1.16)r±   )ÚargparseÚArgumentParserÚadd_argumentÚstrÚlistÚ	PROVIDERSÚkeysÚ	SD_MODELSÚset_defaultsÚintÚrangeÚ
parse_args)ÚparserÚargss     r   Úparse_argumentsr]  d  st  € Ü×$Ñ$Ó&€Fà
×ÑØØØÜØÚ?Ø<ð ô ð ×ÑØØØÜØÜ”Y—^‘^Ó%Ó&ØGð ô ð ×ÑØØØØRð	 ô ð ×ÑØØØÜÜ”Y—^‘^Ó%Ó&ØØMð ô ð ×ÑØØØÜØØjð ô ð ×ÑØØØÜØØNð ô ð ×ÑØ!ØØØ$ð	 ô ð ×Ñ¨eÐÔ4à
×ÑØ ØØØ2ð	 ô ð ×Ñ¨UÐÔ3à
×ÑØØØØ'ð	 ô ð ×Ñ UÐÔ+à
×ÑØØØØ+ð	 ô ð ×Ñ uÐÔ-à
×ÑØØØØð	 ô ð ×Ñ EÐÔ*à
×ÑØØÜØÚ+Ø8ð ô ð ×ÑØØÜØØ3ð ô ð ×ÑØØÜØØ2ð ô ð ×ÑØØØÜØØ.ð ô ð ×ÑØØØÜØØ0ð ô ð ×ÑØØØÜÜ�a˜“ØØ7ð ô ð ×ÑØØØÜÜ�a˜“ØØsð ô ð ×ÑØØØØØ>ð ô ð ×Ñ¨%ÐÔ0à×ÑÓ€Dà€Kr   c                 óÖ   ‡— dd l }|j                  t        j                  «       «      }|j	                  «       D ].  Š| rt        ˆfd„dD «       «      sŒt        ‰j                  «       Œ0 y )Nr   c              3   ó:   •K  — | ]  }|‰j                   v –— Œ y ­wr(  )r.   )Ú.0ÚxÚlibs     €r   ú	<genexpr>z)print_loaded_libraries.<locals>.<genexpr>  s   øè ø€ Ò)`¸A¨!¨s¯x©x¬-Ñ)`ùs   ƒ)ÚlibcuÚlibnvr   )ÚpsutilÚProcessr-   ÚgetpidÚmemory_mapsÚanyrQ   r.   )Úcuda_related_onlyrf  Úprb  s      @r   Úprint_loaded_librariesrm    sK   ø€ Ûà�‰”r—y‘y“{Ó#€AØ�}‰}‹ò ˆÙ!¤cÓ)`ÐA_Ô)`Õ&`Ü�#—(‘(�Oñr   c                  óX  — t        «       } t        | «       | j                  dk(  r›| j                  dv rdt        j
                  d<   ddlm} ddlm} | j                  rb| j                  dk(  r| j                  dv r| j                  �t        d	«      ‚|j                  |«      |j                  d
«      k  rt        d«      ‚t        j                  dt        j                   d¬«       d}t#        |d «      }t        d|«       t$        | j                     }t&        | j                     }| j                  dk(  �rS| j                  dk(  �rCd| j                  v r•t        d«       t)        | j*                  | j                  | j,                  d| j.                  | j0                  | j2                  | j4                  | j6                  ||| j8                  d| j                  | j:                  ¬«      }�n1t        d«       t=        | j*                  | j                  | j,                  | j>                   | j.                  | j0                  | j2                  | j4                  | j6                  ||| j8                  d| j                  | j:                  ¬«      }�n‘| j                  dk(  r…|dk(  r€tA        || j                  || j,                  | j>                   | j.                  | j0                  | j2                  | j4                  | j6                  ||| jB                  | j:                  ¬«      }�ný| j                  dk(  r×| j                  r)t        jD                  jG                  | j                  «      sJ d«       ‚t        d|› d| jH                  › �«       tK        || j                  || j,                  | j>                   | j.                  | j0                  | j2                  | j4                  | j6                  ||| jH                  | j:                  ¬«      }�n| j                  dk(  r£d| j                  v r•t        d«       tM        | j*                  | j                  | j,                  d| j.                  | j0                  | j2                  | j4                  | j6                  ||| j8                  d| j                  | j:                  ¬«      }�ne| j                  dk(  r³t        d«       tO        d;i d | j*                  “d!| j                  “d"|“d#| j,                  “d$d“d%| j.                  “d&| j0                  “d'| j2                  “d(| j4                  “d)| j6                  “d*|“d+|“d,| j8                  “d-d“d.| j                  “d/| j:                  “Ž}n£t        d0| jP                  › d1| jR                  › d2�«       tU        || j,                  | j>                   | jP                  | jR                  | j.                  | j0                  | j2                  | j4                  | j6                  ||| j:                  ¬3«      }t        |«       tW        d4d5d6¬7«      5 }g d8¢}	tY        jZ                  ||	¬9«      }
|
j]                  «        |
j_                  |«       d d d «       | j2                  d:k(  rta        | j                  dv «       y y # 1 sw Y   Œ1xY w)<Nr,   )r   Ú1ÚORT_DISABLE_TRT_FLASH_ATTENTIONr   )rv   rs   )r   r   z:The stable diffusion pipeline does not support CUDA graph.z1.16z.CUDA graph requires ONNX Runtime 1.16 or laterz%(funcName)20s: %(message)sT)ÚformatÚlevelÚforcer   z&GPU memory used before loading models:r   ÚxlzNTesting Txt2ImgXLPipeline with static input shape. Backend is ORT TensorRT EP.F)rÏ   rv   rT   r    ri   rj   rU   rx   rw   r   r‡   rÐ   rÑ   rÒ   rd   zLTesting Txt2ImgPipeline with static input shape. Backend is ORT TensorRT EP.rË   r   )r   r   r$   rT   r    ri   rj   rU   rx   rw   r   r‡   r¸   rd   z?--pipeline should be specified for the directory of ONNX modelsz/Testing diffusers StableDiffusionPipeline with z provider and tuning=)r   r   r$   rT   r    ri   rj   rU   rx   rw   r   r‡   r§   rd   zGTesting Txt2ImgXLPipeline with static input shape. Backend is TensorRT.zETesting Txt2ImgPipeline with static input shape. Backend is TensorRT.rÏ   rv   r   rT   r    ri   rj   rU   rx   rw   r   r‡   rÐ   rÑ   rÒ   rd   zNTesting Txt2ImgPipeline with dynamic input shape. Backend is PyTorch: compile=z, xformers=r  )r   rT   r    r;   r<   ri   rj   rU   rx   rw   r   r‡   rd   zbenchmark_result.csvÚar]   )rB   Únewline)r   r   rS   rv   r$   r    ri   rj   rU   rT   rw   rx   ry   rz   r{   r|   r±   )Ú
fieldnamesr©   r   )1r]  rQ   rS   rv   r-   ÚenvironÚ	packagingr,   rt   r±   r$   r¾   r.  ÚparseÚloggingÚbasicConfigÚINFOr   rV  rT  r6  rÏ   rT   ri   rj   rU   rx   rw   Úmax_trt_batch_sizerd   r  rE  rÎ   r¸   r.   Úisdirr§   r·   r/  r  r;   r<   r>  ÚopenÚcsvÚ
DictWriterÚwriteheaderÚwriterowrm  )r\  rv   r‘   r‡   r   Úsd_modelr$   r¶   Úcsv_fileÚcolumn_namesÚ
csv_writers              r   Úmainr‰    s  € ÜÓ€DÜ	ˆ$„Kà‡{�{�mÒ#Ø�<‰<˜7Ñ"ð =@ŒB�J‰JÐ8Ñ9å%å:à×!Ò!Ø—K‘K =Ò0°T·]±]ÐFZÑ5ZÐ_c×_lÑ_lÐ_tÜ Ð!]Ó^Ð^à�}‰}˜[Ó)¨G¯M©M¸&Ó,AÒAÜ Ð!QÓRÐRä×ÑÐ<ÄGÇLÁLÐX\Õ]à Ðä%Ð&9¸4Ó@€LÜ	Ð
2°LÔAä˜Ÿ™Ñ&€HÜ˜Ÿ™Ñ'€HØ‡{�{�mÓ#¨¯©¸Ó(CØ�4—<‘<ÑÜÐbÔcÜ#ØŸ™ØŸ™ØŸ?™?Ø'+Ø—{‘{Ø—j‘jØ—j‘jØ ×,Ñ,Ø ×,Ñ,Ø)Ø$7Ø#×6Ñ6Ø"Ø#×5Ñ5Ø ×,Ñ,ôŠFô$ Ð`ÔaÜ'ØŸ™ØŸ™ØŸ?™?Ø+/×+EÑ+EÐ'EØ—{‘{Ø—j‘jØ—j‘jØ ×,Ñ,Ø ×,Ñ,Ø)Ø$7Ø#×6Ñ6Ø"Ø#×5Ñ5Ø ×,Ñ,ôŠFð" 
�‰˜	Ò	! hÐ2IÒ&IÜ ØØ—m‘mØØ—‘Ø'+×'AÑ'AÐ#AØ—;‘;Ø—*‘*Ø—*‘*Ø×(Ñ(Ø×(Ñ(Ø%Ø 3Ø×.Ñ.Ø×(Ñ(ô
Šð  
�‰˜Ò	%Ø�}Š}¤§¡§¡¨t¯}©}Ô!=ð 	
ØMó	
Ð=ô 	Ð?À¸zÐI^Ð_c×_jÑ_jÐ^kÐlÔmÜØØ—m‘mØØ—‘Ø'+×'AÑ'AÐ#AØ—;‘;Ø—*‘*Ø—*‘*Ø×(Ñ(Ø×(Ñ(Ø%Ø 3Ø—;‘;Ø×(Ñ(ô
Šð  
�‰˜
Ò	" t¨t¯|©|Ñ';ÜÐWÔXÜ'Ø—]‘]Ø—L‘LØ—‘Ø#'Ø—;‘;Ø—*‘*Ø—*‘*Ø×(Ñ(Ø×(Ñ(Ø%Ø 3Ø×2Ñ2ØØ×1Ñ1Ø×(Ñ(ô
Šð" 
�‰˜
Ò	"ÜÐUÔVÜ$ò 
Ø—]’]ð
à—L’Lð
ñ  ð
ð —’ð	
ñ
 $(ð
ð —;’;ð
ð —*’*ð
ð —*’*ð
ð ×(Ò(ð
ð ×(Ò(ð
ñ &ð
ñ !4ð
ð  ×2Ò2ð
ñ ð
ð  ×1Ò1ð
ð  ×(Ò(ð!
‰ô& 	Ø\Ð]a×]vÑ]vÐ\wð  xCð  DH÷  DUñ  DUð  CVð  VWð  Xô	
ô ØØ—‘Ø'+×'AÑ'AÐ#AØ!%×!:Ñ!:Ø×*Ñ*Ø—;‘;Ø—*‘*Ø—*‘*Ø×(Ñ(Ø×(Ñ(Ø%Ø 3Ø×(Ñ(ô
ˆô  
ˆ&„Mä	Ð$¨3¸Ô	;ð $¸xò
ˆô& —^‘^ H¸ÔFˆ
Ø×ÑÔ Ø×Ñ˜FÔ#÷-$ð2 ‡z�z�Q‚Ü˜tŸ}™}Ð0DÐDÕEð ÷3$ð $ús   Ø3=Z Ú Z)Ú__main__r(  )F)r   TF)FF)FT)FTF)T),rO  r�  r{  r-   r…   Úsysr   Úpathlibr   rH   Úbenchmark_helperr   rV  rT  r   r   r   rR  Úboolr:   rR   rX  rb   r’   Údictrž   r¦   r·   r¿   rÈ   rÎ   r  r  r/  r6  r>  r]  rm  r‰  Ú__name__Ú	tracebackÚ	ExceptionÚprint_exceptionÚexc_infor   r   r   ú<module>r•     sÂ  ðó Û 
Û Û 	Û Û 
Û Ý ó Ý +ð ,Ø+Ø-Ø;Ø=Ø5Ø4Ø1Ø-ñ
€	ð $Ø+Ø+ñ€	ò$ò&óhð ð °ð ÐX\ó ð<* 3ð *Àð *Ð\`ð *Ðptó *ðZo cð o°sð oÈð oÐTWð oÐquó oð  ñHàðHð ðHð óHðVÐcgó ð< ñFàðFð óFðn ñ1Øð1àð1ð ð1ð ð	1ð
 !ð1ð ð1ð ð1ð ð1ð ð1ð ð1ð ð1ð ó1ðn %Ø#'Ø ñØðàðð !ð	ð
 óðL $ØñWàðWð óWðN !Øñ2Øð2àð2ð ð2ð ð	2ð
 !ð2ð ð2ð ð2ð ð2ð ð2ð ð2ð ð2ð ó2ðD Øñ@Øð@àð@ð ð@ð !ð	@ð
 ð@ð ð@ð ð@ð ð@ð ð@ð ð@ð ð@ð ó@ðb ØØñ!EØðEàðEð ðEð ð	Eð
 !ðEð ðEð ðEð ðEð ðEð ðEð ðEð ðEð ðEð  ó!Eðj ØØñSØðSàðSð ðSð !ð	Sð
 ðSð ðSð ðSð ðSð ðSð ðSð ðSð óSðF ØØñeØðeàðeð ðeð !ð	eð
 ðeð ðeð ðeð ðeð ðeð ðeð ðeð óeðj ñBØðBàðBð !ðBð ð	Bð
 ðBð ðBð ðBð ðBð ðBð ðBð óBòJló^òBFðJ ˆzÒÛð3Ù�ð	 øð
 ò 3Ø!ˆ	×!Ñ! < 3§<¡<£>Ó2ð3ús   ÆF Æ#GÇG