Ë
    îÿæiê^  ã                   ó@  — d dl Z d dlmZ d dlmZmZmZ d dlmZ	 d dl
mZ d dlmZmZmZ ddlmZ ddlmZ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 e G d„ de«      «       Z G d„ dej@                  «      Z! G d„ dej@                  «      Z" G d„ dej@                  «      Z#e	jH                  d„ «       Z% G d„ dej@                  «      Z& G d„ dej@                  «      Z' G d„ dej@                  «      Z( G d„ dej@                  «      Z) G d„ dej@                  «      Z*y)é    N)Ú	dataclass)ÚAnyÚDictÚOptional)Úshard_inplaceÚshard_linearÚsum_gradientsé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Ú	CacheListÚKVCache)ÚMultiLinear)Úinitialize_rope)Ú	SwitchGLUc                   óÚ  — e Zd ZU dZeed<   dZeed<   dZeed<   dZ	eed<   d	Z
eed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZee   ed<   dZee   ed<   dZeed<   dZeed<   dZeed<   d	Zeed<   dZeed <   dZeed!<   d"Zeed#<   d$Zeed%<   d&Zeed'<   d(Zeed)<   d(Z eed*<   d(Z!eed+<   d(Z"eed,<   d-Z#eed.<   dZ$eed/<   d0Z%eed1<   d2Z&eed3<   dZ'e(ed4<   d5Z)eed6<   y)7Ú	ModelArgsÚdeepseek_v32Ú
model_typei � Ú
vocab_sizei   Úhidden_sizeé€   Úindex_head_dimé@   Úindex_n_headsi   Ú
index_topki +  Úintermediate_sizei  Úmoe_intermediate_sizeé   Únum_hidden_layersé    Únum_attention_headsÚnum_key_value_headsNÚn_shared_expertsÚn_routed_expertsç      ð?Úrouted_scaling_factori   Úkv_lora_ranki   Úq_lora_rankÚqk_rope_head_dimÚ
v_head_dimÚqk_nope_head_dimÚnoaux_tcÚtopk_methodÚsigmoidÚscoring_funcTÚnorm_topk_probr
   Ún_groupÚ
topk_groupÚnum_experts_per_tokÚmoe_layer_freqr   Úfirst_k_dense_replaceÚmax_position_embeddingsç�íµ ÷Æ°>Úrms_norm_epsg     ˆÃ@Ú
rope_thetaÚrope_scalingFÚattention_bias)*Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__r   Úintr   r   r   r   r   r    r"   r$   r%   r&   r   r'   r)   Úfloatr*   r+   r,   r-   r.   r0   r2   r3   Úboolr4   r5   r6   r7   r8   r9   r;   r<   r=   r   r>   © ó    úo/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/deepseek_v32.pyr   r      sW  … à$€J�Ó$Ø€J�ÓØ€K�ÓØ€N�CÓØ€M�3ÓØ€J�ÓØ"Ð�sÓ"Ø!%Ð˜3Ó%ØÐ�sÓØ!Ð˜Ó!Ø!Ð˜Ó!Ø&*Ð�h˜s‘mÓ*Ø&*Ð�h˜s‘mÓ*Ø#&Ð˜5Ó&Ø€L�#ÓØ€K�ÓØÐ�cÓØ€J�ÓØÐ�cÓØ!€K�Ó!Ø!€L�#Ó!Ø€N�DÓØ€GˆSÓØ€J�ÓØ Ð˜Ó Ø€N�CÓØ!"Ð˜3Ó"Ø#'Ð˜SÓ'Ø€L�%ÓØ€J�ÓØ€L�$ÓØ €N�DÔ rH   r   c            
       óˆ   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  deej                     dee   fd„Z	ˆ xZ
S )	ÚIndexerÚargsc                 ó  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        t        j                  | j                  | j
                  | j                  z  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j                   | j                  «      | _        t        j                  | j                  | j
                  d¬«      | _        | j                  dz  | _        t)        |j                  |j*                  d|j,                  |j.                  ¬«      | _        y )NF©Úbiasç      à¿T©ÚdimsÚbaseÚtraditionalr9   Úscaling_config)ÚsuperÚ__init__r   Údimr   Ún_headsr   Úhead_dimr,   Úrope_head_dimr   r+   ÚnnÚLinearÚwq_bÚwkÚ	LayerNormÚk_normÚweights_projÚsoftmax_scaler   r<   r9   r=   Úrope)ÚselfrL   Ú	__class__s     €rI   rW   zIndexer.__init__8   s  ø€ Ü‰ÑÔØ×#Ñ#ˆŒØ×)Ñ)ˆŒØ×+Ñ+ˆŒØ!×2Ñ2ˆÔØŸ/™/ˆŒØ×+Ñ+ˆÔÜ—I‘IØ×Ñ˜dŸl™l¨T¯]©]Ñ:Àô
