o
    پii                     @   s   d Z ddlZddlZddlZddlmZmZmZ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 eeZd	d
 Z	ddedee de	eeeej f fddZdS )z
Scheduler process management for gRPC server.

This module handles launching and managing scheduler processes for the gRPC server,
including tensor parallelism, pipeline parallelism, and data parallelism configurations.
    N)DictListOptionalTuple)$run_data_parallel_controller_process)run_scheduler_process)PortArgs
ServerArgs)configure_logger
numa_utils)TorchMemorySaverAdapterc                  O   s"   t  t jt j t| i | dS )a`  
    Wrapper for run_scheduler_process that ignores SIGINT.

    The scheduler process should not handle Ctrl+C - it should only terminate
    when the parent gRPC server exits (via kill_itself_when_parent_died).

    Args:
        *args: Positional arguments for run_scheduler_process
        **kwargs: Keyword arguments for run_scheduler_process
    N)signalSIGINTSIG_IGNr   )argskwargs r   V/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/grpc/scheduler_launcher.py"run_scheduler_with_signal_handling   s   r   server_args	port_argsreturnc                 C   s  t |  |   tjddd |du r t| }td|  g }| jdkrt	j
| jd}g }t| j| j d}| j| }t|| j|  || j| d  }t| j| j d}t|| j|  || j| d  }	|	D ]}
|D ]}tjdd	\}}| j|
| |  || | j  }| jr| jnd}| j| | j }|| | j }|| j| j  }|| j| j  | j| j | j  }tjt| |||||||
d|f
d
}| " t| | |  W d   n1 sw   Y  W d   n1 sw   Y  || || qpqlntjdd	\}}|g}tjt| ||fd
}|  || g }t |D ]P\}}z|! }W n) t"y]   t#d| d || $  t#d|| j%  t&d| w |'ddkrtt&d| d|'dd || q*tdt(| d |d ||fS )a  
    Launch only the scheduler process(es) without tokenizer/detokenizer.

    This function handles all scheduler startup logic including:
    - Tensor parallelism (tp_size)
    - Pipeline parallelism (pp_size)
    - Data parallelism (dp_size)
    - Multi-node distributed setup

    Args:
        server_args: Server configuration
        port_args: Port configuration (created if None)

    Returns:
        Tuple of (scheduler_info, port_args, scheduler_processes):
        - scheduler_info: Dict with model metadata and configuration
        - port_args: Port configuration used for IPC
        - scheduler_processes: List of launched scheduler Process objects

    Raises:
        RuntimeError: If any scheduler process fails to initialize
    spawnT)forceNzserver_args=   )enableF)duplex)targetr   zRank z< scheduler is dead. Please check if there are relevant logs.zExit code: z$Failed to initialize scheduler rank statusreadyzScheduler rank z initialization failed: errorzUnknown errorzAll z/ scheduler process(es) initialized successfullyr   ))r
   check_server_argsmpset_start_methodr   init_newloggerinfodp_sizer   createenable_memory_savermaxnnodespp_sizetp_sizerange	node_rankPipebase_gpu_idgpu_id_stepenable_dp_attentionattn_cp_sizemoe_dp_sizeep_sizeProcessr   configure_subprocessr   startappendr   	enumeraterecvEOFErrorr    joinexitcodeRuntimeErrorgetlen)r   r   scheduler_procsmemory_saver_adapterscheduler_pipe_readersnnodes_per_tp_grouptp_size_per_nodetp_rank_rangepp_size_per_nodepp_rank_rangepp_ranktp_rankreaderwritergpu_idattn_dp_sizeattn_tp_sizeattn_cp_rankmoe_dp_rankmoe_ep_rankprocscheduler_infosidatar   r   r   launch_scheduler_process_only*   s   





 
:

rY   )N)__doc__loggingmultiprocessingr"   r   typingr   r   r   r   ,sglang.srt.managers.data_parallel_controllerr   sglang.srt.managers.schedulerr   sglang.srt.server_argsr   r	   sglang.srt.utilsr
   r   +sglang.srt.utils.torch_memory_saver_adapterr   	getLogger__name__r%   r   r7   rY   r   r   r   r   <module>   s(    
