+
    TV-jX  ã                   ó~   € ^ RI t ^ RIt^ RIHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHtHt R tR t]R8X  d
   ]! 4        R# R# )é    N)Úbatch_generateÚloadÚstream_generate)ÚDEFAULT_MODEL)Úpipeline_loadÚsharded_loadc                 óü  € \         P                  ! RR7      p V P                  R\        R\         R2RR7       V P                  RR	R
R\
        R7       V P                  RRRR\
        R7       V P                  RR^R\
        R7       V P                  RR^R\
        R7       V P                  RRRR7       V P                  RRRRR7       V P                  R\
        RR R!7       V P                  R"\
        ^ R#R!7       V # )$z&Set up and return the argument parser.zLLM benchmarking script)Údescriptionz--modelz[The path to the local model directory or Hugging Face repo. If no model is specified, then z	 is used.N)ÚtypeÚhelpÚdefaultz--prompt-tokensz-pi   zLength of prompt)r   r   r   z--generation-tokensz-gi   zLength of completionz--batch-sizez-bz
Batch sizez--num-trialsz-nzNumber of timing trialsz
--pipelineÚ
store_truez,Use pipelining instead of tensor parallelism)Úactionr   z--quantize-activationsz-qazSQuantize activations using the same quantization config as the corresponding layer.z--prefill-step-sizei   z0Step size for prefill processing (default: 2048))r   r   r   z--delayz/Delay between each test in seconds (default: 0))ÚargparseÚArgumentParserÚadd_argumentÚstrr   Úint)Úparsers    Úa/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_lm/benchmark.pyÚsetup_arg_parserr      s[  € ä×$Ò$Ð1JÔK€FØ
×ÑØÜð.Ü.;¨_¸IðGð ð ô ð ×ÑØØØØÜð ô ð ×ÑØØØØ#Üð ô ð ×ÑØØØØÜð ô ð ×ÑØØØØ&Üð ô ð ×ÑØØØ;ð ô ð
 ×ÑØ ØØØbð	 ô ð ×ÑØÜØØ?ð	 ô ð ×ÑØÜØØ>ð	 ô ð €Mó    c            	      ó¶  aaaaaaaa€ \        4       p V P                  4       o\        P                  P	                  ^ 4       \        P
                  P                  4       pVP                  4       oSP                  '       d   TMRpSP                  '       g   TMRpV3R lpSP                  ;'       g    \        pVP                  4       ^8”  d   \        WRVRR7      w  oopM!\        VRRR/RSP                  /R7      w  oop/ Sn        SP                   pSP"                  oSP$                  pVP'                  R4      ;'       g    VR	,          R,          p	\        P                  P)                  ^ W˜V34      P+                  4       oS^ ,          oVVVVV3R
 lp
VVVVV3R lpV^8X  d   T
pMTpV! R4       V! 4        . ROpV! RV: RS: RV: R24       . o\-        SP.                  4       Fô  pSP0                  ^ 8”  d!   \2        P4                  ! SP0                  4       \2        P6                  ! 4       pV! 4       p\2        P6                  ! 4       pSP9                  V4       V Uu. uF  pV\;        VV4      3NK  	  ppV UUu. uF  w  ppV RVR 2NK  	  pppVP9                  RVV,
          R 24       V! RV^,            R2RP=                  V4      ,           4       Kö  	  VV3R lpV Uu. uF  pVV! V4      3NK  	  ppV UUu. uF  w  ppV RVR 2NK  	  pppV! RRP=                  V4      ,           4       R# u upi u uppi u upi u uppi )r   Nc                  ó0   <€ S^ 8X  d   \        V / VB  R# R# )r   N)Úprint)ÚargsÚkwargsÚranks   *,€r   ÚrprintÚmain.<locals>.rprintY   s   ø€ Ø�1Œ9Ü�4Ð"˜6Ô"ñ r   T)Úreturn_configÚtrust_remote_codeÚquantize_activations)r!   Útokenizer_configÚmodel_configÚ
vocab_sizeÚtext_configc                  óJ   <€ \        SSSSSP                  R 7       F  p K  	  X # ©)Ú
max_tokensÚprefill_step_size)r   r+   )Úresponser   Úgeneration_tokensÚmodelÚpromptÚ	tokenizers    €€€€€r   Úsingle_benchÚmain.<locals>.single_benchu   s3   ø€ Ü'ØØØØ(Ø"×4Ñ4÷
ˆHñ ñ
ð ˆr   c                  óL   <€ \        SSSSS P                  R 7      P                  # r)   )r   r+   Ústats)r   r-   r.   Úpromptsr0   s   €€€€€r   Úbatch_benchÚmain.<locals>.batch_bench€   s,   ø€ ÜØØØØ(Ø"×4Ñ4ô
÷ ‰%ð	r   zRunning warmup..zTiming with prompt_tokens=z, generation_tokens=z, batch_size=Ú.Ú=z.3fztotal_time=zTrial z:  z, c                 óV   <a € V 3R  lS 4       p\        V4      SP                  ,          # )c              3   ó<   <"  € T F  p\        VS4      x € K  	  R # 5i)N)Úgetattr)Ú.0r,   Úks   & €r   Ú	<genexpr>Ú$main.<locals>.avg.<locals>.<genexpr>¡   s   øé € Ð?±Y¨”˜ !×$Ð$³Yùs   ƒ)ÚsumÚ
num_trials)r>   Úvalsr   Ú	responsess   f €€r   ÚavgÚmain.<locals>.avg    s    ù€ Ü?±YÓ?ˆÜ�4‹y˜4Ÿ?™?Õ*Ð*r   z
Averages: )Ú
prompt_tpsÚgeneration_tpsÚpeak_memory)r   Ú
parse_argsÚmxÚrandomÚseedÚdistributedÚinitr   Úpipeliner.   r   Úsizer   r   r#   Ú_eos_token_idsÚprompt_tokensr-   Ú
batch_sizeÚgetÚrandintÚtolistÚrangerB   ÚdelayÚtimeÚsleepÚperf_counterÚappendr<   Újoin)r   ÚgroupÚpipeline_groupÚtensor_groupr   Ú
model_pathÚconfigrS   rT   r&   r1   r6   Ú_benchÚreport_keysÚiÚticr,   Útocr>   ÚresultsÚvrE   r   r-   r.   r/   r5   r   rD   r0   s                         @@@@@@@@r   Úmainrk   O   sö  ÿ€ ÜÓ€FØ×ÑÓ€DÜ‡I�I‡N�N�1Ôä�N‰N×ÑÓ!€EØ�:‰:‹<€DØ"ŸmŸm˜m‘U°€NØ $§§ ‘5°4€Lõ#ð —‘×,Ð,œ}€Jà‡z�zƒ|�aÔÜ#/Ø¨ÀDô$
Ñ ˆˆy™&ô $(ØØØ1°4Ð8Ø0°$×2KÑ2KÐLô	$
Ñ ˆˆy˜&ð  "€IÔà×&Ñ&€MØ×.Ñ.ÐØ—‘€JØ—‘˜LÓ)×PÐP¨V°MÕ-BÀ<Õ-P€JÜ�i‰i×Ñ  :¸MÐ/JÓK×RÑRÓT€GØ�Q�Z€F÷	ñ 	÷ñ ð �Q„Ø‰àˆá
ÐÔÙ
„HâA€KÙ
Ð(˜-Ñ)Ð)>Ð,=Ñ+?¸~À*ÁÈaÐPÔQØ€IÜ�4—?‘?Ö#ˆØ�:‰:˜Œ>Ü�JŠJ�t—z‘zÔ"Ü×ÒÓ!ˆÙ“8ˆÜ×ÒÓ!ˆØ×Ñ˜Ô"Ù6AÓB±k°�A”w˜x¨Ó+Ó,±kˆÐBÙ.5Ô6©g¡d a¨�a�S˜˜!˜C˜“>©gˆÑ6Ø�‰˜ S¨3¥Y¨s OÐ4Ô5Ù�˜˜!��u˜CÐ  4§9¡9¨WÓ#5Õ5Ö6ñ $ö+ñ %0Ó0¡K˜q�‘3�q“6‹{¡K€GÐ0Ù*1Ô2©'¡$ ! Q�!��A�a˜�W‹~©'€GÑ2Ù
ˆZ˜4Ÿ9™9 WÓ-Õ-Ö.ùò CùÛ6ùò 1ùÛ2s   É+MÊ	M
Ë4MÌMÚ__main__)r   rZ   Úmlx.coreÚcorerK   Úmlx_lmr   r   r   Úmlx_lm.generater   Úmlx_lm.utilsr   r   r   rk   Ú__name__© r   r   Ú<module>rt      s=   ðó Û å ç 8Ñ 8Ý )ß 4ò?òDW/ðt ˆzÔÙ†Fñ r   