ó
    ÷“,jS%  ã                   ó¶  • S SK r S SKrS SKrS SKrS SKJr   S SKrS SKr\ R                  " SS9r
\
R                  SSSSS	9  \
R                  S
S\SSS9  \
R                  SS\SS/S9  \
R                  SS\SS9  \
R                  SS\SS9       S#S jr    S$S jr    S%S jrS&S jrS&S jrS&S jrS rS'S  jrS! r\S":X  a  \" 5         gg!   Sr N¸= f)(é    N)ÚFlopCounterModezOpenCLIP Profiler)Údescriptionz--modelÚNAMEÚ zmodel(s) to profile)ÚmetavarÚdefaultÚhelpz--results-fileÚFILENAMEzOutput csv file for results)r   Útyper   r	   z
--profilerÚtorchÚfvcore)r   r   Úchoicesz--batch-sizeé   zBatch size for profiling)r   r   r	   z--deviceÚcudazAccelerator to use.c                 óp  • U(       a  U R                  S5      n [        U R                  5       5      R                  [        U R                  5       5      R                  pv[
        R                  " U4U-   XgS9n[
        R                  " U4U-   U[
        R                  S9n	[        R                  R                  XU	45      n
[        R                  R                  XU	45      nU(       a*  [        R                  R                  U
5      n[        U5        U
R                  5       U-  UR                  5       U-  4$ ©NÚcpu©ÚdeviceÚdtype)ÚtoÚnextÚ
parametersr   r   r   ÚonesÚint64r   ÚnnÚFlopCountAnalysisÚActivationCountAnalysisÚflop_count_strÚprintÚtotal)ÚmodelÚimage_input_sizeÚtext_input_sizeÚ
batch_sizeÚdetailedÚ	force_cpur   r   Úexample_image_inputÚexample_text_inputÚfcaÚacaÚfcss                Ú¦C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\open_clip_train/profiler.pyÚprofile_fvcorer.      sð   € ö Ø—‘˜“ˆÜ˜×)Ñ)Ó+Ó,×3Ñ3´T¸%×:JÑ:JÓ:LÓ5M×5SÑ5SˆEÜŸ*š* j ]Ð5EÑ%EÈfÑbÐÜŸš Z M°OÑ$CÈFÔZ_×ZeÑZeÑfÐÜ
�)‰)×
%Ñ
% eÐCUÐ-VÓ
W€CÜ
�)‰)×
+Ñ
+¨EÐI[Ð3\Ó
]€CÞÜ�i‰i×&Ñ& sÓ+ˆÜˆcŒ
Ø�9‰9‹;˜Ñ# S§Y¡Y£[°:Ñ%=Ð=Ð=ó    c                 óò  • U(       a  U R                  S5      n [        U R                  5       5      R                  n[        R
                  " U4U-   U[        R                  S9n[        R                  R                  X5      n[        R                  R                  X5      nU(       a*  [        R                  R                  U5      n	[        U	5        UR                  5       U-  UR                  5       U-  4$ r   )r   r   r   r   r   r   r   r   r   r   r   r   r    r!   )
r"   r$   r%   r&   r'   r   Úexample_inputr*   r+   r,   s
             r-   Úprofile_fvcore_textr2   /   s´   € ö Ø—‘˜“ˆÜ�%×"Ñ"Ó$Ó%×,Ñ,€FÜ—J’J 
˜}¨Ñ>ÀvÔUZ×U`ÑU`Ña€MÜ
�)‰)×
%Ñ
% eÓ
;€CÜ
�)‰)×
+Ñ
+¨EÓ
A€CÞÜ�i‰i×&Ñ& sÓ+ˆÜˆcŒ
Ø�9‰9‹;˜Ñ# S§Y¡Y£[°:Ñ%=Ð=Ð=r/   c                 ó  • U(       a  U R                  S5      n [        U R                  5       5      R                  [        U R                  5       5      R                  pe[
        R                  " U4U-   XVS9n[        R                  R                  X5      n[        R                  R                  X5      n	U(       a*  [        R                  R                  U5      n