ˆŒ	ô —)‘)˜DŸH™H d§m¡m¸%Ô@ˆŒÜ—l‘l 4§=¡=Ó1ˆŒÜŸI™I d§h¡h°·±À5ÔIˆÔØ!Ÿ]™]¨DÑ0ˆÔÜ#Ø×&Ñ&Ø—‘ØØ$(×$@Ñ$@Ø×,Ñ,ô
ˆ�	rH   ÚxÚqrÚmaskÚcachec           	      óú  — |j                   \  }}}| j                  |«      }|j                  ||| j                  | j                  «      j                  dd«      }t        j                  || j                  gd¬«      \  }	}
|�|j                  nd}| j                  |	|¬«      }	t        j                  |	|
gd¬«      }| j                  |«      }| j                  |«      }t        j                  ||d|| j                  f«      }t        j                  || j                  gd¬«      \  }}| j                  ||¬«      }t        j                  ||gd¬«      }|�,|j                  |t        j                  |d|dg«      «      \  }}|j                   d   | j                   k  ry ||j                  dd«      z  }t        j"                  |d«      }| j%                  |«      | j                  dz  | j&                  z  z  }|j                  dd«      d	   }||z  }|j)                  dd
¬«      }|�!t        j*                  ||t-        d«       «      }t        j.                  || j                    d¬«      d| j                    d …f   S )Nr
   é   éÿÿÿÿ©Úaxisr   )ÚoffsetéþÿÿÿrP   ©.NT©ro   ÚkeepdimsÚinf©Úkthro   .)Úshaper^   ÚreshaperY   rZ   ÚswapaxesÚmxÚsplitr[   rp   rd   Úconcatenater_   ra   Úupdate_and_fetchÚzerosr   Úmaximumrb   rc   ÚsumÚwhererE   Úargpartition)re   rg   rh   ri   rj   ÚbÚsÚ_ÚqÚq_peÚq_noperp   ÚkÚk_peÚk_nopeÚscoresÚweightss                    rI   Ú__call__zIndexer.__call__O   s0  € ð —'‘'‰ˆˆ1ˆaØ�I‰I�b‹MˆØ�I‰I�a˜˜DŸL™L¨$¯-©-Ó8×AÑAÀ!ÀQÓGˆÜ—x‘x  D×$6Ñ$6Ð#7¸bÔA‰ˆˆfà!&Ð!2�—’¸ˆà�y‰y˜ fˆyÓ-ˆÜ�N‰N˜D &˜>°Ô3ˆà�G‰G�A‹JˆØ�K‰K˜‹NˆÜ�J‰J�q˜1˜a  D§M¡MÐ2Ó3ˆÜ—x‘x  D×$6Ñ$6Ð#7¸bÔA‰ˆˆfØ�y‰y˜ fˆyÓ-ˆÜ�N‰N˜D &˜>°Ô3ˆØÐØ×)Ñ)¨!¬R¯X©X°q¸!¸QÀ°lÓ-CÓD‰DˆAˆqØ�7‰7�1‰:˜Ÿ™Ò(ØØ�Q—Z‘Z  BÓ'Ñ'ˆÜ—‘˜F AÓ&ˆØ×#Ñ# AÓ&¨$¯,©,¸Ñ*<¸t×?QÑ?QÑ*QÑRˆØ×"Ñ" 2 rÓ*¨9Ñ5ˆØ˜'Ñ!ˆØ—‘ ¨T�Ó2ˆØÐÜ—X‘X˜d F¬U°5«\¨MÓ:ˆFÜ�‰˜v¨D¯O©OÐ+;À"ÔEØ�$—/‘/Ð!Ñ#Ð#ñ
ð 	
rH   ©N©r?   r@   rA   r   rW   r{   Úarrayr   r   r�   Ú__classcell__©rf   s   @rI   rK   rK   7   sT   ø„ ð
˜Yõ 
ð8  $ñ&
à�8‰8ð&
ð �H‰Hð&
ð �r—x‘xÑ ð	&
ð
 ˜‰}÷&
rH   rK   c            	       óŠ   ‡ — e Zd Zdefˆ fd„Z	 	 ddej                  deej                     dee   dej                  fd„Z	ˆ xZ
S )	ÚDeepseekV32AttentionÚconfigc                 ó   •— t         ‰| �  «        || _        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        |j                  |j                  z   | _        | j                  dz  | _        t        j                   | j                  | j                  |j"                  ¬«      | _        t        j&                  | j                  d¬«      | _        t        j                   | j                  | j
                  | j                  z  d¬«      | _        t        j                   | j                  | j                  | j                  z   |j"                  ¬«      | _        t        j&                  | j                  d¬«      | _        t1        | j                  | j                  | j
                  «      | _        t1        | j                  | j                  | j
                  «      | _        t        j                   | j
                  | j                  z  | j                  |j"                  ¬«      | _        | j                  j8                  �{| j                  j8                  j;                  dd«      }|rS| j                  j8                  d   }|d	kD  r5d
|z  t=        j>                  |«      z  dz   }| j                  |z  |z  | _        tA        |«      | _!        tE        | j                  | j                  d| j                  | j                  j8                  ¬«      | _#        y )NrP   rN   r:   ©ÚepsFÚmscale_all_dimr   Úfactorr
   gš™™™™™¹?r(   TrQ   )$rV   rW   r—   r   r$   Ú	num_headsr9   r<   r+   r,   r*   r-   r.   Ú
q_head_dimÚscaler\   r]   r>   Úq_a_projÚRMSNormÚq_a_layernormÚq_b_projÚkv_a_proj_with_mqaÚkv_a_layernormr   Úembed_qÚunembed_outÚo_projr=   ÚgetÚmathÚlogrK   Úindexerr   rd   )re   r—   r›   Úscaling_factorr…   rf   s        €rI   rW   zDeepseekV32Attention.__init__y   s´  ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ×3Ñ3ˆŒØ'-×'EÑ'EˆÔ$Ø ×+Ñ+ˆŒØ!×-Ñ-ˆÔØ &× 7Ñ 7ˆÔØ"×/Ñ/ˆÔØ ×+Ñ+ˆŒØ &× 7Ñ 7ˆÔØ ×1Ñ1°F×4KÑ4KÑKˆŒà—_‘_ dÑ*ˆŒ
äŸ	™	Ø×Ñ˜d×.Ñ.°V×5JÑ5Jô
ˆŒô  ŸZ™Z¨×(8Ñ(8¸dÔCˆÔÜŸ	™	Ø×Ñ˜dŸn™n¨t¯©Ñ>ÀUô
ˆŒô #%§)¡)Ø×ÑØ×Ñ × 5Ñ 5Ñ5Ø×&Ñ&ô#
ˆÔô
 !Ÿj™j¨×):Ñ):ÀÔEˆÔÜ"Ø×!Ñ! 4×#4Ñ#4°d·n±nó
