o
    `۷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)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	   K/home/ubuntu/vllm_env/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   r0   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>)r0   extendr   r   r   r   r   resultsr	   r3   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   r4   r   r	   r   r   9       z0Client.small_value_batch_arg.<locals>.<listcomp>)r   putr0   r6   r   r   r7   r	   r9   r   small_value_batch_arg5   s
   

 zClient.small_value_batch_argN)r"   r#   r$   r1   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   rC   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   _raylet	OPTIMIZEDloggerwarning)msgr	   r	   r   check_optimized_buildQ   s
   	rI   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   rN   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   rS   r	   r   r   v   r   z1main.<locals>.put_multi_small.<locals>.<listcomp>
   r   r	   rW   r	   r   put_multi_smallu       zmain.<locals>.put_multi_smalli  @dtypez&single client get calls (Plasma Store)z&single client put calls (Plasma Store)z%multi client put calls (Plasma Store)  c                      rJ   r-   rO   r	   )arrr	   r   	put_large   rN   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>r]   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 )NrX   i   r[   )r   r   r;   npzerosint64rR   r	   r	   r   do_put   s   zmain.<locals>.do_putc                      rT   )Nc                    rU   r	   rV   r   rd   r	   r   r      r   z+main.<locals>.put_multi.<locals>.<listcomp>rX   r   r	   re   r	   r   	put_multi   rZ   zmain.<locals>.put_multizmulti client put gigabytesg       @c                      rJ   r-   rK   r	   )obj_containing_refr	   r   get_containing_object_ref   rN   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 )Nr]   c                 S   r   r	   r   r   r	   r	   r   r      r   z4main.<locals>.wait_multiple_refs.<locals>.<listcomp>T)fetch_localF)r   r   r+   )num_objs	not_readyri   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>r]   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      r:   z,main.<locals>.multi_task.<locals>.<listcomp>rK   r`   )actorsr   r	   r   
multi_task   s   zmain.<locals>.multi_taskzmulti client tasks asyncc                         t  j  d S r-   rn   r	   ru   r	   r   
actor_sync      zmain.<locals>.actor_syncz1:1 actor calls syncc                      rT   )Nc                    r2   r	   r   r   rz   r	   r   r      r5   z-main.<locals>.actor_async.<locals>.<listcomp>r]   r   r	   rz   r	   r   actor_async   rZ   zmain.<locals>.actor_asyncz1:1 actor calls async   )max_concurrencyc                      rT   )Nc                    r2   r	   r   r   rz   r	   r   r      r5   z2main.<locals>.actor_concurrent.<locals>.<listcomp>r]   r   r	   rz   r	   r   actor_concurrent   rZ   zmain.<locals>.actor_concurrentz1:1 actor calls concurrenti     c                 S   r   r	   r   _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	   rr   r   r	   r	   r   r      r   c                    "   t  fddtD  d S )Nc                       g | ]} |  j  qS r	   r   r   irw   n_cpur	   r   r          z&main.<locals>.work.<locals>.<listcomp>r   rw   r   r   r   r   work      "zmain.<locals>.workc                      r   )Nc                       g | ]}  qS r	   rV   r   )ru   r   r	   r   r      r5   z.main.<locals>.actor_multi2.<locals>.<listcomp>r   r	   )ru   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   rt   r	   r	   r   r      r5   c                      s   t fdd D  d S )Nc                    rs   r	   )r<   r   )r   crv   r	   r   r      r:   z9main.<locals>.actor_multi2_direct_arg.<locals>.<listcomp>rK   r	   )clientsr   r	   r   actor_multi2_direct_arg   r!   z%main.<locals>.actor_multi2_direct_argzn:n actor calls with arg asyncc                      ry   r-   rn   r	   rz   r	   r   r{      r|   z1:1 async-actor calls syncc                      rT   )Nc                    r2   r	   r   r   rz   r	   r   r     r5   -main.<locals>.async_actor.<locals>.<listcomp>r]   r   r	   rz   r	   r   async_actor   rZ   zmain.<locals>.async_actorz1:1 async-actor calls asyncc                      rT   )Nc                    s   g | ]} j |qS r	   )r)   r   r   rz   r	   r   r     r:   r   r]   r   r	   rz   r	   r   r     rZ   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	   rV   r   )ru   r   r	   r   r      r5   z3main.<locals>.async_actor_multi.<locals>.<listcomp>r   r	   )ru   r   r   r	   r   async_actor_multi  r   zmain.<locals>.async_actor_multizn:n async-actor calls asyncrQ   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>)bundles)r   util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 )   )timeout_seconds)r+   )r   pgr	   r	   r   r   4  r:   )r   r   r   remove_placement_group)num_pgs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>)rI   printr   initr;   r   ra   rb   rc   r   rC   r   r   optionsmultiprocessing	cpu_countr,   lenr&   shutdownclient_microbenchmark_main)r8   rM   rP   rY   r_   r    rf   rh   rm   ro   rp   rx   r{   r}   r   r   r   r   r   r   r   r	   )r   r   ru   rw   r^   r   r   r   rd   rS   r   r   r   rg   r   rL   r   r   r   _   s   




r   __main__r-   )__doc__r*   loggingr   numpyra   r   &ray._private.ray_client_microbenchmarkr   r   'ray._private.ray_microbenchmark_helpersr   	getLoggerr"   rF   r   r   r&   r,   r   r    rC   rI   r	   r	   r	   r   <module>   s6    






 k