[        U
5        UR                  5       U-  U	R                  5       U-  4$ r   )r   r   r   r   r   r   r   r   r   r   r   r   r    r!   )r"   r#   r%   r&   r'   r   r   r1   r*   r+   r,   s              r-   Úprofile_fvcore_imager4   B   sÂ   € ö Ø—‘˜“ˆÜ˜×)Ñ)Ó+Ó,×3Ñ3´T¸%×:JÑ:JÓ:LÓ5M×5SÑ5SˆEÜ—J’J 
˜}Ð/?Ñ?ÈÑ\€MÜ
�)‰)×
%Ñ
% eÓ
;€CÜ
�)‰)×
+Ñ
+¨EÓ
A€CÞÜ�i‰i×&Ñ& sÓ+ˆÜˆcŒ
Ø�9‰9‹;˜Ñ# S§Y¡Y£[°:Ñ%=Ð=Ð=r/   c                 ó¦  • U(       a  U R                  S5      n [        U R                  5       5      R                  [        U R                  5       5      R                  pT[
        R                  " U4U-   XES9n[        5       nU   U " U5        SSS5        [        UR                  5       S   R                  5       5      nX‚-  $ ! , (       d  f       N<= f)z8Profile the image encoder using torch.utils.flop_counterr   r   NÚGlobal)r   r   r   r   r   r   r   r   ÚsumÚget_flop_countsÚvalues)	r"   r#   r%   r'   r   r   r1   Úflop_counterÚtotal_flopss	            r-   Úprofile_torch_imager<   U   s£   € æØ—‘˜“ˆÜ˜×)Ñ)Ó+Ó,×3Ñ3´T¸%×:JÑ:JÓ:LÓ5M×5SÑ5SˆEÜ—J’J 
