Ë
    ÛÓ^jâ2  ã                   ó  — d dl Z d dlmc mZ d dl mZ ddlmZ ddlm	Z	m
Z
 ddlmZ ddl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 ddlmZmZ ddlm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)  G d„ de«      Z* G d„ de«      Z+ G d„ dejX                  «      Z- G d„ de$«      Z. G d„ dejX                  «      Z/ G d„ de «      Z0 G d„ d e#«      Z1e G d!„ d"e!e«      «       Z2e G d#„ d$e&«      «       Z3 G d%„ d&e%«      Z4g d'¢Z5y)(é    N)Únné   )Úinitialization)ÚCacheÚDynamicCache)Úcreate_causal_mask)ÚMoeCausalLMOutputWithPastÚMoeModelOutputWithPast)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstring)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚGraniteRMSNormÚGraniteRotaryEmbedding)ÚLlamaAttentionÚLlamaPreTrainedModel)ÚMixtralDecoderLayerÚMixtralExpertsÚMixtralForCausalLMÚMixtralModelÚload_balancing_loss_funcé   )ÚGraniteMoeConfigc                   ó   — e Zd Zy)ÚGraniteMoeRMSNormN©Ú__name__Ú
__module__Ú__qualname__© ó    ú|/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/granitemoe/modular_granitemoe.pyr   r   )   ó   „ Ør%   r   c                   ó   — e Zd Zy)ÚGraniteMoeRotaryEmbeddingNr    r$   r%   r&   r)   r)   -   r'   r%   r)   c                   ó”   ‡ — e Zd ZdZdefˆ fd„Zdej                  deej                  ej                  ej                  f   fd„Z	ˆ xZ
S )ÚGraniteMoeTopKRoutera¡  Top-k gating that returns the routing decisions without grouping tokens by expert.

    Returns ``(top_k_index, top_k_weights, router_logits)``; the grouping/scattering used to live
    here (via ``expert_size.tolist()``, which broke fullgraph compile) and now happens inside the
    experts forward via ``use_experts_implementation`` so the default ``grouped_mm`` / ``batched_mm``
    paths can compile cleanly.
    Úconfigc                 óê   •— t         ‰| �  «        |j                  | _        |j                  | _        t        j                  t        j                  | j                  |j                  «      «      | _        y ©N)ÚsuperÚ__init__Únum_local_expertsÚnum_expertsÚnum_experts_per_tokÚtop_kr   Ú	ParameterÚtorchÚemptyÚhidden_sizeÚweight©Úselfr,   Ú	__class__s     €r&   r0   zGraniteMoeTopKRouter.__init__:   sP   ø€ Ü‰ÑÔØ!×3Ñ3ˆÔØ×/Ñ/ˆŒ
Ü—l‘l¤5§;¡;¨t×/?Ñ/?À×ASÑASÓ#TÓUˆ�r%   Úhidden_statesÚreturnc                 óô   — t        j                  || j                  «      j                  «       }|j	                  | j
                  d¬«      \  }}t        j                  |d¬«      j                  |«      }|||fS )Néÿÿÿÿ)Údim)	ÚFÚlinearr9   ÚfloatÚtopkr4   r6   ÚsoftmaxÚtype_as)r;   r=   Úrouter_logitsÚtop_k_logitsÚtop_k_indexÚtop_k_weightss         r&   ÚforwardzGraniteMoeTopKRouter.forward@   se   € ÜŸ™ °·±Ó<×BÑBÓDˆØ$1×$6Ñ$6°t·z±zÀrÐ$6Ó$JÑ!ˆ�kÜŸ™ l¸Ô;×CÑCÀMÓRˆØ˜M¨=Ð8Ð8r%   )r!   r"   r#   Ú__doc__r   r0   r6   ÚTensorÚtuplerL   Ú__classcell__©r<   s   @r&   r+   r+   1   sI   ø„ ñðVÐ/õ Vð9 U§\¡\ð 9°e¸E¿L¹LÈ%Ï,É,ÐX]×XdÑXdÐ<dÑ6e÷ 9r%   r+   c                   ó   — e Zd Zy)ÚGraniteMoeExpertsNr    r$   r%   r&   rS   rS   G   r'   r%   rS   c                   ó`   ‡ — e Zd ZdZdefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚGraniteMoeMoEzISparsely-gated mixture-of-experts block: router decides, experts compute.r,   c                 ó„   •— t         ‰| �  «        |j                  | _        t	        |«      | _        t        |«      | _        y r.   )r/   r0   r8   Ú
