Files
2026-07-13 13:24:13 +08:00

33 lines
1.0 KiB
Python

import math
import torch
import torch.nn as nn
import torch.nn.functional as F
from fairseq.model_parallel.megatron.mpu import (
ColumnParallelLinear,
RowParallelLinear,
)
from .kernel.swiglu import swiglu
from .model_parallel_init import init_method
class FeedForwardNetwork(nn.Module):
def __init__(
self,
embed_dim,
ffn_dim,
load_checkpoint=False,
):
super().__init__()
self.embed_dim = embed_dim
self.fc1 = ColumnParallelLinear(self.embed_dim, ffn_dim, bias=False, gather_output=False, init_method=init_method)
self.gate = ColumnParallelLinear(self.embed_dim, ffn_dim, bias=False, gather_output=False, init_method=init_method)
self.fc2 = RowParallelLinear(ffn_dim, self.embed_dim, bias=False, input_is_parallel=True, init_method=init_method)
def forward(self, x):
x_shape = x.shape
x = x.reshape(-1, x.size(-1))
x = self.fc2(swiglu(self.fc1(x), self.gate(x)))
output = x.view(x_shape)
return output