
    .`i&                         d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ  ee          Z G d de          ZdS )    N)Callable)Any)envs)
VllmConfig)init_logger)CpuArchEnumcurrent_platform)CpuPlatformLogicalCPUInfo)TorchProfilerWrapper)set_random_seed)CPUModelRunner)Worker#init_worker_distributed_environmentc                        e Zd Z	 ddededededef
 fdZd Zdd
eddfdZ	dde
e         dz  ddfdZdefdZddZdee
e         ge
e         f         defdZddefdZ xZS )	CPUWorkerFvllm_config
local_rankrankdistributed_init_methodis_driver_workerc                     t                                          |||||           d| j        _        d | _        |j        }|j        dk    r1|j         d| j         }t          ||| j	        dg          | _        d S d S )N)r   Ttorchz-rank-CPU)worker_namer   
activities)
super__init__parallel_configdisable_custom_all_reduceprofilerprofiler_configinstance_idr   r   r   )	selfr   r   r   r   r   r"   r   	__class__s	           m/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/worker/cpu_worker.pyr   zCPUWorker.__init__   s     	#- 	 	
 	
 	
 :>6 %)%5#w..(4GGDIGGK0'?!7	  DMMM /.    c                 T   t           j        }|dk    rt          j                    dk    rt	          j                    }|t          j        t          j        fv r| 	                    d           | _
        n|t          j        k    r| 	                    d           | _
        n|t          j        k    r| 	                    d           | _
        njd| _
        nb|dk    rd| _
        nT| j        j        }|                    d          }|| j        j        }|||z  |dz   |z           }|| j                 | _
        | j
        dk    rEt$          j        j                            | j
                  }|rt,                              |           | j                            d	          d
         t2          j        d<   t7          | j        | j        | j        | j        t          j                   t?          | j         j!                   tE          | j        t%          j#        d                    | _$        d S )NautoLinuxc                     d | D             S )Nc                 .    g | ]}|j         d z  dk     |S )      id).0cpus     r&   
<listcomp>z;CPUWorker.init_device.<locals>.<lambda>.<locals>.<listcomp>>   s#    !H!H!H#!a#r'    cpuss    r&   <lambda>z'CPUWorker.init_device.<locals>.<lambda>>   s    !H!H!H!H!H r'   c                     | dd          S )Nr4   r5   s    r&   r7   z'CPUWorker.init_device.<locals>.<lambda>C   s    bcc r'   c                     | S Nr4   r5   s    r&   r7   z'CPUWorker.init_device.<locals>.<lambda>G   s    t r'   nobind|   :r9   VLLM_DIST_IDENTr2   )%r   VLLM_CPU_OMP_THREADS_BINDplatformsystemr	   get_cpu_architecturer   POWERPCS390X_get_autobind_cpu_idslocal_omp_cpuidX86ARMr   data_parallel_rank_localsplit
world_sizer   r   ops_C_utilsinit_cpu_threads_envloggerinfor   osenvironr   r   r   dist_backendr   model_configseedr   devicemodel_runner)r$   
omp_cpuidscpu_archlocal_dp_rankomp_cpuids_listrM   rets          r&   init_devicezCPUWorker.init_device6   s#   3
HO$5$5$@$@'<>>HK/1BCCC'+'A'AHH( ($$ [_,,'+'A'A**( ($$ [_,,'+'A'ABSBS'T'T$$'/$$8###+D   0IM(..s33O(!1<
"1!J.-!2Cz1QQ# $349#=D 8++)$99$:NOOC !C    )-(D(J(J3(O(OPR(S
$%+I(O)	
 	
 	
 	)./// -;el511-
 -
r'   r>   levelreturnNc                 :    t                               d           d S Nz.sleep mode is not supported on CPU, ignore it.rQ   warning)r$   r`   s     r&   sleepzCPUWorker.sleepm       GHHHr'   tagsc                 :    t                               d           d S rc   rd   )r$   rh   s     r&   wake_upzCPUWorker.wake_upq   rg   r'   c                     | j         j        pdS )Nr   )cache_configcpu_kvcache_space_bytesr$   s    r&   determine_available_memoryz$CPUWorker.determine_available_memoryu   s     8=A=r'   c                 j    t          | j        j                   | j                                         d S r;   )r   rV   rW   rY   warming_up_modelrn   s    r&   compile_or_warm_up_modelz"CPUWorker.compile_or_warm_up_modelx   s3     	).///**,,,,,r'   cpu_selectorc                 t  	 t          j                    \  }}t          |          | j        j        k    sJ d| j        j         d| d            || j                 		fd|D             }i }|D ]5}|j        |vr
g ||j        <   ||j                                     |           6g }|                                D ]2}t          |d           }|
                     ||                     3t          |d           }t          j        }|&| j        j        d	k    p| j        j        d	k    }|rd	nd
}t          |          |k    sJ d| dt          |           d            |d
k    r|d|          }t                              dd |D                        d                    d |D                       S )a  
        Return CPU ids to bind based on NUMA nodes.
        Currently for rank N, only CPU ids on the N-th node in available NUMA
        node list will be selected.
        Args:
            cpu_selector: a callable object to select CPUs from a CPU list
            of a physical core. The input is a LogicalCPUInfo list, sorted by
            the LogicalCPUInfo.id. A selected LogicalCPUInfo list should be
            returned.
        z0No enough allowed NUMA nodes to bind threads of z$ CPUWorkers. Allowed NUMA nodes are z&. Please try to bind threads manually.c                 *    g | ]}|j         k    |S r4   )	numa_node)r1   xselected_numa_nodes     r&   r3   z3CPUWorker._get_autobind_cpu_ids.<locals>.<listcomp>   s-     
 
 
