o
    1 i#                     @   s   d 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
mZ eeZejddG dd dZejG dd	 d	ZejddG d
d dZejdd Zejdd Zejdd Zdd ZdddZedkrre  dS dS )z,This is the script for `ray microbenchmark`.    N)main)timeit)Znum_cpusc                   @   $   e Zd Zdd Zdd Zdd ZdS )Actorc                 C      dS Ns   ok selfr   r   a/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/ray/_private/ray_perf.pysmall_value      zActor.small_valuec                 C   r   r   r   r
   xr   r   r   small_value_arg   r   zActor.small_value_argc                 C   s   t dd t|D  d S )Nc                 S      g | ]}t  qS r   r   remote.0_r   r   r   
<listcomp>       z+Actor.small_value_batch.<locals>.<listcomp>raygetranger
   nr   r   r   small_value_batch      zActor.small_value_batchN)__name__
__module____qualname__r   r   r   r   r   r   r   r          r   c                   @   r   )
AsyncActorc                       dS r   r   r	   r   r   r   r         zAsyncActor.small_valuec                    r&   r   r   r   r   r   r   small_value_with_arg!   r'   zAsyncActor.small_value_with_argc                    s$   t dd t|D I d H  d S )Nc                 S   r   r   r   r   r   r   r   r   %   r   z0AsyncActor.small_value_batch.<locals>.<listcomp>)asynciowaitr   r   r   r   r   r   $   s   "zAsyncActor.small_value_batchN)r!   r"   r#   r   r(   r   r   r   r   r   r%      r$   r%   c                   @   r   )Clientc                 C   s   t |ts|g}|| _d S N)
isinstancelistservers)r
   r/   r   r   r   __init__*   s   

zClient.__init__c                    s:   g }| j D ] | fddt|D  qt| d S )Nc                       g | ]} j  qS r   r   r   sr   r   r   2       z,Client.small_value_batch.<locals>.<listcomp>)r/   extendr   r   r   r
   r   resultsr   r2   r   r   /   s   
zClient.small_value_batchc                    sF   t dg }| jD ] | fddt|D  q
t | d S )Nr   c                    s   g | ]} j qS r   )r   r   r   r3   r   r   r   r   9       z0Client.small_value_batch_arg.<locals>.<listcomp>)r   putr/   r5   r   r   r6   r   r8   r   small_value_batch_arg5   s
   

 zClient.small_value_batch_argN)r!   r"   r#   r0   r   r;   r   r   r   r   r+   (   s    r+   c                   C   r   r   r   r   r   r   r   r   =   s   r   c                 C   s    dd t | D }t| dS )Nc                 S   r   r   r   r   r   r   r   r   D   r   z%small_value_batch.<locals>.<listcomp>r   r   r   r   )r   	submittedr   r   r   r   B   s   
r   c                  C   s&   g } t dD ]
}| td q| S )N'     )r   appendr   r:   )obj_refsr   r   r   r   create_object_containing_refI   s   rB   c                  C   s   t jjsd} t|  d S d S )Na  WARNING: Unoptimized build! To benchmark an optimized build, try:
	bazel run -c opt //:gen_ray_pkg
You can also make this permanent by adding
	build --compilation_mode=opt
to your user-wide ~/.bazelrc file. (Do not add this to the project-level .bazelrc file.))r   Z_raylet	OPTIMIZEDloggerwarning)msgr   r   r   check_optimized_buildQ   s
   	rG   c                    sh  | pg } t   td t  tdfdd}dd }tjdd 		fd	d
}tjdtjd| t	d|7 } | t	d|7 } | t	d|d7 } fdd}| t	d|d7 } dd }| t	d|7 } tjdd fdd}| t	d|d7 } t
 fdd}| t	d |7 } d!d" }| t	d#|7 } d$d% }	| t	d&|	7 } d'd( }
| t	d)|
d7 } d*d+
d,d- t
D fd.d/}| t	d0|
 7 } t fd1d2}| t	d3|7 } t fd4d5}| t	d6|d7 } tjd7d8 fd9d:}| t	d;|d7 } d<t d= d>d- tD tfd?d@}| t	dA|t 7 } t d= dBd- tD tjfdCdD
fdEdF}| t	dG|
 7 } ddHd- tD dId- D fdJdK}| t	dL|t 7 } t fdMd2}| t	dN|7 } t fdOdP}| t	dQ|d7 } t fdRdP}| t	dS|d7 } d<t d= dTd- tD tfdUdV}| t	dW|t 7 } d<d+