ˆŒô 'Ø×Ñ˜tŸ™°·±ó
ˆÔô —i‘iØ�N‰N˜TŸ_™_Ñ,Ø×ÑØ×&Ñ&ô
ˆŒð �;‰;×#Ñ#Ð/Ø!Ÿ[™[×5Ñ5×9Ñ9Ð:JÈAÓNˆNÙØ!%§¡×!9Ñ!9¸(Ñ!C�Ø! AÒ%Ø˜nÑ,¬t¯x©x¸Ó/GÑGÈ#ÑM�AØ!%§¡¨a¡°!Ñ!3�D”Jä˜v“ˆŒÜ#Ø×&Ñ&Ø—‘ØØ$(×$@Ñ$@ØŸ;™;×3Ñ3ô
ˆ�	rH   rg   ri   rj   Úreturnc           	      óŠ  — |j                   \  }}}| j                  | j                  |«      «      }| j                  |«      }|j	                  ||| j
                  | j                  «      j                  dddd«      }t        j                  || j                  gd¬«      \  }	}
| j                  |«      }t        j                  || j                  gd¬«      \  }}|j	                  ||d| j                  «      j                  dddd«      }| j                  |«      }|�|d   j                  nd}| j!                  |
|«      }
| j!                  ||«      }t        j"                  |d¬«      }|�|d   j%                  ||«      \  }}nd gdz  }| j'                  ||||d   ¬«      }|��-|dk(  r§|d d …d d …dd d …d f   }t        j(                  |t        j*                  ||j                   d d |j                   d   fz   «      d¬«      }t        j(                  |t        j*                  ||j                   d d |j                   d   fz   «      d¬«      }d }n�t-        |j                   «      }|j                   d   |d<   t        j.                  |t        j0                  ¬«      }t        j2                  ||t        j4                  d	«      d¬«      }|�||z  }|}|�L|d   �Gt        j6                  |d   j8                  |d   j8                  |d   j:                  f«      |d   _        |
| j<                  z  |j?                  dd
«      z  }|�\t        j@                  ||t        j4                  t        jB                  |jD                  «      jF                  |jD                  «      «      }|dk(  r| jI                  |	«      }	|x}}n$| jI                  |d¬«      }| jK                  |«      }tM        |	|||| j<                  |¬«      }|dk(  r| jK                  |«      }|j                  dddd«      j	                  ||d«      }| jO                  |«      S )Nr   rl   r
   é   rm   rn   )rj   ©ÚdtypeTrq   F)Ú	transpose)rj   rŸ   ri   )(rx   r¢   r    r£   ry   r�   rž   r³   r{   r|   r.   r¤   r*   r,   r¥   rp   rd   Úexpand_dimsr~   r¬   Útake_along_axisÚbroadcast_toÚlistr   Úbool_Úput_along_axisr’   ÚdependsÚkeysÚvaluesrŸ   rz   r‚   Úfinfor²   Úminr¦   r§   r   r¨   )re   rg   ri   rj   ÚBÚLÚDrh   r‡   r‰   rˆ   Úcompressed_kvr‹   Ú	kv_latentrp   Útopk_indicesÚidxrx   Úsparse_maskÚ	pe_scoresrŠ   ÚvÚoutputs                          rI   r�   zDeepseekV32Attention.__call__µ   sÞ  € ð —'‘'‰ˆˆ1ˆaà×Ñ §¡¨aÓ 0Ó1ˆØ�M‰M˜"Óˆà�I‰I�a˜˜DŸN™N¨D¯O©OÓ<×FÑFÀqÈ!ÈQÐPQÓRˆÜ—x‘x  D×$9Ñ$9Ð#:ÀÔD‰ˆ�Ø×/Ñ/°Ó2ˆÜ Ÿh™h }°t×7HÑ7HÐ6IÐPRÔSÑˆ�tØ�|‰|˜A˜q ! T×%:Ñ%:Ó;×EÑEÀaÈÈAÈqÓQˆØ×'Ñ'¨Ó6ˆ	à$)Ð$5��q‘—’¸1ˆØ�y‰y˜˜vÓ&ˆØ�y‰y˜˜vÓ&ˆä—N‘N 9°1Ô5ˆ	àÐØ# A™h×7Ñ7¸	À4ÓH‰OˆI‘tà�F˜Q‘JˆEà—|‘| A r¨4°u¸Q±x�|Ó@ˆØÑ#Ø�AŠvØ"¢1¢a¨ªA¨tÐ#3Ñ4�Ü×.Ñ.ØÜ—O‘O C¨¯©°3°B¨¸9¿?¹?È2Ñ;NÐ:PÑ)PÓQØô�	ô
 ×)Ñ)ØÜ—O‘O C¨¯©°3°B¨¸4¿:¹:Àb¹>Ð:KÑ)KÓLØô�ð
 ‘ä˜\×/Ñ/Ó0�Ø%ŸO™O¨AÑ.��b‘	Ü Ÿh™h u´B·H±HÔ=�Ü ×/Ñ/Ø ¬r¯x©x¸«~ÀBô�ð Ð#Ø"-°Ñ"4�KØ"�ð Ð  q¡Ð!5ÜŸJ™J u¨Q¡x§}¡}°u¸Q±x·}±}ÀeÈAÁhÇoÁoÐ6VÓWˆE�!‰HŒMà˜DŸJ™JÑ&¨$¯-©-¸¸BÓ*?Ñ?ˆ	ØÐÜŸ™ØØÜ—‘œŸ™ )§/¡/Ó2×6Ñ6¸	¿¹ÓHóˆIð �Š6Ø—\‘\ &Ó)ˆFØÐˆA‘à—‘˜Y°%�Ó8ˆAØ× Ñ  Ó+ˆAä-Ø�A�q ¨T¯Z©Z¸iô