1;:L+L+LA+L+L+Lr'   c                     | j         S r;   r/   rw   s    r&   r7   z1CPUWorker._get_autobind_cpu_ids.<locals>.<lambda>   s    ad r'   )keyc                     | j         S r;   r/   rz   s    r&   r7   z1CPUWorker._get_autobind_cpu_ids.<locals>.<lambda>   s    !$ r'   Nr>   r   zVLLM_CPU_NUM_OF_RESERVED_CPU (z) should less than .z0auto thread-binding list (id, physical core): %sc                 *    g | ]}|j         |j        fS r4   )r0   physical_corer1   rw   s     r&   r3   z3CPUWorker._get_autobind_cpu_ids.<locals>.<listcomp>   s!    ???adAO$???r'   ,c                 6    g | ]}t          |j                  S r4   )strr0   r   s     r&   r3   z3CPUWorker._get_autobind_cpu_ids.<locals>.<listcomp>   s     ===qQT===r'   )r
   get_allowed_cpu_core_node_listlenr   rM   r   r   appendvaluessortedextendr   VLLM_CPU_NUM_OF_RESERVED_CPUdata_parallel_size_localrQ   rR   join)
r$   rs   allowed_numa_nodeslogical_cpu_listcore_to_cpuscpu_infocpu_listreserve_cpu_numneed_reserverx   s
            @r&   rG   zCPUWorker._get_autobind_cpu_ids~   sl    688 	-, %&&$*>*IIII3#.3 3&83 3 3 JII 0@
 
 
 
'
 
 

 9;( 	B 	BH%\9979X34/077AAAA$++-- 	< 	<HhNN;;;H##LL$:$:;;;;!"2GGG ;"$/!3 E'@1D  $06aaQO#$$6669_ 9 9 #$4 5 59 9 9 766 a/0A/1A0AB>??.>???	
 	
 	
 xx==,<===>>>r'   Tis_startc                     | j         t          d          |r| j                                          d S | j                                          d S )NzProfiler is not enabled.)r!   RuntimeErrorstartstop)r$   r   s     r&   profilezCPUWorker.profile   sU    = 9::: 	!M!!!!!M     r'   )F)r>   r;   )ra   N)T)__name__
__module____qualname__r   intr   boolr   r_   rf   listrj   ro   rr   r   r   rG   r   __classcell__)r%   s   @r&   r   r      si        "'   	
 "%      <5
 5
 5
n 3 t     DI,     >C > > > >- - - -=?$d>&:%;T.=Q%QR=?	=? =? =? =?~! ! ! ! ! ! ! ! ! !r'   r   )rS   rB   collections.abcr   typingr   r   vllmr   vllm.configr   vllm.loggerr   vllm.platformsr   r	   vllm.platforms.cpur
   r   vllm.profiler.wrapperr   vllm.utils.torch_utilsr   vllm.v1.worker.cpu_model_runnerr   vllm.v1.worker.gpu_workerr   r   r   rQ   r   r4   r'   r&   <module>r      sG   
			  $ $ $ $ $ $              " " " " " " # # # # # # 8 8 8 8 8 8 8 8 : : : : : : : : 6 6 6 6 6 6 2 2 2 2 2 2 : : : : : : Q Q Q Q Q Q Q Q	X		l! l! l! l! l! l! l! l! l! l!r'   