from pipegoose.nn.expert_parallel import ExpertParallel, ExpertLoss
parallel_context = ParallelContext.from_torch(expert_parallel_size=8)
mlp = CustomExpert()
router = CustomRouter()
noise_policy = CustomNoisePolicy()
loss_func = nn.CrossEntropy()
model = ExpertParallel(
model,
expert=mlp,
router=router,
noise_policy=noise_policy,
enable_tensor_parallelism=True,
parallel_context=parallel_context,
).parallelize()
loss_func = ExpertLoss(loss_func, aux_weight=0.1)
APIs
TODOs
Top-1, Top-2 router
ExpertParallel(turn a 馃transformersto a MoE automatically)Does expert embedding need to multiply its corresponding router probability?
Make
ExpertParallelwork with data parallelismOptionally apply tensor parallelism to an expert layer
Make
ExpertParallelwork in pipeline parallelismMake
ExpertParallelwork with ZeRO-1Loss function (include aux and z loss)
Move inputs to target expert device
Engineering Reading
MoE Reading