Phantom 视频生成的命令
flyfish
Phantom 视频生成的实践
Phantom 视频生成的流程
Phantom 视频生成的命令
Wan2.1 图生视频 支持批量生成
Wan2.1 文生视频 支持批量生成、参数化配置和多语言提示词管理
Wan2.1 加速推理方法
Wan2.1 通过首尾帧生成视频
AnyText2 在图片里玩文字而且还是所想即所得
Python 实现从 MP4 视频文件中平均提取指定数量的帧
执行命令
torchrun --nproc_per_node=8 script.py
{
"task": "s2v-1.3B",
"size": "832*480",
"frame_num": 81,
"ckpt_dir": "./Wan2.1-T2V-1.3B",
"phantom_ckpt": "./Phantom-Wan-1.3B/Phantom-Wan-1.3B.pth",
"offload_model": false,
"ulysses_size": 4,
"ring_size": 2,
"t5_fsdp": true,
"t5_cpu": false,
"dit_fsdp": true,
"use_prompt_extend": false,
"prompt_extend_method": "local_qwen",
"prompt_extend_model": null,
"prompt_extend_target_lang": "ch",
"base_seed": 40,
"sample_solver": "unipc",
"sample_steps": null,
"sample_shift": null,
"sample_guide_scale": 5.0,
"sample_guide_scale_img": 5.0,
"sample_guide_scale_text": 7.5
}
torchrun
是 PyTorch 提供的一个分布式训练启动工具,用于简化和标准化多机多卡训练的启动流程。
一、核心功能与优势
-
自动处理分布式环境初始化
- 自动设置
MASTER_ADDR
、MASTER_PORT
、RANK
、WORLD_SIZE
等环境变量; - 支持多种节点发现机制(如
etcd
、TCP)。
- 自动设置
-
支持多种分布式训练模式
- 数据并行(Data Parallelism);
- 模型并行(Model Parallelism);
- 混合精度训练(如 FSDP、ZeRO)。
-
弹性训练(Elastic Training)
- 支持动态调整节点数量(如节点故障时自动减少训练节点);
- 通过
--max_restarts
参数实现容错重启。
-
简化命令行参数
- 统一的参数接口,无需手动编写复杂的环境变量设置脚本。
二、基本用法
1. 单机多卡训练
torchrun \
--nproc_per_node=8 # 每节点使用 8 个 GPU
your_script.py # 训练脚本
--arg1 value1 # 脚本参数
--arg2 value2
2. 多机多卡训练
# 机器 0(主节点)
torchrun \
--nnodes=2 # 总节点数
--nproc_per_node=8 # 每节点 GPU 数
--node_rank=0 # 当前节点编号
--rdzv_endpoint=192.168.1.1:29500 # 主节点地址
your_script.py
# 机器 1(从节点)
torchrun \
--nnodes=2
--nproc_per_node=8
--node_rank=1
--rdzv_endpoint=192.168.1.1:29500 # 与主节点相同
your_script.py
三、常用参数详解
参数 | 含义 | 示例值 |
---|---|---|
--nproc_per_node | 每个节点使用的进程数(通常等于 GPU 数) | 4 (4 卡服务器) |
--nnodes | 分布式训练的总节点数(机器数) | 2 (两台机器) |
--node_rank | 当前节点的编号(从 0 开始) | 0 (主节点) |
--rdzv_endpoint | 主节点地址和端口,用于节点发现 | 192.168.1.1:29500 |
--rdzv_backend | 节点发现后端类型 | c10d (默认)或 etcd |
--max_restarts | 弹性训练的最大重启次数 | 3 |
--standalone | 单机训练模式(简化配置) | 无参数值 |
nvidia-smi topo -m 命令展示了GPU 之间的连接拓扑结构和通信类型
X = Self
SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
PXB = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
PIX = Connection traversing at most a single PCIe bridge
NV# = Connection traversing a bonded set of # NVLinks
这个输出来自 nvidia-smi topo -m
命令,展示了 GPU 之间的连接拓扑结构和通信类型。这些缩写描述了不同 GPU 之间数据传输的路径和性能特征。以下是详细解释:
一、连接类型说明
1. 本地连接
- X:Self
表示 GPU 连接到自身(对角线位置),无实际通信开销。
2. 系统级连接
- SYS:System
连接需穿越 PCIe 总线和 系统级互连(如 Intel 的 QPI/UPI 或 AMD 的 Infinity Fabric),通常用于跨 NUMA 节点的通信。
特点:延迟最高,带宽最低。
3. 节点级连接
- NODE:Node
连接需穿越 PCIe 总线和 同一 NUMA 节点内的 PCIe 主机桥(Host Bridge),通常发生在多 socket 服务器中。
特点:延迟较高,带宽较低。
4. 主机桥连接
- PHB:PCIe Host Bridge
连接需穿越 PCIe 总线和 CPU 中的 PCIe 主机桥,常见于单 socket 服务器中不同 PCIe 插槽间的通信。
特点:延迟中等,带宽中等。
5. 多桥连接
- PXB:PCIe eXtended Bridge
连接需穿越 多个 PCIe 桥,但不经过 CPU 主机桥,通常发生在高级 PCIe 拓扑中。
特点:延迟较低,带宽较高。
6. 单桥连接
- PIX:PCIe Intermediate eXpander
连接仅需穿越 最多一个 PCIe 桥,通常发生在同一 PCIe 交换机下的 GPU 之间。
特点:延迟低,带宽高。
7. NVLink 连接
- NV#:NVLink (# 表示链路数量)
连接通过 NVIDIA 的 NVLink 高速互连,提供比 PCIe 更高的带宽和更低的延迟。例如:- NV1:1 条 NVLink 链路;
- NV2:2 条 NVLink 链路(带宽翻倍);
- NV4:4 条 NVLink 链路(如 A100 GPU)。
特点:延迟极低,带宽极高。
二、性能对比表
连接类型 | 延迟(从低到高) | 带宽(从高到低) | 典型场景 |
---|---|---|---|
NV# | 极低 | 极高(如 300GB/s) | 同一服务器内的多 GPU(如 A100) |
PIX | 低 | 高(PCIe 4.0/5.0) | 同一 PCIe 交换机下的 GPU |
PXB | 较低 | 较高(PCIe 4.0/5.0) | 跨 PCIe 交换机但不跨 CPU 的 GPU |
PHB | 中等 | 中等(PCIe 3.0/4.0) | 单 socket 服务器中不同插槽的 GPU |
NODE | 较高 | 较低 | 同一 NUMA 节点内跨主机桥的 GPU |
SYS | 高 | 低 | 跨 NUMA 节点或多机通信 |
ring_size
ring_size=2
的含义
- 总 GPU 数:8
- 每个环的大小:
ring_size=2
(即每个环包含 2 个 GPU) - 环的总数:总 GPU 数 ÷ ring_size = 8 ÷ 2 = 4 个环
举例说明:
将 8 个 GPU 编号为 GPU0-GPU7
,则分组方式为:
环1: GPU0 ↔ GPU1
环2: GPU2 ↔ GPU3
环3: GPU4 ↔ GPU5
环4: GPU6 ↔ GPU7
每个环内的 GPU 进行梯度同步,环之间不直接通信。
误将 ring_size
理解为“环的数量”,但实际它表示“单个环的规模”。
若有 4 个 GPU,设置 ring_size=4
则表示整个集群构成单个环(所有 GPU 参与同一环的通信)。
配置的核心逻辑
1. 环内通信 vs 环间通信
- 环内:通过高速连接(如 NVLink)通信,效率高。
- 环间:若需跨环同步(如模型并行),需通过低速连接(如 PCIe/SYS),应尽量避免。
2. 适用场景
当 GPU 拓扑为“成对高速连接”时(如每 2 个 GPU 间有 NVLink,跨对为 PCIe),ring_size=2
可最大化利用高速链路:
# 假设 GPU0↔GPU1、GPU2↔GPU3 等为 NVLink,其余为 PCIe
环内通信(NVLink)速度 >> 环间通信(PCIe)速度
对比参考
配置 | 环数量 | 每个环 GPU 数 | 适用场景 |
---|---|---|---|
ring_size=2 | 4 | 2 | 成对高速连接(如 8 卡中 4 对 NVLink) |
ring_size=4 | 2 | 4 | 每 4 个 GPU 间有高速互联 |
ring_size=8 | 1 | 8 | 所有 GPU 全互联(如 NVSwitch) |