ˆð �Š6Ø×%Ñ% fÓ-ˆFà×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"rH   ©NNr‘   r”   s   @rI   r–   r–   x   s]   ø„ ð:
˜yõ :
ð~ $(Ø#ñ	Q#à�8‰8ðQ#ð �r—x‘xÑ ðQ#ð ˜‰}ð	Q#ð
 
�‰÷Q#rH   r–   c                   ó6   ‡ — e Zd Z	 ddededefˆ fd„Zd„ Zˆ xZS )ÚDeepseekV32MLPr—   r   r   c                 óª  •— t         ‰| �  «        || _        |€|j                  n|| _        |€|j                  n|| _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _	        y ©NFrN   )
rV   rW   r—   r   r   r\   r]   Ú	gate_projÚup_projÚ	down_proj)re   r—   r   r   rf   s       €rI   rW   zDeepseekV32MLP.__init__
  sª   ø€ ô 	‰ÑÔØˆŒØ1<Ð1D˜6×-Ò-È+ˆÔà(9Ð(AˆF×$Ò$ÐGXð 	Ôô Ÿ™ 4×#3Ñ#3°T×5KÑ5KÐRWÔXˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPUÔVˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆ�rH   c                 óx   — | j                  t        | j                  |«      | j                  |«      «      «      }|S r�   )rÑ   r   rÏ   rÐ   )re   rg   rÑ   s      rI   r�   zDeepseekV32MLP.__call__  s.   € Ø—N‘N¤6¨$¯.©.¸Ó*;¸T¿\¹\È!»_Ó#MÓNˆ	ØÐrH   rÊ   )r?   r@   rA   r   rD   rW   r�   r“   r”   s   @rI   rÌ   rÌ   	  s,   ø„ àSWñYØðYØ.1ðYØMPõYörH   rÌ   c                 óÎ  — t        j                  | j                  t         j                  «      «      }|}||z   }|dkD  rÃt        j                  |d|df¬«      }t        j
                  |dd¬«      j                  dd¬«      }	||z
  }
t        j                  |	|
dz
  d¬	«      d
d |
…d d …f   }t        j                  |t        j                  |«      t        j                  d«      d¬«      }t        j                  |dd«      }|}
t        j                  | |
dz
  d¬	«      d
d |
…f   }t        j                  ||d¬«      }|dkD  r|r|j                  dd¬«      }||z  }||z  }||fS )Nr
   rm   )ro   rx   rl   rn   Trs   rq   rv   .g        )r{   r1   ÚastypeÚfloat32Ú	unflattenÚtopkr�   rƒ   r¹   Ústop_gradientr’   Úflattenrµ   )ÚgatesÚe_score_correction_biasÚtop_kr4   r5   r)   r3   r�   Úorig_scoresÚgroup_scoresrŠ   Ú	group_idxÚindsÚdenominators                 rI   Úgroup_expert_selectrâ     sU  € ô �Z‰Z˜Ÿ™¤R§Z¡ZÓ0Ó1€FØ€KØÐ-Ñ-€FØ�‚{Ü—‘˜f¨2°g¸r°]ÔCˆÜ—w‘w˜v q¨rÔ2×6Ñ6¸BÈÐ6ÓNˆØ�jÑ ˆÜ—O‘O L°a¸!±eÀ"ÔEÀcÈ2ÈAÈ2ÊqÀjÑQˆ	Ü×"Ñ"Ø”B×$Ñ$ YÓ/´·±¸#³ÀRô
ˆô —‘˜F B¨Ó+ˆà€AÜ�?‰?˜F˜7¨¨A©°BÔ7¸¸R¸a¸R¸Ñ@€DÜ×Ñ ¨T¸Ô;€FØˆq‚y‘^Ø—j‘j b°4�jÓ8ˆØ˜+Ñ%ˆØÐ+Ñ+€Fà�ˆ<ÐrH   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚMoEGater—   c                 óÒ  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        t        j                  | j                  |j                  f«      | _        t        j                  | j                  f«      | _        |j                  dk(  sJ d«       ‚y )Nr/   zUnsupported topk method.)rV   rW   r—   r6   rÜ   r3   r'   r)   r4   r5   r{   r   r   ÚweightrÛ   r0   ©re   r—   rf   s     €rI   rW   zMoEGate.__init__A  s¹   ø€ Ü‰ÑÔØˆŒØ×/Ñ/ˆŒ
Ø$×3Ñ3ˆÔØ &× 7Ñ 7ˆÔØ%+×%AÑ%AˆÔ"Ø—~‘~ˆŒØ ×+Ñ+ˆŒÜ—h‘h × 5Ñ 5°v×7IÑ7IÐJÓKˆŒÜ')§x¡x°×1FÑ1FÐ0HÓ'IˆÔ$Ø×!Ñ! ZÒ/ÐKÐ1KÓKÑ/rH   c           	      óÊ   — t        || j                  j                  z  | j                  | j                  | j
                  | j                  | j                  | j                  «      S r�   )	râ   ræ   ÚTrÛ   rÜ   r4   r5   r)   r3   )re   rg   s     rI   r�   zMoEGate.__call__N  sO   € Ü"Ø�—‘—‘ÑØ×(Ñ(Ø�J‰JØ�L‰LØ�O‰OØ×&Ñ&Ø×Ñó
