← Open Source
lucidrains

mixture-of-experts

A Pytorch implementation of Sparsely-Gated Mixture of Experts, for massively increasing the parameter count of language models.

Model DevelopmentArchitecturePython
Open on GitHub
Momentum
+0stars in 24 hours0.0%
875
Stars
71
Forks
+2
This week
1
Contributors
Created 2020-07-13 · Updated 2026-10-13 · #12989 today
Top developers

lucidrains/mixture-of-experts is ranked 12,989 with 875 stars.

Same-category comparison

lucidrains/mixture-of-experts is ranked 12,989 among these 8 peers; sbi-dev/sbi is ranked 12,990.

Same-category comparison
NameRankMetrics
EpistasisLab/pmlb12,973
Language:
Python
Stars:
876
Forks:
144
Description:
PMLB: A large, curated repository of benchmark datasets for evaluating supervised machine learning algorithms.
WooooDyy/AgentGym-RL12,975
Language:
Python
Stars:
876
Forks:
89
Description:
Code and implementations for the paper "AgentGym-RL: Training LLM Agents for Long-Horizon Decision Making through Multi-Turn Reinforcement Learning" by Zhiheng Xi et al.
brownvc/R3GAN12,976
Language:
Python
Stars:
876
Forks:
45
Description:
Code for NeurIPS 2024 paper - The GAN is dead; long live the GAN. A Modern Baseline GAN - by Huang et al.
polarisZhao/PFLD-pytorch12,984
Language:
Python
Stars:
876
Forks:
205
Description:
PFLD pytorch Implementation.
sbi-dev/sbi12,990
Language:
Python
Stars:
875
Forks:
272
Description:
sbi is a Python package for simulation-based inference, designed to meet the needs of both researchers and practitioners. Whether you need fine-grained control or an easy-to-use interface, sbi has you covered.
allenai/XNOR-Net12,995
Language:
Lua
Stars:
874
Forks:
235
Description:
ImageNet classification using binary Convolutional Neural Networks.
jeffreyyihuang/two-stream-action-recognition12,998
Language:
Python
Stars:
874
Forks:
246
Description:
Using two stream architecture to implement a classic action recognition method on UCF101 dataset.
Newbeeer/Poisson_flow13,001
Language:
Python
Stars:
873
Forks:
56
Description:
Code for NeurIPS 2022 Paper, "Poisson Flow Generative Models" (PFGM).
Key parameters and specifications
Key parameters and specifications
ParameterValue
LanguagePython
CategoryModel Development
SubcategoryArchitecture
Stars875
Forks71
Contributors1
Created date2020-07-13
Updated date2026-10-13
Stars in 1 day0
Stars in 7 days2
Rank12,989
Previous rank12,883
Rank change-106
7-day stars rank8,407
Previous 7-day stars rank8,485
7-day stars rank change78
Total stars rank12,378
Previous total stars rank12,355
Total stars rank change-23
CountryUSA
README summary

Sparsely Gated Mixture of Experts - Pytorch A Pytorch implementation of Sparsely Gated Mixture of Experts , for massively increasing the capacity (parameter count) of a language model while keeping the computation constant. It will mostly be a line-by-line transcription of the tensorflow implementation here , with a few enhancements. Update: You should now use ST Mixture of Experts Install Usage The above should suffice for a single machine, but if you want a heirarchical mixture of experts (2 levels), as

used in the GShard paper, please follow the instructions below 1 billion parameters If you want some more sophisticated network for the experts, you can define your own and pass it into the class as Citation

Frequently asked questions

How many stars and forks are recorded?

lucidrains/mixture-of-experts has 875 stars and 71 forks.

What is the repository rank?

lucidrains/mixture-of-experts is ranked 12,989.

What language and category are recorded?

lucidrains/mixture-of-experts has 875 stars, uses Python and belongs to Model Development.

Which repository is closest in rank?

lucidrains/mixture-of-experts is compared with sbi-dev/sbi, ranked 12,990 with 875 stars.

README

Sparsely Gated Mixture of Experts - Pytorch

A Pytorch implementation of Sparsely Gated Mixture of Experts, for massively increasing the capacity (parameter count) of a language model while keeping the computation constant.