t d= dXd- tD tjfdYdZ
fd[d\}| t	d]|
 7 } t  d^d_ tjd`d^ida  fdbdc| t	ddfdedf7 } t  t|  | S )gNz=Tip: set TESTS_TO_RUN='pattern' to run a subset of benchmarksr   c                         t   d S r,   r   r   r   )valuer   r   	get_smallj      zmain.<locals>.get_smallc                   S   s   t d d S )Nr   r   r:   r   r   r   r   	put_smallm   rL   zmain.<locals>.put_smallc                  S   s   t dD ]} td qd S )Nd   r   )r   r   r:   r   r   r   r   do_put_smallp   s   zmain.<locals>.do_put_smallc                          t  fddtdD  d S )Nc                       g | ]}   qS r   r   r   rQ   r   r   r   v   r   z1main.<locals>.put_multi_small.<locals>.<listcomp>
   r   r   rU   r   r   put_multi_smallu       zmain.<locals>.put_multi_smalli  @Zdtypez&single client get calls (Plasma Store)z&single client put calls (Plasma Store)z%multi client put calls (Plasma Store)  c                      rH   r,   rM   r   )arrr   r   	put_large   rL   zmain.<locals>.put_largezsingle client put gigabytesg?c                  S   s    dd t dD } t|  dS )Nc                 S   r   r   r   r   r   r   r   r      r   z3main.<locals>.small_value_batch.<locals>.<listcomp>rZ   r   r<   r=   r   r   r   r      s   
zmain.<locals>.small_value_batchz!single client tasks and get batchc                  S   s(   t dD ]} ttjdtjd qd S )NrV   i   rY   )r   r   r:   npzerosint64rP   r   r   r   do_put   s   zmain.<locals>.do_putc                      rR   )Nc                    rS   r   rT   r   ra   r   r   r      r   z+main.<locals>.put_multi.<locals>.<listcomp>rV   r   r   rb   r   r   	put_multi   rX   zmain.<locals>.put_multizmulti client put gigabytesg       @c                      rH   r,   rI   r   )obj_containing_refr   r   get_containing_object_ref   rL   z'main.<locals>.get_containing_object_refz,single client get object containing 10k refsc                  S   sF   d} dd t | D }d}t | D ]}tj||d\}}|r d}qd S )NrZ   c                 S   r   r   r   r   r   r   r   r      r   z4main.<locals>.wait_multiple_refs.<locals>.<listcomp>T)fetch_localF)r   r   r*   )Znum_objsZ	not_readyrf   r   _readyr   r   r   wait_multiple_refs   s   z main.<locals>.wait_multiple_refszsingle client wait 1k refsc                   S   s   t t  d S r,   r   r   r   r   r   r   r   r   
small_task   s   zmain.<locals>.small_taskzsingle client tasks syncc                   S   s   t dd tdD  d S )Nc                 S   r   r   r   r   r   r   r   r      r   z2main.<locals>.small_task_async.<locals>.<listcomp>rZ   r   r   r   r   r   small_task_async   r    zmain.<locals>.small_task_asynczsingle client tasks asyncr>      c                 S   r   r   r   r   r   r   r   r   r      r   zmain.<locals>.<listcomp>c                     s    fdd D } t |  d S )Nc                       g | ]}|j  qS r   )r   r   r   ar   r   r   r      r9   z,main.<locals>.multi_task.<locals>.<listcomp>rI   r]   )actorsr   r   r   
multi_task   s   zmain.<locals>.multi_taskzmulti client tasks asyncc                         t  j  d S r,   ri   r   rp   r   r   
actor_sync      zmain.<locals>.actor_syncz1:1 actor calls syncc                      rR   )Nc                    r1   r   r   r   ru   r   r   r      r4   z-main.<locals>.actor_async.<locals>.<listcomp>rZ   r   r   ru   r   r   actor_async   rX   zmain.<locals>.actor_asyncz1:1 actor calls async   )Zmax_concurrencyc                      rR   )Nc                    r1   r   r   r   ru   r   r   r      r4   z2main.<locals>.actor_concurrent.<locals>.<listcomp>rZ   r   r   ru   r   r   actor_concurrent   rX   zmain.<locals>.actor_concurrentz1:1 actor calls concurrenti     c                 S   r   r   r   Z_remoter   r   r   r   r      r   c                         t  j d S r,   r   r   r   r   r   clientr   r   r   actor_async_direct      z main.<locals>.actor_async_directz1:n actor calls asyncc                 S   r   r   rm   r   r   r   r   r      r   c                    "   t  fddtD  d S )Nc                       g | ]} |  j  qS r   r   r   irr   n_cpur   r   r          z&main.<locals>.work.<locals>.<listcomp>r   rr   r   r   r   r   work      "zmain.<locals>.workc                      r   )Nc                       g | ]}  qS r   rT   r   )rp   r   r   r   r      r4   z.main.<locals>.actor_multi2.<locals>.<listcomp>r   r   )rp   mr   r   r   actor_multi2      "zmain.<locals>.actor_multi2zn:n actor calls asyncc                 S   r   r   r|   r   r   r   r   r      r   c                 S   s   g | ]}t |qS r   )r+   r   ro   r   r   r   r      r4   c                      s   t fdd D  d S )Nc                    rn   r   )r;   r   )r   crq   r   r   r      r9   z9main.<locals>.actor_multi2_direct_arg.<locals>.<listcomp>rI   r   )clientsr   r   r   actor_multi2_direct_arg   r    z%main.<locals>.actor_multi2_direct_argzn:n actor calls with arg asyncc                      rt   r,   ri   r   ru   r   r   rv      rw   z1:1 async-actor calls syncc                      rR   )Nc                    r1   r   r   r   ru   r   r   r     r4   -main.<locals>.async_actor.<locals>.<listcomp>rZ   r   r   ru   r   r   async_actor   rX   zmain.<locals>.async_actorz1:1 async-actor calls asyncc                      rR   )Nc                    s   g | ]} j |qS r   )r(   r   r   ru   r   r   r     r9   r   rZ   r   r   ru   r   r   r     rX   z%1:1 async-actor calls with args asyncc                 S   r   r   r%   r   r   r   r   r   r     r   c                      r}   r,   r~   r   r   r   r   async_actor_async  r   zmain.<locals>.async_actor_asyncz1:n async-actor calls asyncc                 S   r   r   r   r   r   r   r   r     r   c                    r   )Nc                    r   r   r   r   r   r   r   r     r   z2main.<locals>.async_actor_work.<locals>.<listcomp>r   r   r   r   r   async_actor_work  r   zmain.<locals>.async_actor_workc                      s"   t  fddtD  d S )Nc                    r   r   rT   r   )rp   r   r   r   r      r4   z3main.<locals>.async_actor_multi.<locals>.<listcomp>r   r   )rp   r   r   r   r   async_actor_multi  r   zmain.<locals>.async_actor_multizn:n async-actor calls asyncrO   r?   custom)	resourcesc                    s>    fddt | D }dd |D  |D ]}tj| qd S )Nc                    s(   g | ]}t jjd d t D dqS )c                 S   s   g | ]}d diqS )r   gMbP?r   r   r   r   r   r   0  r   zKmain.<locals>.placement_group_create_removal.<locals>.<listcomp>.<listcomp>)Zbundles)r   utilZplacement_groupr   r   NUM_BUNDLESr   r   r   .  s    z@main.<locals>.placement_group_create_removal.<locals>.<listcomp>c                 S   s   g | ]}|j d dqS )   )Ztimeout_seconds)r*   )r   pgr   r   r   r   4  r9   )r   r   r   Zremove_placement_group)Znum_pgsZpgsr   r   r   r   placement_group_create_removal-  s   
z,main.<locals>.placement_group_create_removalzplacement group create/removalc                      s    S r,   r   r   )NUM_PGSr   r   r   <lambda>?  s    zmain.<locals>.<lambda>)rG   printr   initr:   r   r^   r_   r`   r   rB   r   r   optionsmultiprocessing	cpu_countr+   lenr%   shutdownclient_microbenchmark_main)r7   rK   rN   rW   r\   r   rc   re   rh   rj   rk   rs   rv   rx   rz   r   r   r   r   r   r   r   )r   r   rp   rr   r[   r   r   r   ra   rQ   r   r   r   rd   r   rJ   r   r   r   _   s   




r   __main__r,   )__doc__r)   loggingr   numpyr^   r   Z&ray._private.ray_client_microbenchmarkr   r   Z'ray._private.ray_microbenchmark_helpersr   	getLoggerr!   rD   r   r   r%   r+   r   r   rB   rG   r   r   r   r   <module>   s6    






 k