input_sizer+   ÚrouterrS   Úexpertsr:   s     €r&   r0   zGraniteMoeMoE.__init__N   s3   ø€ Ü‰ÑÔØ ×,Ñ,ˆŒÜ*¨6Ó2ˆŒÜ(¨Ó0ˆ�r%   Úlayer_inputr>   c                 óØ   — |j                  «       \  }}}|j                  d|«      }| j                  |«      \  }}}| j                  |||«      }	|	j	                  ||| j
                  «      S )Nr@   )ÚsizeÚreshaperX   rY   ÚviewrW   )
r;   rZ   ÚbszÚlengthÚemb_sizer=   rJ   rK   Ú_Úlayer_outputs
             r&   rL   zGraniteMoeMoE.forwardT   si   € Ø +× 0Ñ 0Ó 2ÑˆˆV�XØ#×+Ñ+¨B°Ó9ˆØ(,¯©°MÓ(BÑ%ˆ�] AØ—|‘| M°;ÀÓNˆØ× Ñ   f¨d¯o©oÓ>Ð>r%   )
r!   r"   r#   rM   r   r0   r6   rN   rL   rP   rQ   s   @r&   rU   rU   K   s.   ø„ ÙSð1Ð/õ 1ð? 5§<¡<ð ?°E·L±L÷ ?r%   rU   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚGraniteMoeAttentionr,   Ú	layer_idxc                 óJ   •— t         ‰| �  | ||«       |j                  | _        y r.   )r/   r0   Úattention_multiplierÚscaling©r;   r,   rf   r<   s      €r&   r0   zGraniteMoeAttention.__init__]   s!   ø€ Ü‰Ñ˜˜v yÔ1Ø×2Ñ2ˆ�r%   )r!   r"   r#   r   Úintr0   rP   rQ   s   @r&   re   re   \   s   ø„ ð3Ð/ð 3¸C÷ 3ñ 3r%   re   c                   óÌ   ‡ — e Zd Zdedefˆ fd„Z	 	 	 ddej                  dej                  dz  dedz  de	ej                  ej                  f   dz  d	ej                  f
d
„Z
ˆ xZS )ÚGraniteMoeDecoderLayerr,   rf   c                 óH  •— t         ‰| �  ||«       t        ||¬«      | _        t	        |«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _
        | `t	        |«      | _        |j                  | _        y )N)r,   rf   ©Úeps)r/   r0   re   Ú	self_attnrU   Úblock_sparse_moer   r8   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormÚmlpÚresidual_multiplierrj   s      €r&   r0   zGraniteMoeDecoderLayer.__init__c   s„   ø€ Ü‰Ñ˜ Ô+Ü,°FÀiÔPˆŒÜ -¨fÓ 5ˆÔÜ0°×1CÑ1CÈ×I\ÑI\Ô]ˆÔÜ(9¸&×:LÑ:LÐRX×ReÑReÔ(fˆÔ%ØˆHÜ -¨fÓ 5ˆÔØ#)×#=Ñ#=ˆÕ r%   Nr=   Úattention_maskÚpast_key_valuesÚposition_embeddingsr>   c                 óð   — |}| j                  |«      } | j                  d||||dœ|¤Ž\  }}||| j                  z  z   }|}| j                  |«      }| j	                  |«      }||| j                  z  z   }|S )N)r=   rx   ry   rz   r$   )rt   rq   rw   ru   rr   )r;   r=   rx   ry   rz   ÚkwargsÚresidualrb   s           r&   rL   zGraniteMoeDecoderLayer.forwardm   s    € ð !ˆØ×,Ñ,¨]Ó;ˆØ)˜4Ÿ>™>ð 
Ø'Ø)Ø+Ø 3ñ	
ð
 ñ
Ñˆ�qð ! =°4×3KÑ3KÑ#KÑKˆØ ˆØ×5Ñ5°mÓDˆØ×-Ñ-¨mÓ<ˆØ  =°4×3KÑ3KÑ#KÑKˆØÐr%   )NNN)r!   r"   r#   r   rk   r0   r6   rN   r   rO   rL   rP   rQ   s   @r&   rm   rm   b   sƒ   ø„ ð>Ð/ð >¸Cõ >ð /3Ø(,ØHLñà—|‘|ðð Ÿ™ tÑ+ðð  ™ð	ð
 # 5§<¡<°·±Ð#=Ñ>ÀÑEðð 
�‰÷r%   rm   c                   óf   — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
dZ ej                  «       d„ «       Zy)ÚGraniteMoePreTrainedModelr,   ÚmodelTrm   ry   c                 ó¸  — t        j                  | |«       t        |t        «      rmt	        j
                  |j                  d| j                  j                  ¬«       t	        j
                  |j                  d| j                  j                  ¬«       y t        |t        «      r7t	        j
                  |j                  d| j                  j                  ¬«       y y )Ng        )ÚmeanÚstd)r   Ú_init_weightsÚ
isinstancerS   ÚinitÚnormal_Úgate_up_projr,   Úinitializer_rangeÚ	down_projr+   r9   )r;   Úmodules     r&   r„   z'GraniteMoePreTrainedModel._init_weights‘   s‹   € ä×%Ñ% d¨FÔ3Ü�fÔ/Ô0Ü�L‰L˜×,Ñ,°3¸D¿K¹K×<YÑ<YÕZÜ�L‰L˜×)Ñ)°¸¿¹×9VÑ9VÖWÜ˜Ô 4Ô5Ü�L‰L˜Ÿ™¨S°d·k±k×6SÑ6SÖTð 6r%   N)r!   r"   r#   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphr6   Úno_gradr„   r$   r%   r&   r   r   †   sS   … àÓØÐØ&*Ð#Ø1Ð2ÐØ#4Ð"5ÐØÐØ€NØ!Ðà€U‡]�]ƒ_ñUó ñUr%   r   c                   óò   ‡ — e Zd Zdefˆ fd„Zeee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dedz  dej                  dz  d	edz  d
ee   defd„«       «       «       Zˆ xZS )ÚGraniteMoeModelr,   c           	      ó&  •— t         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                  |j                  ¬«      | _        |j                  | _        y c c}w )Nro   )r/   r0   r   Ú
ModuleListÚrangeÚnum_hidden_layersrm   Úlayersr   r8   rs   ÚnormÚembedding_multiplierrj   s      €r&   r0   zGraniteMoeModel.__init__�   sq   ø€ Ü‰Ñ˜Ô Ü—m‘mÜHMÈf×NfÑNfÓHgÖh¸9Ô# F¨IÕ6Òhó
ˆŒô & f×&8Ñ&8¸f×>QÑ>QÔRˆŒ	Ø$*×$?Ñ$?ˆÕ!ùò is   ·BNÚ	input_idsrx   Úposition_idsry   Úinputs_embedsÚ	use_cacher|   r>   c           
      óX  — |d u |d uz  rt        d«      ‚|r|€t        | j                  ¬«      }|€| j                  |«      }|€V|�|j	                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  d«      }t        | j                  ||||¬«      }	|| j                  z  }|}
| j                  |
|«      }| j                  d | j                  j                   D ]  } ||
f||	|||dœ|¤Ž}
Œ | j                  |
«      }
t!        |
|¬«      S )	Nz:You must specify exactly one of input_ids or inputs_embeds)r,   r   r   )Údevice)r,   r    rx   ry   rŸ   )rz   rx   rŸ   ry   r¡   )Úlast_hidden_statery   )Ú
ValueErrorr   r,   Úembed_tokensÚget_seq_lengthr6   ÚarangeÚshaper£   Ú	unsqueezer   r�   Ú
rotary_embr›   rš   rœ   r
   )r;   rž   rx   rŸ   ry   r    r¡   r|   Úpast_seen_tokensÚcausal_maskr=   rz   Údecoder_layers                r&   rL   zGraniteMoeModel.forward¥   s\  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZá˜Ð0Ü*°$·+±+Ô>ˆOàÐ Ø ×-Ñ-¨iÓ8ˆMàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &¨×(AÑ(AÑAˆØ%ˆð #Ÿo™o¨m¸\ÓJÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà$7Ø*Ø)Ø /Ø#ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆä%Ø+Ø+ô
ð 	
r%   )NNNNNN)r!   r"   r#   r   r0   r   r   r   r6   Ú
LongTensorrN   r   ÚFloatTensorÚboolr   r   r
   rL   rP   rQ   s   @r&   r–   r–   ›   sÐ   ø„ ð@Ð/õ @ð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ5
à×#Ñ# dÑ*ð5
ð Ÿ™ tÑ+ð5
ð ×&Ñ&¨Ñ-ð	5
ð
  ™ð5
ð ×(Ñ(¨4Ñ/ð5
ð ˜$‘;ð5
ð Ð+Ñ,ð5
ð 
 ò5
ó ó ó  ô5
r%   r–   c                   ó$  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de
dz  dej                  dz  d	ej                  dz  d
edz  deej                  z  deez  fd„«       «       Zˆ xZS )ÚGraniteMoeForCausalLMr,   c                 óf   •— t         ‰| �  |«       t        |«      | _        |j                  | _        y r.   )r/   r0   r–   r€   Úlogits_scalingr:   s     €r&   r0   zGraniteMoeForCausalLM.__init__á   s*   ø€ Ü‰Ñ˜Ô Ü$ VÓ,ˆŒ
Ø$×3Ñ3ˆÕr%   Nrž   rx   rŸ   ry   r    ÚlabelsÚoutput_router_logitsÚlogits_to_keepr>   c	           	      ó®  — |�|n| j                   j                  } | j                  d|||||dœ|	¤Ž}
|
j                  }t	        |t
        «      rt        | d«      n|}| j                  |dd…|dd…f   «      }|| j                   j                  z  }d}|�* | j                  ||fd| j                   j                  i|	¤Ž}d}|rYt        |
j                  | j                  | j                  |«      }|�+|| j                  |j!                  |j"                  «      z  z  }t%        ||||
j&                  |
j(                  |
j*                  |
j                  ¬«      S )al  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> from transformers import AutoTokenizer, GraniteMoeForCausalLM

        >>> model = GraniteMoeForCausalLM.from_pretrained("ibm/PowerMoE-3b")
        >>> tokenizer = AutoTokenizer.from_pretrained("ibm/PowerMoE-3b")

        >>> prompt = "Hey, are you conscious? Can you talk to me?"
        >>> inputs = tokenizer(prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
        ```N)rž   rx   rŸ   ry   r    Ú