ð 	
rH   ©r?   r@   rA   r   rW   r�   r“   r”   s   @rI   rä   rä   @  s   ø„ ðL˜yõ Lö	
rH   rä   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚDeepseekV32MoEr—   c                 óN  •— t         ‰| �  «        || _        |j                  | _        t	        |j
                  |j                  |j                  «      | _        t        |«      | _
        |j                  �+|j                  |j                  z  }t        ||¬«      | _        d | _        y )N)r—   r   )rV   rW   r—   r6   r   r   r    r'   Ú
switch_mlprä   Úgater&   rÌ   Úshared_expertsÚsharding_group)re   r—   r   rf   s      €rI   rW   zDeepseekV32MoE.__init__[  s—   ø€ Ü‰ÑÔØˆŒØ#)×#=Ñ#=ˆÔ Ü#Ø×ÑØ×(Ñ(Ø×#Ñ#ó
ˆŒô ˜F“OˆŒ	Ø×"Ñ"Ð.Ø &× <Ñ <¸v×?VÑ?VÑ VÐÜ"0ØÐ1Bô#ˆDÔð #ˆÕrH   c                 óÄ  — | j                   � t        | j                   «      |«      }| j                  |«      \  }}| j                  ||«      }||d   z  j	                  d¬«      j                  |j                  «      }| j                  j                  �|| j                  |«      z   }| j                   �+t        j                  j                  || j                   ¬«      }|S )Nrr   rq   rn   ©Úgroup)rñ   r	   rï   rî   r�   rÔ   r²   r—   r&   rð   r{   ÚdistributedÚall_sum)re   rg   rà   r�   Úys        rI   r�   zDeepseekV32MoE.__call__n  sÇ   € Ø×ÑÐ*Ø2”˜d×1Ñ1Ó2°1Ó5ˆAà—y‘y “|‰ˆˆfØ�O‰O˜A˜tÓ$ˆØ�˜	Ñ"Ñ"×'Ñ'¨RÐ'Ó0×7Ñ7¸¿¹Ó@ˆØ�;‰;×'Ñ'Ð3Ø�D×'Ñ'¨Ó*Ñ*ˆAà×ÑÐ*Ü—‘×&Ñ& q°×0CÑ0CÐ&ÓDˆAàˆrH   rê   r”   s   @rI   rì   rì   Z  s   ø„ ð#˜yõ #ö&rH   rì   c            	       óŽ   ‡ — e Zd Zdedefˆ fd„Z	 	 d	dej                  deej                     dee	   dej                  fd„Z
ˆ xZS )
ÚDeepseekV32DecoderLayerr—   Ú	layer_idxc                 ó’  •— t         ‰| �  «        t        |«      | _        |j                  �,||j
                  k\  r||j                  z  dk(  rt        |«      n
t        |«      | _	        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y )Nr   r™   )rV   rW   r–   Ú	self_attnr'   r8   r7   rì   rÌ   Úmlpr\   r¡   r   r;   Úinput_layernormÚpost_attention_layernorm)re   r—   rú   rf   s      €rI   rW   z DeepseekV32DecoderLayer.__init__  s§   ø€ Ü‰ÑÔÜ-¨fÓ5ˆŒð ×'Ñ'Ð3Ø ×!=Ñ!=Ò=Ø × 5Ñ 5Ñ5¸Ò:ô	 ˜6Ô"ô   Ó'ð 	Œô  "Ÿz™z¨&×*<Ñ*<À&×BUÑBUÔVˆÔÜ(*¯
©
Ø×Ñ F×$7Ñ$7ô)
ˆÕ%rH   rg   ri   rj   r®   c                 óš   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   S r�   )rü   rþ   rý   rÿ   )re   rg   ri   rj   ÚrÚhs         rI   r�   z DeepseekV32DecoderLayer.__call__�  sL   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�1‰uˆrH   rÊ   )r?   r@   rA   r   rD   rW   r{   r’   r   r   r�   r“   r”   s   @rI   rù   rù   ~  s^   ø„ ð
˜yð 
°Sõ 
ð( $(Ø#ñ		à�8‰8ð	ð �r—x‘xÑ ð	ð ˜‰}ð		ð
 
�‰÷	rH   rù   c                   óp   ‡ — e Zd Zdefˆ fd„Zd„ Z	 ddej                  dee	   dej                  fd„Z
ˆ xZS )	ÚDeepseekV32Modelr—   c                 óð  •— t         ‰| �  «        |j                  | _        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}| _
        d| _        t        | j                  «      | _        | j                  | _        t        j                  |j
                  |j                   ¬«      | _        d| _        d| _        y c c}w )Nr   r™   r
   )rV   rW   r   r\   Ú	Embeddingr   Úembed_tokensÚranger"   rù   ÚlayersÚ	start_idxÚlenÚend_idxÚ