It will mostly be a line-by-line transcription of the tensorflow implementation here, with a few enhancements.

Update: You should now use ST Mixture of Experts

Install

$ pip install mixture_of_experts

Usage

import torch
from torch import nn
from mixture_of_experts import MoE

moe = MoE(
    dim = 512,
    num_experts = 16,               # increase the experts (# parameters) of your model without increasing computation
    hidden_dim = 512 * 4,           # size of hidden dimension in each expert, defaults to 4 * dimension
    activation = nn.LeakyReLU,      # use your preferred activation, will default to GELU
    second_policy_train = 'random', # in top_2 gating, policy for whether to use a second-place expert
    second_policy_eval = 'random',  # all (always) | none (never) | threshold (if gate value > the given threshold) | random (if gate value > threshold * random_uniform(0, 1))
    second_threshold_train = 0.2,
    second_threshold_eval = 0.2,
    capacity_factor_train = 1.25,   # experts have fixed capacity per batch. we need some extra capacity in case gating is not perfectly balanced.
    capacity_factor_eval = 2.,      # capacity_factor_* should be set to a value >=1
    loss_coef = 1e-2                # multiplier on the auxiliary expert balancing auxiliary loss
)

inputs = torch.randn(4, 1024, 512)
out, aux_loss = moe(inputs) # (4, 1024, 512), (1,)

The above should suffice for a single machine, but if you want a heirarchical mixture of experts (2 levels), as used in the GShard paper, please follow the instructions below

import torch
from mixture_of_experts import HeirarchicalMoE

moe = HeirarchicalMoE(
    dim = 512,
    num_experts = (4, 4),       # 4 gates on the first layer, then 4 experts on the second, equaling 16 experts
)

inputs = torch.randn(4, 1024, 512)
out, aux_loss = moe(inputs) # (4, 1024, 512), (1,)

1 billion parameters

import torch
from mixture_of_experts import HeirarchicalMoE

moe = HeirarchicalMoE(
    dim = 512,
    num_experts = (22, 22)
).cuda()

inputs = torch.randn(1, 1024, 512).cuda()
out, aux_loss = moe(inputs)

total_params = sum(p.numel() for p in moe.parameters())
print(f'number of parameters - {total_params}')

If you want some more sophisticated network for the experts, you can define your own and pass it into the MoE class as experts

import torch
from torch import nn
from mixture_of_experts import MoE

# a 3 layered MLP as the experts

class Experts(nn.Module):
    def __init__(self, dim, num_experts = 16):
        super().__init__()
        self.w1 = nn.Parameter(torch.randn(num_experts, dim, dim * 4))
        self.w2 = nn.Parameter(torch.randn(num_experts, dim * 4, dim * 4))
        self.w3 = nn.Parameter(torch.randn(num_experts, dim * 4, dim))
        self.act = nn.LeakyReLU(inplace = True)

    def forward(self, x):
        hidden1 = self.act(torch.einsum('end,edh->enh', x, self.w1))
        hidden2 = self.act(torch.einsum('end,edh->enh', hidden1, self.w2))
        out = torch.einsum('end,edh->enh', hidden2, self.w3)
        return out

experts = Experts(512, num_experts = 16)

moe = MoE(
    dim = 512,
    num_experts = 16,
    experts = experts
)

inputs = torch.randn(4, 1024, 512)
out, aux_loss = moe(inputs) # (4, 1024, 512), (1,)

Citation

@misc{shazeer2017outrageously,
    title   = {Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer},
    author  = {Noam Shazeer and Azalia Mirhoseini and Krzysztof Maziarz and Andy Davis and Quoc Le and Geoffrey Hinton and Jeff Dean},
    year    = {2017},
    eprint  = {1701.06538},
    archivePrefix = {arXiv},
    primaryClass = {cs.LG}
}
@misc{lepikhin2020gshard,
    title   = {GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding},
    author  = {Dmitry Lepikhin and HyoukJoong Lee and Yuanzhong Xu and Dehao Chen and Orhan Firat and Yanping Huang and Maxim Krikun and Noam Shazeer and Zhifeng Chen},
    year    = {2020},
    eprint  = {2006.16668},
    archivePrefix = {arXiv},
    primaryClass = {cs.CL}
}
Nearby in the ranking
Similar items