˜}Ð/?Ñ?ÈÑ\€Mä"Ó$€LÚ	ÙˆmÔ÷ 
ä�l×2Ñ2Ó4°XÑ>×EÑEÓGÓH€KØÑ#Ð#÷ 
�ús   Â	CÃ
Cc                 ó€  • U(       a  U R                  S5      n [        U R                  5       5      R                  n[        R
                  " U4U-   U[        R                  S9n[        5       nU   U " U5        SSS5        [        UR                  5       S   R                  5       5      nXr-  $ ! , (       d  f       N<= f)z7Profile the text encoder using torch.utils.flop_counterr   r   Nr6   )r   r   r   r   r   r   r   r   r7   r8   r9   )r"   r$   r%   r'   r   r1   r:   r;   s           r-   Úprofile_torch_textr>   c   s•   € æØ—‘˜“ˆÜ�%×"Ñ"Ó$Ó%×,Ñ,€FÜ—J’J 
˜}¨Ñ>ÀvÔUZ×U`ÑU`Ña€Mä"Ó$€LÚ	ÙˆmÔ÷ 
ä�l×2Ñ2Ó4°XÑ>×EÑEÓGÓH€KØÑ#Ð#÷ 
�ús   Á0	B/Â/
B=c                 óö  • U(       a  U R                  S5      n [        U R                  5       5      R                  [        U R                  5       5      R                  pe[
        R                  " U4U-   XVS9n[
        R                  " U4U-   U[
        R                  S9n[        5       n	U	   U " Xx5        SSS5        [        U	R                  5       S   R                  5       5      n
X£-  $ ! , (       d  f       N<= f)z5Profile the full model using torch.utils.flop_counterr   r   Nr6   )r   r   r   r   r   r   r   r   r   r7   r8   r9   )r"   r$   r#   r%   r'   r   r   Úimage_inputÚ
text_inputr:   r;   s              r-   Úprofile_torchrB   q   sÃ   € æØ—‘˜“ˆÜ˜×)Ñ)Ó+Ó,×3Ñ3´T¸%×:JÑ:JÓ:LÓ5M×5SÑ5SˆEÜ—*’*˜j˜]Ð-=Ñ=ÀfÑZ€KÜ—’˜Z˜M¨OÑ;ÀFÔRW×R]ÑR]Ñ^€Jä"Ó$€LÚ	ÙˆkÔ&÷ 
ä�l×2Ñ2Ó4°XÑ>×EÑEÓGÓH€KØÑ#Ð#÷ 
�ús   Â+	C*Ã*
C8c                 óB   • [        S U R                  5        5       5      $ )Nc              3   ó@   #   • U  H  oR                  5       v •  M     g 7f)N)Únumel)Ú.0Úms     r-   Ú	<genexpr>Úcount_params.<locals>.<genexpr>�   s   é € Ð5Ò"4˜Q�w‰w�yˆyÒ"4ùs   ‚)r7   r   )r"   s    r-   Úcount_paramsrJ   €   s   € ÜÑ5 %×"2Ñ"2Ô"4Ó5Ó5Ð5r/   c                 óØ  • US;   d   S5       eUS:X  a  [         c   S5       e[        R                  " U SSS9nUR                  5         [        R
                  R                  5       (       a  UR                  5       nO9US:X  a3  [        R                  R                  5       (       a  UR                  5       n[        UR                  R                  [        [        45      (       a&  S	[        UR                  R                  S
S  5      -   nO-SUR                  R                  UR                  R                  4nSn[        US5      (       a  UR                  (       a  UR                  4n0 nXS'   US   US'   [        R                  " U 5      nU(       at  [        R                   " S*0 US   D6n	[        R"                  " S*0 US   D6n
[%        U	R&                  5      US'   [%        U
R&                  5      US'   [%        US   5      US'   OSUS'   SUS'   SUS'   SnU(       Ga³  US-  n [)        [+        U5      S-  S5      US'   [)        [+        UR                  5      S-  S5      US'   [)        [+        UR,                  5      S-  S5      US'   US:X  a¸  [/        XEXk(       + US9u  pÍ[1        UR                  X[(       + US9u  pï[3        UR,                  Xk(       + US9u  nn[)        US-  S5      US '   [)        US-  S5      US!'   [)        US-  S5      US"'   [)        US-  S5      US#'   [)        US-  S5      US$'   [)        US-  S5      US%'   O€US&:X  az  [5        UR                  X[(       + US9n[7        UR,                  Xk(       + US9n[9        XEXk(       + US9n[)        US-  S5      US''   [)        US-  S5      US('   [)        US-  S5      US)'   U(       a  GM³  U$ ! [:         a
  n S nANS nAff = f)+N)r   r   z-Only torch and fvcore profilers are supportedr   zPlease install fvcore.TF)Úforce_custom_textÚpretrained_hfÚnpu)é   éþÿÿÿrO   ©éM   Úcontext_lengthr"   r   Ú
image_sizeÚ
vision_cfgÚtext_cfgÚimage_widthÚ
text_widthÚ	embed_dimr   é   g    €„.AÚmparamsÚimage_mparamsÚtext_mparams)r#   r$   r'   r%   )r#   r'   r%   )r$   r'   r%   g    eÍÍAÚgmacsÚmactsÚimage_gmacsÚimage_mactsÚ
text_gmacsÚ
text_mactsr   ÚgflopsÚimage_gflopsÚtext_gflops© )r   Ú	open_clipÚcreate_modelÚevalr   r   Úis_availablerN   Ú
isinstanceÚvisualrT   ÚtupleÚlistÚhasattrrS   Úget_model_configÚCLIPVisionCfgÚCLIPTextCfgÚintÚwidthÚroundrJ   Útextr.   r4   r2   r<   r>   rB   ÚRuntimeError)Ú
model_namer%   Úprofilerr   r"   r#   r$   ÚresultsÚ	model_cfgrU   rV   ÚretriesÚmacsÚactsÚ
image_macsÚ
image_actsÚ	text_macsÚ	text_actsÚimage_flopsÚ
text_flopsr;   Úes                         r-   Úprofile_modelr‡   ƒ   sâ  € ØÐ*Ó*Ð[Ð,[Ó[Ð*Ø�8ÓÜÑ!Ð;Ð#;Ó;Ð!Ü×"Ò" :ÀÐUZÑ[€EØ	‡J�J„Lä‡z�z×Ñ× Ñ Ø—
‘
“‰Ø	�5‹œUŸY™Y×3Ñ3×5Ñ5Ø—	‘	“ˆä�%—,‘,×)Ñ)¬E´4¨=×9Ñ9Ø¤%¨¯©×(?Ñ(?ÀÀÐ(DÓ"EÑEÑà˜uŸ|™|×6Ñ6¸¿¹×8OÑ8OÐPÐà€OÜˆuÐ&×'Ñ'¨E×,@×,@Ø ×/Ñ/Ð1ˆà€GØ!ˆGÑØ,¨QÑ/€GˆLÑä×*Ò*¨:Ó6€IÞÜ×,Ò,ÑG¨y¸Ñ/FÑGˆ
Ü×(Ò(ÑA¨9°ZÑ+@ÑAˆÜ!$ Z×%5Ñ%5Ó!6ˆ�ÑÜ # H§N¡NÓ 3ˆ�ÑÜ" 9¨[Ñ#9Ó:ˆ�Òà!"ˆ�ÑØ !ˆ�ÑØ ˆ�Ñà€Gß
Ø�1‰ˆð$	Ü!&¤|°EÓ':¸SÑ'@À!Ó!DˆG�IÑÜ',¬\¸%¿,¹,Ó-GÈ#Ñ-MÈqÓ'QˆG�OÑ$Ü&+¬L¸¿¹Ó,DÀsÑ,JÈAÓ&NˆG�NÑ#à˜8Ó#Ü+ØÈoÔitð  BLñM‘
�ô *>Ø—L‘LÐ3CÌ{Ðgqñ*sÑ&�
ô (;Ø—J‘J°Ì;Ðcmñ(oÑ$�	˜9ô $)¨°©°QÓ#7�˜Ñ Ü#(¨°©°QÓ#7�˜Ñ ä).¨z¸CÑ/?ÀÓ)C�˜Ñ&Ü).¨z¸CÑ/?ÀÓ)C�˜Ñ&ä(-¨i¸#©o¸qÓ(A�˜Ñ%Ü(-¨i¸#©o¸qÓ(A�˜Ò%Ø˜WÓ$Ü1Ø—L‘LÐ3CÌ{Ðgqñs�ä/Ø—J‘J°Ì;Ðcmño�
ä+ØÈoÔitð  BLñM�ô %*¨+¸Ñ*;¸QÓ$?�˜Ñ!Ü*/°¸cÑ0AÀ1Ó*E�˜Ñ'Ü).¨z¸CÑ/?ÀÓ)C�˜Ñ&÷G ‰'ðN €Nøô ó 	Üûð	ús   È&D"O Í	B O Ï
O)Ï$O)c                  ó~  • [         R                  5       n U R                  S:X  a  [        R                  " 5       nOU R                  R                  S5      n/ n/ nU HW  n[        S5        [        SU 35         [        X@R                  U R                  U R                  S9nUR                  U5        MY     [        R                   " X"S   R#                  5       S	9nS
UR$                  ;   a  UR'                  / SQS9nOUR'                  / SQS9n[        S5        [        S5        [        U5        U R(                  (       a  UR+                  U R(                  SS9  U(       a  [        SU5        g g ! [         aB  n[        SU SU 35        SS KnUR                  5         UR                  U5         S nAGM[  S nAff = f)NÚallÚ,zd====================================================================================================z
Profiling )r%   rz   r   zError profiling z: r   )Úcolumnsr^   )r^   r[   r"   )Úby)rd   r[   r"   zDone.F)ÚindexzModels with errors:)ÚparserÚ
parse_argsr"   rh   Úlist_modelsÚsplitr    r‡   r%   rz   r   ÚappendÚ	ExceptionÚ	tracebackÚ	print_excÚpdÚ	DataFrameÚkeysr‹   Úsort_valuesÚresults_fileÚto_csv)	ÚargsÚparsed_modelr{   Úmodels_with_errorsrG   Úrowr†   r”   Údfs	            r-   Úmainr¡   Ó   sr  € Ü×ÑÓ€Dð ‡z�z�UÓÜ ×,Ò,Ó.‰à—z‘z×'Ñ'¨Ó,ˆà€GØÐÛˆÜˆgŒÜ�
˜1˜#ÐÔð	)Ü ¯o©oÈÏÉÐ^b×^iÑ^iÑjˆCØ�N‰N˜3Öñ ô 
�Š�g¨q¡z§¡Ó'8Ñ	9€Bà�"—*‘*ÓØ�^‰^Ò<ˆ^Ð=‰à�^‰^Ò=ˆ^Ð>ˆä	ˆ'„NÜ	ˆ'„NÜ	ˆ"„IØ××Ø
�	‰	�$×#Ñ#¨5ˆ	Ñ1æÜÐ#Ð%7Õ8ð øô' ó 	)ÜÐ$ Q C r¨!¨Ð-Ô.ÛØ×ÑÔ!Ø×%Ñ% a×(Ó(ûð		)ús   Á9:E0Å0
F<Å:6F7Æ7F<Ú__main__)©rO   éà   r¤   rQ   r   FF)rQ   r   FF)r£   r   FF)r   F)r   r   r   )Úargparser   rh   Úpandasr–   Útorch.utils.flop_counterr   r   Ú	fvcore.nnÚArgumentParserrŽ   Úadd_argumentÚstrrt   r.   r2   r4   r<   r>   rB   rJ   r‡   r¡   Ú__name__rg   r/   r-   Ú<module>r­      s>  ðÛ ã Û Û Ý 4ðÛÛð 
×	 Ò	 Ð-@Ñ	A€ð × Ñ �I v°rØ.ð ñ 0à × Ñ Ð$¨b°sÀJØ6ð ñ 8à × Ñ �L¨'¸ÀgÈxÐEXÐ Ñ YØ × Ñ �N¨A°CÐ>XÐ Ñ YØ × Ñ Ø˜ SÐ/Dð ñ ð 'ØØØØô>ð. ØØØô>ð* 'ØØØô>ô&$ô$ô$ò6ôMò`%9ðP ˆzÓÙ…Fð øðcØ‚Fús   ˜C ÃC