【免费下载链接】lingbot-world-v2
Infinite Worlds with Versatile Interactions
LingBot-World 2.0(又名 LingBot-World-Infinity)是 Robbyant 团队开源的 14B 参数交互式世界模型,支持"图生视频 + 相机轨迹 + 文本事件"的无限流式生成,可在 8 张 GPU 上以 720p/60fps 级别的速度实时驱动视频流。本文将带你从零跑通LingBot-World 2.0 八卡多 GPU 推理:用torchrun拉起 8 个进程、用FSDP 分片解决显存放不下、用Ulysses 序列并行解决视频序列太长,全程只需几条命令。
为什么 14B 视频生成需要 8 张 GPU?
理解推理配置前,先看清模型"吃"多少资源 🧮
| 组件 | 规模 | 显存压力来源 |
|---|---|---|
| DiT(causal-fast 蒸馏模型) | 14B 参数、40 层、40 个注意力头 | 参数本身 + 长视频序列的激活 |
| T5 文本编码器(umt5-xxl) | 约 11B 参数 | 编码 512 长度的提示词嵌入 |
| VAE 解码器 | — | 361 帧潜变量的像素重建 |
视频生成的特殊性在于序列极长:361 帧按 chunk 流式推进时,注意力 KV cache 会持续增长。项目用两套互补的并行手段应对(定义见 wan/configs/wan_i2v_A14B.py):
- FSDP(Fully Sharded Data Parallel):把 DiT 和 T5 的权重切分到 8 张卡上,每卡只持有 1/8 参数 → 解决"显存放不下";
- Ulysses 序列并行:把注意力序列维度切到 8 张卡,每卡只算 40 ÷ 8 = 5 个头的注意力,卡间用 All-to-All 交换 → 解决"单卡算太慢、KV cache 太大"。
第一步:一键安装 LingBot-World 2.0 环境依赖
项目基于 Wan2.2 构建,环境要求以 requirements.txt 为准(torch>=2.4.0、flash_attn等)。安装只需三步:
git clone https://gitcode.com/gh_mirrors/li/lingbot-world-v2 cd lingbot-world-v2 pip install -r requirements.txt pip install flash-attn --no-build-isolation⚠️
flash-attn必须加--no-build-isolation安装,否则可能构建失败。
第二步:下载 14B causal-fast 模型
当前已开放的是causal-fast 蒸馏模型(每个 chunk 仅 4 步采样、无需 CFG),官方同时提供 HuggingFace 与 ModelScope 双渠道下载:
# 方式一:huggingface-cli huggingface-cli download robbyant/lingbot-world-v2-14b-causal-fast --local-dir ./lingbot-world-v2-14b-causal-fast # 方式二:modelscope-cli(国内网络更友好) modelscope download robbyant/lingbot-world-v2-14b-causal-fast --local_dir ./lingbot-world-v2-14b-causal-fast下载完成后用--ckpt_dir指向该目录即可。
第三步:torchrun + FSDP + Ulysses 三支柱如何协作 🏗️
torchrun:每 GPU 一个进程
torchrun --nproc_per_node=8 generate.py ...会在同一节点启动 8 个 Python 进程,每进程独占一张卡,并自动注入RANK / LOCAL_RANK / WORLD_SIZE环境变量。入口脚本 generate.py 读取这些变量后执行torch.cuda.set_device(local_rank),再以 NCCL 后端初始化通信组。
FSDP:把 14B 参数切成 8 份
命令中的--dit_fsdp与--t5_fsdp分别对 DiT 和 T5 启用分片。核心实现在 wan/distributed/fsdp.py:
- 采用
SHARD_GRAD_OP策略,以每个 Transformer block 为单元做自动包装(auto wrap),前向时按需 all-gather 完整权重; - 混合精度:参数
bf16存储、fp32通信,兼顾速度与精度。
如果显存仍紧张,可加--t5_cpu把 T5 编码器放到 CPU(只编码一次,开销可接受)。
Ulysses:序列并行的"头部轮转"
--ulysses_size 8开启 Ulysses 注意力(实现见 wan/distributed/ulysses.py 与 wan/distributed/sequence_parallel.py):
- 每张卡先持有完整序列、但只负责5/40 的注意力头;
- 通过 All-to-All(wan/distributed/util.py)把 Q/K/V 在"序列维"与"头维"之间互换;
- 每卡对完整序列算自己负责的 5 个头,再换回来。
这样每卡的 KV cache 只需存 5 个头的份额(见 wan/image2video.py 中local_num_heads = num_heads // sp_size),长视频推理显存和耗时同步下降。
⚙️ 两条硬约束(在 generate.py 中会直接 assert):
ulysses_size必须等于world_size(即进程数),且必须能整除注意力头数 40(可用 1/2/4/5/8)。
第四步:一条命令跑通八卡推理
仓库已提供 run_fast.sh 脚本,只需传模型目录与帧数:
bash run_fast.sh lingbot-world-v2-14b-causal-fast 361等价的完整命令(即官方推荐配置):
torchrun --nproc_per_node=8 generate.py \ --task i2v-A14B --size 480*832 \ --ckpt_dir lingbot-world-v2-14b-causal-fast \ --image examples/03/image.jpg --action_path examples/03 \ --dit_fsdp --t5_fsdp --ulysses_size 8 \ --frame_num 361 --local_attn_size 18 --sink_size 6 \ --prompt "A serene lakeside scene with a lone tree standing in calm water..."输入由三部分组成:首帧图片(如examples/03/image.jpg)、相机轨迹poses.npy / intrinsics.npy(wan/utils/cam_utils.py 会将其转换为 Plücker 嵌入条件)以及提示词,完整示例见 examples/ 各目录。
生成的视频由 rank 0 进程保存到output/目录,文件名自动包含模式、分辨率、提示词摘要与时间戳。
核心推理参数速查表
| 参数 | 默认值 | 说明 |
|---|---|---|
--task | i2v-A14B | 当前唯一任务:图生视频 |
--size | 1280*720 | 支持480*832 / 832*480 / 720*1280 / 1280*720 |
--frame_num | 配置默认 | 帧数,须满足 4n+1(如 81、361) |
--ulysses_size | 1 | Ulysses 并行度,多卡下须等于进程数 |
--dit_fsdp/--t5_fsdp | 关 | 对 DiT / T5 启用 FSDP 分片 |
--local_attn_size | -1 | KV cache 滑动窗口大小(示例用 18),支撑无限时长流式生成 |
--sink_size | 0 | 窗口外保留的"锚点"帧数(示例用 6) |
--offload_model | 多卡时关 | 前向后将模型卸载回 CPU,省显存 |
--t5_cpu | 关 | T5 常驻 CPU,进一步省显存 |
关于--local_attn_size 18 --sink_size 6:causal-fast 推理按 chunk(默认 4 帧)流式推进,KV cache 只保留最近 18 帧窗口 + 6 帧锚点,这正是"无界交互时域"(Unbounded Interaction Horizon)的关键——视频可以无限延长而显存恒定。
多 GPU 推理常见问题与解决 💡
Q1:显存不足(OOM)怎么办?加--offload_model True与--t5_cpu;--offload_model在多卡场景默认关闭(单卡默认开启),手动开启后每步前向会把模型搬回 CPU,速度略降但显存显著下降。
Q2:报错ulysses_size should be equal to the world size?torchrun --nproc_per_node=N中的 N 必须与--ulysses_size一致,例如 4 卡机器就用--nproc_per_node=4 --ulysses_size 4(4 能整除 40,合法)。
Q3:单卡能跑吗?可以。单进程直接python generate.py ...,但 FSDP 与 Ulysses 均不可用(generate.py 会直接断言报错),14B 模型对单卡显存要求极高,建议至少 4 卡以上。
Q4:帧数为什么必须是 4n+1?VAE 时间压缩步长为 4,首帧为条件帧,因此总帧数需满足 4n+1(如 81、361),脚本会自动向下对齐到合法值。
Q5:想验证多卡真的并行加速了吗?观察 8 个进程的nvidia-smi显存曲线:每卡显存约为单卡全量模型的 1/8 量级 + 5 头 KV cache 份额,且 8 卡利用率均衡,即说明 FSDP 与 Ulysses 均生效。
至此,你已经掌握了 LingBot-World 2.0 八卡多 GPU 推理的完整链路:torchrun 拉起进程 → FSDP 分片 14B 权重 → Ulysses 切分长序列 → KV cache 流式解码。更多演示效果、模型更新计划与许可信息(CC BY-NC-SA 4.0,见 LICENSE.txt)可参考 README.md。
【免费下载链接】lingbot-world-v2
Infinite Worlds with Versatile Interactions
相关推荐
Transformers 中的 DeepSpeed Ulysses 序列并行:用多卡切分超长序列进行训练的技术指南
Transformers 中的 DeepSpeed Ulysses 序列并行:用多卡切分超长序列进行训练的技术指南 本篇基于 Transformers 官方文档
人工智能大模型深度学习NLP预训练微调模型推理服务混元视频多GPU并行推理:ring-degree与ulysses-degree配置完全指南
混元视频多GPU并行推理:ring degree与ulysses degree配置完全指南 混元视频(HunyuanVideo)作为腾讯开源的130亿参数大模型
人工智能大模型媒体生成多模态LingBot-VLA 训练加速架构指南:FSDP2+Ulysses序列并行如何实现 1.5~2.8 倍提速
LingBot VLA 训练加速架构指南:FSDP2+Ulysses序列并行如何实现 1.5~2.8 倍提速 LingBot VLA 是一个基于 20,000
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考