o
    ٷi                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 eeZde jjeB dee
 d	e jjfd
dZde jjeB dee
 d	e jjfddZde jjeB dee
 d	e jjfddZdS )    N)Optional)init_logger)
ModelMixin)ParallelismBackend)ParallelismConfigtransformerparallelism_configreturnc                 C   sp   t | tjjtfsJ dt|  |d u r| S |jtjkr$t	| |dS |jtj
kr0t| |dS t|j d)NJtransformer must be an instance of torch.nn.Module or ModelMixin, but got r   r   z backend is not supported yet)
isinstancetorchnnModuler   typebackendr   NATIVE_DIFFUSER0maybe_enable_context_parallelism_for_transformerNATIVE_PYTORCH/maybe_enable_tensor_parallelism_for_transformer
ValueErrorr    r   _/home/ubuntu/.local/lib/python3.10/site-packages/cache_dit/parallelism/transformers/dispatch.py(maybe_enable_parallelism_for_transformer   s$   r   c              
   C   s   t | tjjtfsJ dt|  |d u r| S t |ts&J dt| |jtj	ks8J dtj	 d|j |j
d usB|jd urjddlm} || |} d| _|| _td| jj d	t|  d
|d  | S td)Nr
   Dparallelism_config must be an instance of ParallelismConfig but got zparallelism backend must be z
, but got    ) maybe_enable_context_parallelismTParallelize Transformer: , id:, zyNATIVE_DIFFUSER backend only support context parallelism now. Please set ulysses_size or ring_size in parallelism_config.)r   r   r   r   r   r   r   r   r   r   ulysses_size	ring_sizecontext_parallelismr   _is_parallelized_parallelism_configloggerinfo	__class____name__idstrifyr   )r   r   r   r   r   r   r   +   sH   

r   c              
   C   s   t | tjjtfsJ dt|  |d u r| S |jtjks&J d|j t |t	s4J dt| |j
d u r>|jd u sBJ d|jd uru|jdkruddlm} || |d} d| _|| _td	| jj d
t|  d|d  | S td)Nr
   zMparallelism_config.backend must be ParallelismBackend.NATIVE_PYTORCH but got r   zqUlysses/Ring parallelism is not supported in Native_PyTorch backend. Please set it to None in parallelism_config.r   )maybe_enable_tensor_parallelismr   Tr   r   r   zdNATIVE_PYTORCH only supported tensor parallelism now. Please set tp_size > 1 for tensor parallelism.)r   r   r   r   r   r   r   r   r   r   r    r!   tp_sizetensor_parallelismr+   r#   r$   r%   r&   r'   r(   r)   r*   r   )r   r   r+   r   r   r   r   X   sN   
r   )r   typingr   cache_dit.loggerr   diffusers.models.modeling_utilsr   cache_dit.parallelism.backendr   cache_dit.parallelism.configr   r(   r%   r   r   r   r   r   r   r   r   r   <module>   s8    



-
