
    )`i\6                     6    d dl mZ d dlZ G d de          ZdS )    )ListNc                   p   e Zd ZdZ	 	 	 d3ddddddddddddd	Zd
 Zd Zed             Zej	        de
fd            Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zd Zde
fdZde
fdZd  Zd! Zd" Zd# Zd$ Z d% Z!d& Z"d' Z#d( Z$d) Z%d* Z&d+e
d,e'e
         fd-Z(d.e
d,e'e
         fd/Z)e*d0e+fd1            Z,d2 Z-dS )4Mappinga  
    A node with 8 GPUs, tp_size = 4, cp_size = 1, pp_size = 2

    2 tp groups:

    - [0, 1, 2, 3]
    - [4, 5, 6, 7]

    4 pp groups:

    - [0, 4]
    - [1, 5]
    - [2, 6]
    - [3, 7]

    A node with 8 GPUs, tp_size = 4, cp_size = 2, pp_size = 1

    2 tp groups:

    - [0, 1, 2, 3]
    - [4, 5, 6, 7]

    4 cp groups:

    - [0, 4]
    - [1, 5]
    - [2, 6]
    - [3, 7]

    A node with 8 GPUs, moe_tp_size = 2, moe_ep_size = 4

    4 moe_tp groups:

    - [0, 4]
    - [1, 5]
    - [2, 6]
    - [3, 7]

    2 moe_ep groups:

    - [0, 1, 2, 3]
    - [4, 5, 6, 7]

    2 nodes with 16 GPUs, moe_tp_size = 2, moe_ep_size = 4, pp_size = 2

    8 moe_tp groups:

    - [0 4]
    - [1 5]
    - [2 6]
    - [3 7]
    - [8 12]
    - [9 13]
    - [10 14]
    - [11 15]

    4 moe_ep groups:

    - [0, 1, 2, 3]
    - [4, 5, 6, 7]
    - [8, 9, 10, 11]
    - [12, 13, 14, 15]

    8 pp groups:

    - [0 8]
    - [1 9]
    - [2 10]
    - [3 11]
    - [4 12]
    - [5 13]
    - [6 14]
    - [7 15]

    2 nodes with 8 GPUs, tp_size 2, pp_size 2, cp_size 2

    4 tp groups:
    - [0, 1]
    - [2, 3]
    - [4, 5]
    - [6, 7]

    4 pp groups:
    - [0, 4]
    - [1, 5]
    - [2, 6]
    - [3, 7]

    4 cp groups:
    - [0, 2]
    - [1, 3]
    - [4, 6]
    - [5, 7]
       r      NF)cp_size	cp_configtp_sizepp_sizemoe_cluster_sizemoe_tp_sizemoe_ep_sizeattn_tp_sizeattn_cp_sizeauto_parallelenable_attention_dpc                6	   |dk    rd}|	dk    r|
dk    r||z  }	d}
n|	dk    r	||
|z  z  }	n|
dk    r||	|z  z  }
|dk    r|dk    r||z  }d}n|dk    r	||z  |z  }n|dk    r||z  |z  }|dk    rt          d| d| d          |r,|dk    s|dk    s|dk    rt          d| d| d| d          n(||z  |z  |k    rt          d| d| d	| d	| d	          |	|
z  }||z  }||k    rt          d
| d|	 d	|
 d	|           ||z  }|||z  k    rt          d| d	| d| d	|           |
dk    r|dk    rt          d          || _        || _        ||ni | _        || _        |	| _        |
| _        || _        || _	        || _
        || _        || _        || _        || _        || _        g | _        g | _        g | _        g | _        g | _        g | _        |dk    r|
dk    sJ t-          ||z            D ]=}t-          ||||z            }| j                            t1          |                     >t-          |          D ]a}t-          |          D ]O}t-          ||z  |z  |z   |dz   |z  |z  |z   |          }| j                            t1          |                     Pbt-          |          D ]f}t-          |          D ]T}t-          ||z  |z  ||z  z   ||z  |z  |dz   |z  z             }| j                            t1          |                     Ugt-          |          D ]^}t-          ||
z            D ]I}t-          ||z  |z   |dz   |z  ||
z            }| j                            t1          |                     J_t-          |          D ]f}t-          |	          D ]T}t-          ||z  ||z  |
z  z   ||z  |dz   |z  |
z  z             }| j                            t1          |                     Ugt-          |          D ]}t-          |	          D ]r}t-          |          D ]`}t-          ||z  ||z  |
z  z   ||
z  z   ||z  ||z  |
z  z   |dz   |
z  z             }| j                            t1          |                     asd S )Nr   r   z(attn_cp_size must be 1 for now, but got z, .zLWhen auto parallel is enabled, tp_size, pp_size, cp_size must be 1, but got z>world_size must equal to tp_size * pp_size * cp_size, but got z != z * zLtp_size must equal to moe_tp_size * moe_ep_size * moe_cluster_size, but got zEtp_size * cp_size must equal to attn_tp_size * attn_cp_size, but got zCP don't support MoE tp/ep yet)
ValueErrorNotImplementedErrorr   r	   r
   r   r   r   r   r   r   r   
world_sizer   rankgpus_per_node	pp_groups	cp_groups	tp_groupsmoe_cluster_groupsmoe_tp_groupsmoe_ep_groupsrangeappendlist)selfr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   moe_tp_ep_sizemoe_tp_cluster_ep_sizeattn_tp_cp_sizeiranksjks                         k/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/flashinfer/comm/mapping.py__init__zMapping.__init__u   s;   ( r!! "!2!2!%55KKKB!k4D&DEKKB!k4D&DEK2,""4"4"W,LLLR"W,<LLR"W,<L1Z<ZZ<ZZZ    		!||w!||w!||  Dcj  D  Dnu  D  D  zA  D  D  D   0<
  7*j88  HU_  H  Hel  H  Hqx  H  H  ~E  H  H  H   %{2!/2B!B!W,, __f  _  _lw  _  _  }H  _  _  M]  _  _   '5g/// QX_  Q  Qdk  Q  Qq}  Q  Q  CO  Q  Q   !!%&FGGG&/&;&& 0((*$#6 	*"$a!#### w()) 	/ 	/A!Z7):;;EN!!$u++.... w 	3 	3A7^^ 3 3K')A-A/@7/JQ/NPW  %%d5kk2222	3 w 	3 	3A7^^ 3 3K')AK7K')QUg,==  %%d5kk22223 w 	7 	7A+k9:: 7 7..2U44${2 
 "))$u++66667 w 	< 	<A;'' < <..5E1E1SS..1u 00;>? 
 '..tE{{;;;;< w 	; 	;A;'' 
; 
;/00 	; 	;A!22..<=k/* 22..<=q5K/0	 E &--d5kk::::	;
;	; 	;    c                    t          |t                    st          S | j        |j        k    o| j        |j        k    o| j        |j        k    o| j        |j        k    o| j        |j        k    oo| j        |j        k    o_| j	        |j	        k    oO| j
        |j
        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S N)
isinstancer   NotImplementedr   r   r   r	   r   r   r   r   r   r   r   r   )r$   others     r,   __eq__zMapping.__eq__  s	   %)) 	"!! Ou// :	UZ':"e&99: -: -	:
 %)??: -:  E$55:  E$55: !U%77: !U%77: "e&99	
r.   c                     t          | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        f          S r0   )hashr   r   r   r	   r   r   r   r   r   r   r   r   r$   s    r,   __hash__zMapping.__hash__$  s\    	" % !!"
 
 	
r.   c                     | j         S r0   )_rankr7   s    r,   r   zMapping.rank6  s
    zr.   r   c                     | j         sDt          |t                    r|dk     r)|| j        k    rt	          d| j        dz
   d| d          || _        d S )Nr   z(Rank should be an integer between 0 and r   z
, but got r   )r   r1   intr   r   r:   r$   r   s     r,   r   zMapping.rank:  ss     ' 	dC(( D1HH9P9P etQR?Ree^beee   


r.   c                 2    | j         rdn| j        | j        z  S Nr   )r   r   r   r7   s    r,   tp_rankzMapping.tp_rankD  s    &DqqDI,DDr.   c                 B    | j         rdn| j        | j        | j        z  z  S r?   r   r   r   r	   r7   s    r,   pp_rankzMapping.pp_rankH  s$    &VqqDI$,:U,VVr.   c                 R    | j         rdn| j        | j        | j        z  z  | j        z  S r?   rB   r7   s    r,   cp_rankzMapping.cp_rankL  s3     !KAAdlT\9:dlJ	
r.   c                 0    | j         | j        | j        z  z  S r0   )r@   r   r   r7   s    r,   moe_tp_rankzMapping.moe_tp_rankT  s    | 043H HIIr.   c                      | j         | j        z  S r0   )r@   r   r7   s    r,   moe_cluster_rankzMapping.moe_cluster_rankX  s    |d333r.   c                      | j         | j        z  S r0   )r@   r   r7   s    r,   moe_ep_rankzMapping.moe_ep_rank\  s    |d...r.   c                 F    | j         | j        | j        z  | j        z            S r0   )r   rC   r	   rE   r7   s    r,   tp_groupzMapping.tp_group`      ~dlT\9DLHIIr.   c                 F    | j         | j        | j        z  | j        z            S r0   )r   rE   r   r@   r7   s    r,   pp_groupzMapping.pp_groupd  rN   r.   c                 F    | j         | j        | j        z  | j        z            S r0   )r   rC   r   r@   r7   s    r,   cp_groupzMapping.cp_grouph  rN   r.   c                 v    | j         | j        | j        z  | j        z  | j        | j        z  z   | j        z            S r0   )r   rC   r   r   rI   rK   r7   s    r,   moe_tp_groupzMapping.moe_tp_groupl  sE    !L40043CC#d&667
 	
r.   c                 F    | j         | j        | j        z  | j        z            S r0   )r   rC   r   rG   r7   s    r,   moe_cluster_groupzMapping.moe_cluster_groupt  s'    &L4++d.>>
 	
r.   c                 v    | j         | j        | j        z  | j        z  | j        | j        z  z   | j        z            S r0   )r    rC   r   r   rG   rI   r7   s    r,   moe_ep_groupzMapping.moe_ep_groupz  sE    !L4++d.CC!667#$
 	
r.   c                      | j         | j        z  S r0   r   r   r7   s    r,   	node_rankzMapping.node_rank  s    yD...r.   c                      | j         | j        z  S r0   rZ   r7   s    r,   
local_rankzMapping.local_rank  s    y4---r.   c                     | j         dk    S Nr   )r	   r7   s    r,   has_cpzMapping.has_cp      |ar.   c                     || j         z  S r0   r   r=   s     r,   get_node_rankzMapping.get_node_rank  s    t)))r.   c                     || j         z  S r0   rc   r=   s     r,   get_local_rankzMapping.get_local_rank  s    d(((r.   c                 "    | j         | j        k    S r0   )r   r   r7   s    r,   is_multi_nodezMapping.is_multi_node  s    !333r.   c                     | j         dk    S r_   )r   r7   s    r,   has_tpzMapping.has_tp  ra   r.   c                 (    | j         | j        dz
  k    S r_   rC   r   r7   s    r,   is_last_pp_rankzMapping.is_last_pp_rank      |t|a///r.   c                 (    | j         | j        dz
  k    S )N   rl   r7   s    r,   is_second_last_pp_rankzMapping.is_second_last_pp_rank  rn   r.   c                     | j         dk    S r?   )rC   r7   s    r,   is_first_pp_rankzMapping.is_first_pp_rank  s    |q  r.   c                     | j         dk    S r_   )r   r7   s    r,   has_ppzMapping.has_pp  ra   r.   c                 T    | j         | j        | j        z  z
  }|dk     r
|| j        z   }|S r?   r   r   r	   r   r$   ps     r,   prev_pp_rankzMapping.prev_pp_rank  s1    It|33q55DO#Ar.   c                 ^    | j         | j        | j        z  z   }|| j        k    r
|| j        z
  }|S r0   rw   rx   s     r,   next_pp_rankzMapping.next_pp_rank  s5    It|33DO#Ar.   c                     | j         dk    S r_   )r   r7   s    r,   has_moe_clusterzMapping.has_moe_cluster  s    $q((r.   c                     | j         dk    S r_   )r   r7   s    r,   
has_moe_tpzMapping.has_moe_tp      !##r.   c                     | j         dk    S r_   )r   r7   s    r,   
has_moe_epzMapping.has_moe_ep  r   r.   
num_layersreturnc                     t          j        t          j        |          | j                  | j                                                 S r0   )torchtensor_splitaranger   rC   tolist)r$   r   s     r,   	pp_layerszMapping.pp_layers  s6    !%,z":":DLIIL

&((	r.   num_expertsc                     | j         dk    sJ || j        z  }t          | j        |z  | j        dz   |z            }t	          |          S r_   )r	   r   r!   rK   r#   )r$   r   experts_per_rankexperts_ranges       r,   
ep_expertszMapping.ep_experts  s_    |q    &$*:://!%55
 
 M"""r.   mappingc                      | di |S )N r   )clsr   s     r,   	from_dictzMapping.from_dict  s    s~~W~~r.   c                     | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        dS )Nr   r   r   r	   r   r   r   r   r   r   r   r   r   r7   s    r,   to_dictzMapping.to_dict  sT    /I!/|||+ $ 5+ - -!/
 
 	
r.   )r   r   r   ).__name__
__module____qualname____doc__r-   r4   r8   propertyr   setterr<   r@   rC   rE   rG   rI   rK   rM   rP   rR   rT   rV   rX   r[   r]   r`   rd   rf   rh   rj   rm   rq   rs   ru   rz   r|   r~   r   r   r   r   r   classmethoddictr   r   r   r.   r,   r   r      s       ] ]B 	Z; !!Z; Z; Z; Z; Z;x
 
 
&
 
 
$   X 
[    [ E E XE W W XW 
 
 X
 J J XJ 4 4 X4 / / X/ J J XJ J J XJ J J XJ 
 
 X
 
 
 X

 
 
 X
 / / X/ . . X.     *# * * * *)3 ) ) ) )4 4 4     0 0 00 0 0! ! !         ) ) )$ $ $$ $ $C DI    #c #d3i # # # #     [
 
 
 
 
r.   r   )typingr   r   objectr   r   r.   r,   <module>r      s`           F
 F
 F
 F
 F
f F
 F
 F
 F
 F
r.   