Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
182ea3a
Add LingBot-Video (Dense-1.3B) support with attention-only LoRA SFT
NancyFyong Jul 25, 2026
67bcd02
Add docs, prompt rewriting, LoRA validation, and low-VRAM example for…
NancyFyong Jul 26, 2026
55c8357
Add LingBot-Video MoE-30B-A3B support
NancyFyong Jul 27, 2026
df7ea8e
Address PR #1539 review: unify scheduler, restore VAE, split rewriter
NancyFyong Jul 27, 2026
5fbf50a
Fix low-VRAM fp32/bf16 dtype mismatch in LingBot-Video DiT
NancyFyong Jul 27, 2026
a9e7cc2
Fold normalize_caption into lingbot_video pipeline module
NancyFyong Jul 27, 2026
c62ea4f
Add normalize_caption to lingbot_video and fix importers
NancyFyong Jul 27, 2026
e83d7d6
Trim verbose comments in LingBot-Video code
NancyFyong Jul 27, 2026
038bad0
Merge lingbot_sft into lingbot_moe: apply PR #1539 review fixes to th…
NancyFyong Jul 27, 2026
3333443
Fix dtype mismatch feeding the fp32-pinned time_embedder
NancyFyong Jul 27, 2026
4ecc892
Add t2v_example_4 structured caption
NancyFyong Jul 27, 2026
0a107bb
Merge lingbot_sft into lingbot_moe (dtype fix + sample 4 prompt)
NancyFyong Jul 27, 2026
ea73e8b
Add TI2V (image-to-video) support to LingBot-Video pipeline
NancyFyong Jul 27, 2026
670ec22
Add text-to-image (t2i) support and example to LingBot-Video
NancyFyong Jul 27, 2026
8d8b7c7
Add ti2v/t2i low-VRAM inference + ti2v LoRA training examples
NancyFyong Jul 28, 2026
b2492dd
update vae&inner_func
mi804 Jul 27, 2026
a10c026
tmp commit for code refactor
mi804 Jul 27, 2026
94e8baa
low vram patch&refactor scripts
mi804 Jul 28, 2026
7caae83
remove fp32 cast to keep compatibility with low-vram-inference
mi804 Jul 28, 2026
5f604e2
add support for full train
mi804 Jul 28, 2026
cae44a0
style refactor
mi804 Jul 28, 2026
531ba56
pop changes for ti2v pipeline
mi804 Jul 28, 2026
4c9ee93
Align TI2V / T2I examples, LoRA + full training, docs and README with…
NancyFyong Jul 28, 2026
5fa49f5
fix: manage Qwen3-VL vision tower in LingBotVideoTextEncoder VRAM map
NancyFyong Jul 28, 2026
56334bf
style: group input_image under image-to-video in pipeline __call__
NancyFyong Jul 28, 2026
7d0852e
refactor: move TI2V helpers into the units that use them
NancyFyong Jul 28, 2026
91fcb94
Merge lingbot_sft into lingbot_moe: integrate TI2V/T2I + full trainin…
NancyFyong Jul 28, 2026
5bc41d2
style: strip comments and align MoE-30B-A3B integration with repo con…
NancyFyong Jul 29, 2026
eed0d72
style: align MoE examples with the Dense inference examples
NancyFyong Jul 29, 2026
b4aec8c
feat: add TI2V / T2I MoE-30B-A3B examples and load captions from the …
NancyFyong Jul 29, 2026
9476867
fix: restore every DiT parameter under low-VRAM offload for the MoE map
NancyFyong Jul 29, 2026
ce0e732
Merge upstream main (LingBot-Video Dense-1.3B, #1539) into the MoE br…
NancyFyong Jul 30, 2026
823fae0
fix: point the MoE examples at the published Dense example-dataset di…
NancyFyong Jul 30, 2026
7bd0ad8
refactor: drop the resolve_bulk_dtype helper from the MoE DiT
NancyFyong Jul 30, 2026
44c506b
fix: cast the MoE router and expert weights inside the model under of…
NancyFyong Jul 30, 2026
c2e4975
feat: add LoRA and full-parameter training examples for MoE-30B-A3B
NancyFyong Jul 30, 2026
3cfbbf1
style: align the MoE accelerate config with the 14B training config
NancyFyong Jul 30, 2026
6e5dcff
Merge branch 'main' into lingbot_moe
mi804 Aug 4, 2026
942a3a1
refactor dataset dir
mi804 Aug 4, 2026
3fed018
update docs
mi804 Aug 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ We believe that a well-developed open-source code framework can lower the thresh

- **August 3, 2026** MiniMax-H3 open-sourced, welcome a new member to the video model family! Support includes text-to-video-audio generation, keyframe-guided generation, reference-driven generation, low VRAM inference, and NF4-quantized inference. For details, please refer to the [documentation](/docs/en/Model_Details/MiniMax-H3.md) and [example code](/examples/minimax_h3/).

- **July 28, 2026** LingBot-Video open-sourced, welcome a new member to the video model family! Support includes text-to-video, image-to-video and text-to-image generation, low VRAM inference, and LoRA / full training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/LingBot-Video.md) and [example code](/examples/lingbot_video/). Huge thanks to [NancyFyong](https://github.com/NancyFyong) for contributing the integration of this model!
- **July 28, 2026** LingBot-Video open-sourced, welcome a new member to the video model family! This release includes two variants, Dense-1.3B and MoE-30B-A3B (30B total parameters, ~3B active per token), both supporting text-to-video, image-to-video and text-to-image generation, low VRAM inference, and LoRA / full training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/LingBot-Video.md) and [example code](/examples/lingbot_video/). Huge thanks to [NancyFyong](https://github.com/NancyFyong) for contributing the integration of this model!

- **July 21, 2026** We have open-sourced [DiffSynth-Studio Model Integration Skills](https://www.modelscope.cn/collections/DiffSynth-Studio/DiffSynth-Studio-Model-Integration-Skills). This is a composable collection of Agent Skills that automates the entire workflow of integrating external diffusion models into DiffSynth-Studio, significantly improving the standardization and efficiency of model integration. Get started with the [example](https://www.modelscope.cn/skills/DiffSynth-Studio/diffsynth-integrator/file/view/master/example.md?status=1)!

Expand Down Expand Up @@ -1520,6 +1520,9 @@ Example code for LingBot-Video is available at: [/examples/lingbot_video/](/exam
|[Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py)|
|[Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py)|
|[Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py)|-|-|-|-|
|[Robbyant/lingbot-video-moe-30b-a3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_t2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_t2v.py)|
|[Robbyant/lingbot-video-moe-30b-a3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_ti2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_ti2v.py)|
|[Robbyant/lingbot-video-moe-30b-a3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2i.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2i.py)|-|-|-|-|

</details>

Expand Down
5 changes: 4 additions & 1 deletion README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ DiffSynth 目前包括两个开源项目:

- **2026年8月3日** MiniMax-H3 开源,欢迎加入视频生成模型家族!支持文生音视频、首尾帧引导生成、参考驱动生成、低显存推理以及 NF4 量化推理。详情请参考[文档](/docs/zh/Model_Details/MiniMax-H3.md)和[示例代码](/examples/minimax_h3/)。

- **2026年7月28日** LingBot-Video 开源,欢迎加入视频生成模型家族!支持文生视频、图生视频、文生图推理、低显存推理以及 LoRA / 全量训练能力。详情请参考[文档](/docs/zh/Model_Details/LingBot-Video.md)和[示例代码](/examples/lingbot_video/)。特别感谢 [NancyFyong](https://github.com/NancyFyong) 贡献了本模型的接入代码!
- **2026年7月28日** LingBot-Video 开源,欢迎加入视频生成模型家族!本次开源包含 Dense-1.3B 和 MoE-30B-A3B 两个版本(MoE 版总参数量 30B、每个 token 激活约 3B),均支持文生视频、图生视频、文生图推理、低显存推理以及 LoRA / 全量训练能力。详情请参考[文档](/docs/zh/Model_Details/LingBot-Video.md)和[示例代码](/examples/lingbot_video/)。特别感谢 [NancyFyong](https://github.com/NancyFyong) 贡献了本模型的接入代码!

- **2026年7月21日** 我们开源了 [DiffSynth-Studio Model Integration Skills](https://www.modelscope.cn/collections/DiffSynth-Studio/DiffSynth-Studio-Model-Integration-Skills)。这是一套可组合的 Agent Skill 合集,将外部扩散模型接入 DiffSynth-Studio 的全流程自动化,大幅提升模型接入标准化程度与效率。从[使用示例](https://www.modelscope.cn/skills/DiffSynth-Studio/diffsynth-integrator/file/view/master/example.md?status=1)开始体验吧!

Expand Down Expand Up @@ -1520,6 +1520,9 @@ LingBot-Video 的示例代码位于:[/examples/lingbot_video/](/examples/lingb
|[Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py)|
|[Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py)|
|[Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py)|-|-|-|-|
|[Robbyant/lingbot-video-moe-30b-a3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_t2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_t2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_t2v.py)|
|[Robbyant/lingbot-video-moe-30b-a3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v.py)|[code](/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_ti2v.py)|[code](/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_ti2v.py)|
|[Robbyant/lingbot-video-moe-30b-a3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2i.py)|[code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2i.py)|-|-|-|-|

</details>

Expand Down
8 changes: 8 additions & 0 deletions diffsynth/configs/model_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -1354,6 +1354,14 @@
"model_class": "diffsynth.models.lingbot_video_dit.LingBotVideoDiT",
"state_dict_converter": "diffsynth.utils.state_dict_converters.lingbot_video_dit.LingBotVideoDiTStateDictConverter",
},
{
# Example: ModelConfig(model_id="Robbyant/lingbot-video-moe-30b-a3b", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors")
"model_hash": "65b83aa625cd362ff5ff3409fb367a6f",
"model_name": "lingbot_video_dit",
"model_class": "diffsynth.models.lingbot_video_dit.LingBotVideoDiT",
"state_dict_converter": "diffsynth.utils.state_dict_converters.lingbot_video_dit.LingBotVideoDiTStateDictConverter",
"extra_kwargs": {'depth': 48, 'axes_lens': (4096, 512, 512), 'num_experts': 128, 'moe_intermediate_size': 768, 'n_group': 4, 'topk_group': 2, 'n_shared_experts': 1, 'routed_scaling_factor': 2.5},
},
]

minimax_h3_series = [
Expand Down
4 changes: 3 additions & 1 deletion diffsynth/configs/vram_management_module_maps.py
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,9 @@
"transformers.models.qwen3_vl.modeling_qwen3_vl.Qwen3VLVisionRotaryEmbedding": "diffsynth.core.vram.layers.AutoWrappedModule",
},
"diffsynth.models.lingbot_video_dit.LingBotVideoDiT": {
"diffsynth.models.lingbot_video_dit.LingBotVideoBlock": "diffsynth.core.vram.layers.AutoWrappedModule",
"diffsynth.models.lingbot_video_dit.LingBotVideoBlock": "diffsynth.core.vram.layers.AutoWrappedNonRecurseModule",
"diffsynth.models.lingbot_video_dit.LingBotVideoRouter": "diffsynth.core.vram.layers.AutoWrappedNonRecurseModule",
"diffsynth.models.lingbot_video_dit.LingBotVideoGroupedExperts": "diffsynth.core.vram.layers.AutoWrappedNonRecurseModule",
"diffsynth.models.lingbot_video_dit.LingBotVideoRMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
"torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
},
Expand Down
25 changes: 12 additions & 13 deletions diffsynth/models/lingbot_video_dit.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ def __init__(self, hidden_size, num_experts, top_k, score_func, norm_topk_prob,
self.topk_group = topk_group
self.route_scale = route_scale
self.weight = nn.Parameter(torch.empty(num_experts, hidden_size))
self.register_buffer("e_score_correction_bias", torch.zeros(num_experts), persistent=True)
self.e_score_correction_bias = nn.Parameter(torch.zeros(num_experts), requires_grad=False)

def _group_limited_topk(self, scores_for_choice):
seq_len = scores_for_choice.shape[0]
Expand All @@ -228,12 +228,12 @@ def _group_limited_topk(self, scores_for_choice):

def forward(self, tokens: torch.Tensor):
with torch.amp.autocast(tokens.device.type, enabled=False):
logits = F.linear(tokens.float(), self.weight.float())
logits = F.linear(tokens.float(), self.weight.to(device=tokens.device, dtype=torch.float32))
if self.score_func == "softmax":
scores = F.softmax(logits, dim=-1)
else:
scores = logits.sigmoid()
scores_for_choice = scores + self.e_score_correction_bias.unsqueeze(0)
scores_for_choice = scores + self.e_score_correction_bias.to(device=scores.device, dtype=scores.dtype).unsqueeze(0)
if self.n_group is not None and self.n_group > 1:
top_indices = self._group_limited_topk(scores_for_choice)
else:
Expand Down Expand Up @@ -329,13 +329,14 @@ def _unpad_grouped_tokens(output, input_shape, permuted_indices):
return unpermuted[:-1]

def _run_grouped_experts(self, tokens, counts):
if not hasattr(torch, "_grouped_mm"):
if not hasattr(torch, "_grouped_mm") or tokens.device.type != "cuda":
return self._run_experts_for_loop(tokens, counts)
input_shape, padded_tokens, permuted_indices, aligned_counts = self._pad_grouped_tokens(tokens, counts)
offsets = torch.cumsum(aligned_counts, dim=0, dtype=torch.int32)
h = F.silu(torch._grouped_mm(padded_tokens.bfloat16(), self.experts.w1.bfloat16().transpose(-2, -1), offs=offsets))
h = h * torch._grouped_mm(padded_tokens.bfloat16(), self.experts.w3.bfloat16().transpose(-2, -1), offs=offsets)
out = torch._grouped_mm(h, self.experts.w2.bfloat16().transpose(-2, -1), offs=offsets).type_as(padded_tokens)
w1, w2, w3 = (w.to(device=tokens.device, dtype=torch.bfloat16) for w in (self.experts.w1, self.experts.w2, self.experts.w3))
h = F.silu(torch._grouped_mm(padded_tokens.bfloat16(), w1.transpose(-2, -1), offs=offsets))
h = h * torch._grouped_mm(padded_tokens.bfloat16(), w3.transpose(-2, -1), offs=offsets)
out = torch._grouped_mm(h, w2.transpose(-2, -1), offs=offsets).type_as(padded_tokens)
return self._unpad_grouped_tokens(out, input_shape, permuted_indices)

def _run_experts_for_loop(self, tokens, counts):
Expand All @@ -345,9 +346,9 @@ def _run_experts_for_loop(self, tokens, counts):
for expert_idx, expert_tokens in enumerate(splits):
if expert_tokens.numel() == 0:
continue
h = F.silu(expert_tokens @ self.experts.w1[expert_idx].transpose(-2, -1))
h = h * (expert_tokens @ self.experts.w3[expert_idx].transpose(-2, -1))
h = h @ self.experts.w2[expert_idx].transpose(-2, -1)
h = F.silu(expert_tokens @ self.experts.w1[expert_idx].to(device=expert_tokens.device, dtype=expert_tokens.dtype).transpose(-2, -1))
h = h * (expert_tokens @ self.experts.w3[expert_idx].to(device=expert_tokens.device, dtype=expert_tokens.dtype).transpose(-2, -1))
h = h @ self.experts.w2[expert_idx].to(device=expert_tokens.device, dtype=expert_tokens.dtype).transpose(-2, -1)
outputs.append(h)
if not outputs:
return tokens.new_zeros(tokens.shape)
Expand Down Expand Up @@ -420,7 +421,7 @@ def forward(self, x, temb6, rotary_emb, attention_mask=None, moe_padding_mask=No
"LingBotVideoBlock expects token-level temb6 with shape (B*S, 6D); "
f"got {tuple(temb6.shape)} for hidden states {tuple(x.shape)}."
)
mod = temb6.view(x.shape[0], x.shape[1], -1) + self.scale_shift_table.unsqueeze(0)
mod = temb6.view(x.shape[0], x.shape[1], -1) + self.scale_shift_table.to(dtype=temb6.dtype, device=temb6.device).unsqueeze(0)
shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = mod.chunk(6, dim=-1)
gate_msa, gate_mlp = gate_msa.tanh(), gate_mlp.tanh()
scale_msa, scale_mlp = 1.0 + scale_msa, 1.0 + scale_mlp
Expand All @@ -446,8 +447,6 @@ class LingBotVideoDiT(nn.Module):
(`num_experts>0`, FFN = sparse MoE) variants from a single class.
"""

_supports_gradient_checkpointing = True
_no_split_modules = ["LingBotVideoBlock"]
_repeated_blocks = ["LingBotVideoBlock"]

def __init__(
Expand Down
Loading