vocab_size)ÚlossÚaux_lossÚlogitsry   r=   Ú
attentionsrH   r$   )r,   r·   r€   r¤   r…   rk   ÚsliceÚlm_headrµ   Úloss_functionrº   r   rH   r2   r3   Úrouter_aux_loss_coefÚtor£   r	   ry   r=   r¾   )r;   rž   rx   rŸ   ry   r    r¶   r·   r¸   r|   Úoutputsr=   Úslice_indicesr½   r»   r¼   s                   r&   rL   zGraniteMoeForCausalLM.forwardæ   s|  € ðJ %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð �$—*‘*ð 
ØØ)Ø%Ø+Ø'ñ
ð ñ
ˆð  ×1Ñ1ˆÜ8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆØ˜$Ÿ+™+×4Ñ4Ñ4ˆàˆØÐà%�4×%Ñ%ØØñð  Ÿ;™;×1Ñ1ðð ñ	ˆDð ˆÙÜ/Ø×%Ñ%Ø× Ñ Ø×(Ñ(Øó	ˆHð Ð!Ø˜×1Ñ1°H·K±KÀÇÁÓ4LÑLÑL�Ü(ØØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø!×/Ñ/ô
ð 	
r%   )NNNNNNNr   )r!   r"   r#   r   r0   r   r   r6   r¯   rN   r   r°   r±   rk   rO   r	   rL   rP   rQ   s   @r&   r³   r³   à   sõ   ø„ ð4Ð/õ 4ð
 Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø,0Ø-.ñQ
à×#Ñ# dÑ*ðQ
ð Ÿ™ tÑ+ðQ
ð ×&Ñ&¨Ñ-ð	Q
ð
  ™ðQ
ð ×(Ñ(¨4Ñ/ðQ
ð × Ñ  4Ñ'ðQ
ð # T™kðQ
ð ˜eŸl™lÑ*ðQ
ð 
Ð*Ñ	*òQ
ó ó ôQ
r%   r³   )r³   r–   r   )6r6   Útorch.nn.functionalr   Ú
functionalrB   Ú r   r†   Úcache_utilsr   r   Úmasking_utilsr   Úmodeling_outputsr	   r
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   Úutils.genericr   r   Úutils.output_capturingr   Úgranite.modeling_graniter   r   Úllama.modeling_llamar   r   Úmixtral.modeling_mixtralr   r   r   r   r   Úconfiguration_granitemoer   r   r)   ÚModuler+   rS   rU   re   rm   r   r–   r³   Ú__all__r$   r%   r&   ú<module>r×      sú   ðó  ß Ð Ý å &ß .Ý /ß QÝ -Ý &ß 7ß IÝ 5ß Mß G÷õ õ 7ô	˜ô 	ô	Ð 6ô 	ô9˜2Ÿ9™9ô 9ô,	˜ô 	ô?�B—I‘Iô ?ô"3˜.ô 3ô!Ð0ô !ðH ôUÐ 4°oó Uó ðUð( ôA
�ló A
ó ðA
ôHY
Ð.ô Y
òx T�r%   