o
    ۷i                      @   sT   d dl Z d dlmZmZmZ d dlmZ d dlmZ ee	Z
e jG dd dZdS )    N)OptionalDictAny)ParallelismBackend)init_loggerc                   @   s  e Zd ZU ejZeed< dZeed< dZ	eed< dZ
eed< ejedZeeeef  ed< dZeed	< dZeed
< dZeed< dd ZdefddZ				d!dededededef
ddZdee fddZedefddZedefddZedefddZedefdd ZdS )"ParallelismConfigbackendNulysses_size	ring_sizetp_size)default_factoryparallel_kwargsF_has_text_encoder_has_auto_encoder_has_controlnetc                 C   s  t | jsJ d| j d| jt jkrJ| jd ur| jdks)| jd ur.| jdkr.t j| _n| jd ur=| jdkr=t j| _nt j	| _t
d| j  | jd ur| jdkr| jd u sb| jdksbJ d| jd u sp| jdkspJ d| jt jkrt
d t j| _d S d S | jd ur| jdkr| jd ur| jdkrtd| jd ur| jdks| jd ur| jdkr| jt jkrt
d	 t j| _d S d S d S d S )
NzParallel backend zH is not supported. Please make sure the required packages are installed.   z3Auto selected parallelism backend for transformer: zGTensor parallelism plus Ulysses parallelism is not supported right now.zDTensor parallelism plus Ring parallelism is not supported right now.zoTensor parallelism is only supported for NATIVE_PYTORCH backend right now. Force set backend to NATIVE_PYTORCH.zKUlysses parallelism plus Ring parallelism is not fully supported right now.zwUlysses/Ring parallelism is only supported for NATIVE_DIFFUSER backend right now. Force set backend to NATIVE_DIFFUSER.)r   is_supportedr   AUTOr	   r
   NATIVE_DIFFUSERr   NATIVE_PYTORCHNONEloggerinfowarning
ValueErrorself r   R/home/ubuntu/vllm_env/lib/python3.10/site-packages/cache_dit/parallelism/config.py__post_init__#   sP   





zParallelismConfig.__post_init__returnc                 C   s<   | j d ur
| j dkp| jd uo| jdkp| jd uo| jdkS )Nr   )r	   r
   r   r   r   r   r   enabledV   s
   zParallelismConfig.enableddetailstext_encodervae
controlnetc                 C   sp  |rr|s|r8|   }dtj d}|r|d| d7 }n|r'|d| d7 }n|d| d7 }|dd }|S d| j d}| jd urM|d| j d7 }| jd ur[|d| j d7 }| jd uri|d| j d7 }|dd }|S d}| jd ur|d	| j 7 }| jd ur|d
| j 7 }| jd ur|d| j 7 }|s| jr|d7 }|s| j	r|d7 }|s| j
r|d7 }|S )NzParallelismConfig(backend=z, ztp_size=zulysses_size=zdp_size=)z
ring_size= UlyssesRingTP_TEP_VAEP_CNP)_get_extra_module_world_sizer   r   rstripr   r	   r
   r   r   r   r   )r   r"   r#   r$   r%   extra_module_world_sizeparallel_strr   r   r   strify]   sD   








zParallelismConfig.strifyc                 C   st   g }| j dur| j dkr|| j  | jdur"| jdkr"|| j | jdur2| jdkr2|| j |r8t|S dS )zJGet the world size for extra parallel modules, e.g., text encoder and VAE.Nr   )r   appendr	   r
   max)r   sizesr   r   r   r.      s   z.ParallelismConfig._get_extra_module_world_sizec                 C   *   |   }|du s|dksJ dd| _|S )z0Get the world size for text encoder parallelism.Nr   zGText encoder world size must be None or greater than 1 for parallelism.T)r.   r   r   
world_sizer   r   r   text_encoder_world_size      z)ParallelismConfig.text_encoder_world_sizec                 C   r6   )z'Get the world size for VAE parallelism.Nr   z>VAE world size must be None or greater than 1 for parallelism.T)r.   r   r7   r   r   r   auto_encoder_world_size   r:   z)ParallelismConfig.auto_encoder_world_sizec                 C   s   | j S )N)vae_world_sizer   r   r   r   r<      s   z ParallelismConfig.vae_world_sizec                 C   r6   )z.Get the world size for ControlNet parallelism.Nr   zEControlNet world size must be None or greater than 1 for parallelism.T)r.   r   r7   r   r   r   controlnet_world_size   r:   z'ParallelismConfig.controlnet_world_size)FFFF) __name__
__module____qualname__r   r   r   __annotations__r	   intr
   r   dataclassesfielddictr   r   r   strr   r   boolr   r   r   r!   r2   r.   propertyr9   r;   r<   r=   r   r   r   r   r   	   sF   
  3	
1		r   )rC   typingr   r   r   cache_dit.parallelism.backendr   cache_dit.loggerr   r>   r   	dataclassr   r   r   r   r   <module>   s    