num_layersr¡   r;   ÚnormÚpipeline_rankÚpipeline_size)re   r—   rÅ   rf   s      €rI   rW   zDeepseekV32Model.__init__�  sÄ   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒÜŸL™L¨×):Ñ):¸F×<NÑ<NÓOˆÔô ˜V×5Ñ5Ô6ó
á6�ô $ F¨CÕ0Ø6ñ
ˆŒð ˆŒÜ˜4Ÿ;™;Ó'ˆŒØŸ,™,ˆŒä—J‘J˜v×1Ñ1°v×7JÑ7JÔKˆŒ	ØˆÔØˆÕùò
s   Á'C3c                 óV  — |j                  «       | _        |j                  «       | _        t	        | j
                  «      | j                  z  }t	        | j
                  «      || j                  z  z
  }| j                  |k  r|dz  }| j                  | j                  z
  dz
  |z  | _        | j                  |z   | _        | j
                  d | j                   | _        d g| j                  z  | j
                  d | j                   t	        | j
                  «      | j                  z
  | _        y )Nr
   )	Úrankr  Úsizer  r  r	  r
  r  r  )re   rô   Úlayers_per_rankÚextras       rI   ÚpipelinezDeepseekV32Model.pipeline­  sð   € ð #ŸZ™Z›\ˆÔØ"ŸZ™Z›\ˆÔÜ˜dŸk™kÓ*¨d×.@Ñ.@Ñ@ˆÜ�D—K‘KÓ  ?°T×5GÑ5GÑ#GÑGˆØ×Ñ Ò%Ø˜qÑ ˆOØ×,Ñ,¨t×/AÑ/AÑAÀAÑEÈÑXˆŒØ—~‘~¨Ñ7ˆŒØ—k‘k . D§L¡LÐ1ˆŒØ)-¨°·±Ñ(?ˆ�‰Ð$�d—n‘nÐ%Ü˜dŸk™kÓ*¨T¯^©^Ñ;ˆ�rH   rg   rj   r®   c                 óÒ  — | j                  |«      }| j                  }| j                  }|€d g| j                  z  }t	        ||d   r|d   d   nd d¬«      }||dz
  k  r#t
        j                  j                  ||dz   «      }t        | j                  «      D ])  } | j                  | j                  |z      ||||   «      }Œ+ |dk7  r\t
        j                  j                  ||dz
  |z  «      }|d   �1t        j                  |d   d   j                  |«      |d   d   _        |dkD  r/t
        j                  j                  |«      d |j                  d    }| j!                  |«      S )Nr   T)Úreturn_arrayr
   rm   )r  r  r  r  r   r{   rõ   Ú	recv_liker  r	  r
  Úsendrº   r»   Ú
all_gatherrx   r  )re   rg   rj   r  r  r  ri   Úis           rI   r�   zDeepseekV32Model.__call__¼  s[  € ð
 ×Ñ˜aÓ ˆà×*Ñ*ˆØ×*Ñ*ˆàˆ=Ø�F˜TŸ_™_Ñ,ˆEÜ$Ø˜e Ašhˆu�Q‰x˜Š{¨D¸tô
ˆð ˜=¨1Ñ,Ò,Ü—‘×(Ñ(¨¨]¸QÑ->Ó@ˆAä�t—‘Ö'ˆAØ/�—‘˜DŸN™N¨QÑ.Ñ/°°4¸¸q¹ÓB‰Að (ð ˜AÒÜ—‘×#Ñ# A¨¸Ñ(9¸]Ñ'JÓKˆAØ�R‰yÐ$Ü$&§J¡J¨u°R©y¸©|×/@Ñ/@À!Ó$D��b‘	˜!‘Ô!ð ˜1ÒÜ—‘×)Ñ)¨!Ó,¨\¨q¯w©w°q©zÐ:ˆAà�y‰y˜‹|ÐrH   r�   )r?   r@   rA   r   rW   r  r{   r’   r   r   r�   r“   r”   s   @rI   r  r  œ  sF   ø„ ð˜yõ ò <ð$  $ñ"à�8‰8ð"ð ˜‰}ð"ð 
�‰÷	"rH   r  c                   óº   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dee   fd„Z	d„ Z
ddeej                  j                     fd„Zed	„ «       Zed
„ «       Zd„ Zˆ xZS )ÚModelr—   c                 óÔ   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        y rÎ   )rV   rW   rL   r   r  Úmodelr\   r]   r   r   Úlm_headrç   s     €rI   rW   zModel.__init__â  sN   ø€ Ü‰ÑÔØˆŒ	Ø ×+Ñ+ˆŒÜ% fÓ-ˆŒ
Ü—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆ�rH   Úinputsrj   c                 óH   — | j                  ||«      }| j                  |«      S r�   )r   r!  )re   r"  rj   Úouts       rI   r�   zModel.__call__é  s#   € ð
 �j‰j˜ Ó'ˆØ�|‰|˜CÓ Ð rH   c                 ó  — | j                   j                  }i }|j                  «       D ]C  \  }}|j                  d«      }t	        |«      dk\  r|d   dk(  rt        |d   «      |k\  rŒ?|||<   ŒE |}d„ }i }|j                  «       D ];  \  }}d|v r(|}|j                  dd	«      }	||	   }
 ||
|«      }
|
||	<   Œ2||vsŒ7|||<   Œ= |}t        | j                   j                  «      D �]�  }d
|› �}dD ]  \  }}dD ]u  }|› d|› d|› �|v sŒt        | j                   j                  «      D �cg c]  }|j                  |› d|› d|› d|› �«      ‘Œ  }}t        j                  |«      ||› d|› d|› �<   Œw Œ� d
|› d�}|› d�|v sŒ›| j                  j                  |   j                  j                  }|› d�|v }|j                  |› d�«      }| j                   j                   | j                   j"                  z   }|r| j                   j$                  }|j                  |› d�«      }|j                  |› d�«      }|j&                  d   dz  |z  }||j&                  d   z  }t        j(                  |||||¬«      }| j                   j*                  }|j-                  ||d«      }t        j.                  |d d …d | j                   j                   …d d …f   j1                  dd«      «      }	t        j.                  |d d …| j                   j                   d …d d …f   «      }|rXt        j2                  |	¬«      \  }	}}t        j2                  |||¬«      \  }}}|||› d�<   |||› d�<   |||› d�<   |||› d�<   |	||› d�<   |||› d�<   �Œ  |S c c}w )NÚ.r°   r
   r	  rl   c                 ó   — t         j                  }t        j                  | t         j                  ¬«      } d}| j                  \  }}| |z  }| |z  }t        j                  | d|fd|ff«      } | j                  ||z   |z  |||z   |z  |f«      } | |d d …d d d …d f   z  j                  ||z   ||z   «      } | d |…d |…f   j                  |«      S )Nr±   r   r   )r{   Úbfloat16Úfrom_fp8rx   Úpadry   rÔ   )ræ   Ú	scale_invr²   ÚbsÚmÚnÚ
