|
from transformers import PretrainedConfig, PreTrainedModel, AutoModelForCausalLM |
|
import torch |
|
import torch.nn as nn |
|
import torch.nn.functional as F |
|
import math |
|
from transformers.modeling_outputs import CausalLMOutputWithPast |
|
|
|
class MeshConfig(PretrainedConfig): |
|
model_type = "mesh" |
|
|
|
def __init__( |
|
self, |
|
vocab_size=32000, |
|
hidden_size=768, |
|
intermediate_size=2048, |
|
num_hidden_layers=12, |
|
num_attention_heads=12, |
|
num_key_value_heads=12, |
|
max_position_embeddings=4096, |
|
initializer_range=0.02, |
|
rms_norm_eps=1e-6, |
|
use_cache=True, |
|
pad_token_id=0, |
|
bos_token_id=1, |
|
eos_token_id=2, |
|
tie_word_embeddings=False, |
|
|
|
mesh_grid_size=(2, 2), |
|
expert_intermediate_size=256, |
|
routing_k=2, |
|
neighbor_exchange_enabled=True, |
|
cross_expert_attention_enabled=True, |
|
**kwargs |
|
): |
|
super().__init__( |
|
vocab_size=vocab_size, |
|
hidden_size=hidden_size, |
|
intermediate_size=intermediate_size, |
|
num_hidden_layers=num_hidden_layers, |
|
num_attention_heads=num_attention_heads, |
|
num_key_value_heads=num_key_value_heads, |
|
max_position_embeddings=max_position_embeddings, |
|
initializer_range=initializer_range, |
|
rms_norm_eps=rms_norm_eps, |
|
use_cache=use_cache, |
|
pad_token_id=pad_token_id, |
|
bos_token_id=bos_token_id, |
|
eos_token_id=eos_token_id, |
|
tie_word_embeddings=tie_word_embeddings, |
|
**kwargs, |
|
) |
|
self.mesh_grid_size = mesh_grid_size |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.expert_intermediate_size = intermediate_size // (mesh_grid_size[0] * mesh_grid_size[1]) |
|
self.routing_k = routing_k |
|
self.neighbor_exchange_enabled = neighbor_exchange_enabled |
|
self.cross_expert_attention_enabled = cross_expert_attention_enabled |
|
|