pad_bottomÚpad_sides           rI   ÚdequantzModel.sanitize.<locals>.dequantü  så   € Ü—K‘KˆEÜ—[‘[ ¬r¯{©{Ô;ˆFØˆBØ—<‘<‰DˆAˆqØ˜" ™ˆJØ˜˜b‘yˆHÜ—V‘V˜F a¨ _°q¸(°mÐ$DÓEˆFØ—^‘^Ø�j‘. RÑ'¨¨a°(©l¸rÑ-AÀ2ÐFóˆFð ˜yª¨D²!°TÐ)9Ñ:Ñ:×CÑCØ�J‘  H¡óˆFð ˜"˜1˜"˜b˜q˜b˜&‘>×(Ñ(¨Ó/Ð/rH   Úweight_scale_invÚ
_scale_invÚ zmodel.layers.))Úw1rÏ   )Úw2rÑ   )Úw3rÐ   )ræ   ÚscalesÚbiasesz.mlp.experts.0.z.mlp.experts.z.mlp.switch_mlp.z
.self_attnz.kv_b_proj.weightz.kv_b_proj.scalesz.kv_b_proj.biasesrm   r#   )ÚbitsÚ
group_sizerq   z.embed_q.scalesz.unembed_out.scalesz.embed_q.biasesz.unembed_out.biasesz.embed_q.weightz.unembed_out.weight)rL   r"   Úitemsr|   r  rD   Úreplacer  r'   Úpopr{   Ústackr   r	  rü   r¦   r.   r-   r*   rx   Ú
dequantizer$   ry   Ú
contiguousrz   Úquantize)re   rŽ   Ú	mpt_layerÚnew_weightsrŠ   rÈ   Úpartsr1  r+  r_   ræ   ÚlÚprefixr.  r-  ÚeÚto_joinÚlayerÚ	quantizedrZ   rR   r8  r9  r:  r;  r�   ÚwvÚ	wk_scalesÚ	wk_biasesÚ	wv_scalesÚ	wv_biasess                                  rI   ÚsanitizezModel.sanitizeñ  sú  € à—I‘I×/Ñ/ˆ	ØˆØ—M‘M–O‰DˆAˆqØ—G‘G˜C“LˆEÜ�5‹z˜QŠ 5¨¡8¨xÒ#7¼CÀÀaÁ»MÈYÒ<VØØˆK˜ŠNð	 $ð
 ˆò	0ð" ˆØ—M‘M–O‰DˆAˆqØ! QÑ&Ø�	Ø—Y‘Y˜|¨RÓ0�Ø  ™�Ù  ¨Ó3�Ø"(�˜B’Ø˜+Ò%Ø!"�˜A’ð $ð ˆô �t—y‘y×2Ñ2×3ˆAØ$ Q CÐ(ˆFÛU‘��1Û7�AØ ˜ °°°1°Q°CÐ8¸GÒCô &+¨4¯9©9×+EÑ+EÔ%Fó#á%F ð $ŸK™K¨6¨(°-À¸sÀ!ÀAÀ3ÀaÈÀsÐ(KÕLØ%Fð  ð #ô GIÇhÁhÈwÓFW˜ 6 (Ð*:¸1¸#¸Q¸q¸cÐ BÒCñ 8ð Vð % Q C zÐ2ˆFØ�Ð*Ð+¨wÒ6ØŸ
™
×)Ñ)¨!Ñ,×6Ñ6×>Ñ>�Ø%˜hÐ&7Ð8¸GÐC�	Ø—K‘K 6 (Ð*;Ð <Ó=�ØŸ9™9×5Ñ5¸¿	¹	×8LÑ8LÑL�áØŸ9™9×1Ñ1�DØ$Ÿ[™[¨F¨8Ð3DÐ)EÓF�FØ$Ÿ[™[¨F¨8Ð3DÐ)EÓF�FàŸG™G B™K¨"Ñ,°Ñ5�DØ!%¨¯©°bÑ)9Ñ!9�JÜŸ™Ø˜6 6°Àô�Að !ŸI™I×9Ñ9�	Ø—I‘I˜i¨°2Ó6�Ü—]‘]Ø’aÐ5˜4Ÿ9™9×5Ñ5Ð5²qÐ8Ñ9×BÑBÀ2ÀrÓJó�ô —]‘] 1¢Q¨¯	©	×(BÑ(BÑ(DÂaÐ%GÑ#HÓI�ÙÜ/1¯{©{Ø °*ô0Ñ,�B˜	 9ô 02¯{©{Ø °*ô0Ñ,�B˜	 9ð ;D�G˜v˜h oÐ6Ñ7Ø>G�G˜v˜hÐ&9Ð:Ñ;Ø:C�G˜v˜h oÐ6Ñ7Ø>G�G˜v˜hÐ&9Ð:Ñ;Ø68�˜6˜( /Ð2Ñ3Ø:<�˜6˜(Ð"5Ð6Ó7ð[ 4ð^ ˆùòU#s   Ä)#N
rô   c                 ó<  ‡‡— |xs t         j                  j                  «       }|j                  «       }|j	                  «       }| j
                  j                  D �]¾  }t        |j                  j                  d|¬«      |j                  _	        t        |j                  j                  d|¬«      |j                  _
        |j                  xj                  |z  c_        |j                  j                  }||z  Š‰|z   Šˆˆfd„}|j                  j                  j                  |«       |j                  j                  j                  |«       t        |j                   t"        «      r•t        |j                   j$                  d|¬«      |j                   _        t        |j                   j&                  d|¬«      |j                   _        t        |j                   j(                  d|¬«      |j                   _        �Œ¤|x|j                   _        }t-        |j                   j.                  j$                  d|¬«       t-        |j                   j.                  j&                  d|¬«       t-        |j                   j.                  j(                  d|¬«       t-        |j                   j0                  j$                  d|¬«       t-        |j                   j0                  j&                  d|¬«       t-        |j                   j0                  j(                  d|¬«       �ŒÁ y )Nzall-to-shardedró   zsharded-to-allc                 ó   •— | ‰‰ S r�   rG   )ÚwÚehÚshs    €€rI   Úshard_headsz Model.shard.<locals>.shard_heads\  s   ø€ Ø˜˜B�x�rH   )r{   rõ   Úinitr  r  r   r	  r   rü   r£   r¨   r�   r¦   Úapplyr§   Ú
isinstancerý   rÌ   rÏ   rÑ   rÐ   rñ   r   rð   rî   )	re   rô   ÚNr  rJ  r�   rW  rU  rV  s	          @@rI   ÚshardzModel.shardK  sY  ù€ ØÒ.œŸ™×,Ñ,Ó.ˆØ�J‰J‹LˆØ�z‰z‹|ˆØ—Z‘Z×&Õ&ˆEÜ'3Ø—‘×(Ñ(Ð*:À%ô(ˆE�O‰OÔ$ô &2Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ð �O‰O×%Ò%¨!Ñ+Õ%ØŸ™×1Ñ1ˆIØ˜	Ñ!ˆBØ�i‘ˆBõ ð �O‰O×#Ñ#×)Ñ)¨+Ô6Ø�O‰O×'Ñ'×-Ñ-¨kÔ:ô ˜%Ÿ)™)¤^Ô4Ü&2Ø—I‘I×'Ñ'Ð)9Àô'�—	‘	Ô#ô '3Ø—I‘I×'Ñ'Ð)9Àô'�—	‘	Ô#ô %1Ø—I‘I×%Ñ%Ð'7¸uô%�—	‘	Ö!ð 49Ð8�—	‘	Ô(¨5ÜØ—I‘I×,Ñ,×6Ñ6Ð8HÐPUõô Ø—I‘I×,Ñ,×6Ñ6Ð8HÐPUõô Ø—I‘I×,Ñ,×4Ñ4Ð6FÈeõô Ø—I‘I×(Ñ(×2Ñ2Ð4DÈEõô Ø—I‘I×(Ñ(×2Ñ2Ð4DÈEõô Ø—I‘I×(Ñ(×0Ñ0Ð2BÈ%÷ñe 'rH   c                 ó„   — | j                   j                  | j                   j                  | j                   j                   S r�   )r   r	  r
  r  )re   s    rI   r	  zModel.layers…  s-   € à�z‰z× Ñ  §¡×!5Ñ!5¸¿
¹
×8JÑ8JÐKÐKrH   c                 ó   — d„ }|S )Nc                 ó
   — d| vS )NrÛ   rG   )rŠ   s    rI   Ú	predicatez'Model.cast_predicate.<locals>.predicate‹  s   € Ø,°AÐ5Ð5rH   rG   )re   r`  s     rI   Úcast_predicatezModel.cast_predicate‰  s   € ò	6ð ÐrH   c                 ót   — | j                   D �cg c]  }t        t        «       t        «       «      ‘Œ  c}S c c}w r�   )r	  r   r   )re   r†   s     rI   Ú
make_cachezModel.make_cache�  s)   € Ø9=¿ºÓE¹°A”	œ'›)¤W£YÕ/¸ÑEÐEùÒEs   �#5r�   )r?   r@   rA   r   rW   r{   r’   r   r   r�   rQ  rõ   ÚGroupr\  Úpropertyr	  ra  rc  r“   r”   s   @rI   r  r  á  sˆ   ø„ ðT˜yõ Tð  $ñ!à—‘ð!ð ˜‰}ó!òXñt8˜8 B§N¡N×$8Ñ$8Ñ9ó 8ðt ñLó ðLð ñó ðöFrH   r  )+rª   Údataclassesr   Útypingr   r   r   Úmlx.coreÚcorer{   Úmlx.nnr\   Úmlx.nn.layers.distributedr   r   r	   Úactivationsr   rS   r   r   r   rj   r   r   Úmlar   Ú
rope_utilsr   Úswitch_layersr   r   ÚModulerK   r–   rÌ   Úcompilerâ   rä   rì   rù   r  r  rG   rH   rI   Ú<module>rr     sõ   ðó Ý !ß &Ñ &å Ý ß PÑ På ß TÑ Tß %Ý Ý 'Ý $ð ô !�ó  !ó ð !ôF>
ˆb�i‰iô >
ôBN#˜2Ÿ9™9ô N#ôb�R—Y‘Yô ð( ‡�ñó ðôD
ˆb�i‰iô 
ô4!�R—Y‘Yô !ôH˜bŸi™iô ô<B�r—y‘yô BôJpFˆB�I‰Iõ pFrH   