ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LTX-2 序列并行:多卡低延迟推理全流程拆解

LTX-2 序列并行:多卡低延迟推理全流程拆解 LTX-2 序列并行多卡低延迟推理全流程拆解【免费下载链接】LTX-2Official Python inference and LoRA trainer package for the LTX-2 audio–video generative model.项目地址: https://gitcode.com/GitHub_Trending/lt/LTX-2LTX-2 的序列并行Sequence Parallelism下称 SP把视频的 token序列维均匀切分到多张 GPU 上让每一步去噪在更低延迟下完成且结果与单 GPU 推理数值等价。它是多 GPU 管线中求忠实、求低延迟场景的默认策略。单卡为什么扛不动长序列512×768、121 帧的视频序列展开后约有 6144 个视频 token注意力开销随 token 数增长单卡必须完整扛下每一步去噪denoising step模型每降噪一次的一次迭代的计算。SP 沿 token 维把序列均匀分给各卡并行前向把每步延迟摊到多卡。它不改变模型行为只改变计算在硬件上的分布方式。切分 → 交换 → 拼回SP 的数据流主线SP 每步前向只做三件事按 token 均匀切分、用 all2all 交换注意力头、再 all-gather 拼回实现见 sequence_parallel.py。1. 切分含 Pad 对齐。latent、timesteps、positions 先沿 seq 维补齐到world_size整数倍再切成每卡等量的 shard。补齐有讲究若原本没有 attention mask会构造 key-only padding mask[0, 1]形式shape 为(1, 1, T_padded)只占O(T)内存而不是物化一个稠密的(B, T, T)矩阵若用户传了(B, T, T)mask则扩展出 pad 行/列且 pad 的 query 行允许 attend 所有有效 key——输出反正会被切掉但全 masked 的行会产生 NaN。2. 交换。all2all多卡之间按注意力头维度互换 Q/K/V 数据的通信是保持全局注意力的关键视频自注意力attn1的 Q/K/V 全部经send_recv_heads洗牌每卡本地只算local_heads heads // world_size个头的注意力再用gather_heads换回。也就是说注意力仍是全局的token 间交互一个不丢。音频侧的视频→音频交叉注意力更轻Q 序列短、可以复制直接在本地按 rank 切片只有 K/V 走send_recv_heads输出沿 head 维用all_gather_into_tensor收集。3. 拼回。各卡输出先 pad 到最大长度做均匀 all_gather再按各 rank 的真实 token 数裁回拼接最后去掉 padding 行恢复调用方传入的原始长度。换句话说SP 的往返gather(send(x)) x是逐字节精确的内核只搬运字节唯一变化是浮点归约顺序。所以要和单卡结果一致、但要更低延迟时SP 就是正解。选型对照SP、TDP、分布式解码与分布式 Gemma先给结论分辨率在训练分布内且要求与单卡一致选 SP训练分布外的 upscale 选 TDP。同项目四种并行手段的分工如下总览见 multigpu/README.md方案目标保真度适用场景序列并行 SP沿 token 维切分压低每步去噪延迟与单 GPU 数值等价仅浮点归约顺序变化训练分布内分辨率、要求与单卡结果一致分块数据并行 TDP每卡一块空间 tile高×宽面向训练分布外分辨率upscale-onlystage 2 全分辨率阶段分布式解码器latent tile 并行解码driver 端拼装—解码侧并行VAE 解码分布式 Gemma经 Acceleratedevice_map切分文本编码器—文本编码器侧并行提示词编码与增强SP 的默认位置stage 1ti2vid_two_stages_mgpu.py与 distilled_mgpu 的 shared stagedistilled_mgpu.py后者用一个 SP 包裹同时覆盖 half-res 与 full-res 两次调用。组件拆解两个核心 API AttentionManager管 all2all 缓冲区与步长它管两样东西每卡大小的 all2all 通信 buffer每 rank 为ceil(max_tokens / world_size)个 token以及每步的 per-rank token 数——set_seqlen_all2all(...)在下发各 rank token 数的同时把计数同步到 C 运行时随后torch.distributed.barrier保证所有 rank 对齐再进模型。构造时注意三点定义见 attention.pynum_heads必须能被world_size整除否则redistribute中显式校验并抛ValueError惰性 importltx_kernels目的是让 multigpu 模块在未安装内核时如 CPU CI 收集测试仍可导入内部创建 4 个All2All实例q/k/v/headscopy_out_True时 k、v 与 q 共用实例all2all_timeout_seconds属性默认 10.0s对应内核configs.cuh的DEFAULT_BARRIER_TIMEOUT_SECONDS首次torch.compile前向可能因某 rank 重编译导致内核启动晚于稳态超时而触发 barrier应对策略是首次编译前临时调大、之后再复位。SequenceParallelBuilder管 builder 包裹与 module-ops 注入它是一个包裹型wrappingbuilder——不新建模型把该 stage 已有的单卡 builder 套一层。它只接受SingleGPUModelBuilder否则抛TypeError构造时做两件事把 registry 与 LoRA 加载设备cuda:当前设备注入 inner builder用create_video_self_attention_module_ops(attn_mgr)生成 SP 的 module-ops 追加到 inner 的 module_ops 列表。build()时经TransformerWeightTracker构建模型再包一层SequenceParallelModelWrapper返回见 sp_builder.py。module-ops 的替换面在LTXModel上匹配对其中每个BasicAVTransformerBlock视频自注意力attn1换成All2AllAttention/MaskedAll2AllAttention视频→音频交叉注意力video_to_audio_attn换成AudioAll2AllAttention/MaskedAudioAll2AllAttention。目前无调用方给该交叉注意力传 maskmasked 分支是死代码但两个槽位都换——将来若有人加 maskSP 管道已经就位不会静默绕过 All2All。内核侧all_to_all.py、all2all_heads.cultx_kernels.All2All用 CUDA-IPC peer buffer 直写direct-write目标卡内存避免中间拷贝、接近峰值带宽SM 按SM i 写 rank (i % world_size)轮转分配处理 SM 数不可整除的情况132 个 SM、8 卡时 rank 0–3 各 17 个、rank 4–7 各 16 个搬运完成后各 SM 原子递增目标 rank 的 barrier 计数器SM 0 等齐所有 rank 后重置计数器。Python 侧用torch.library.custom_op注册ltx_kernels::send_recv_heads与ltx_kernels::gather_headstorch.compile含modereduce-overhead的 CUDA Graph 捕获可无 graph break 地 trace 过去world_size作为 int 常量进入算子编译缓存只按 GPU 数量键控同一个图绝不会在另一卡数下重放每步变化的 per-rank token 数留在 C 运行时状态set_rank_tokens里不经过算子。接入三步从单卡管线到 SPMGPU 管线的本质是单 GPU 管线 替换各 block 的 builder接入只有三步构建内核uv sync --group kernels需要 CUDA toolkit/nvcc 与 gcc 或 clang。替换 builder在 runner 的setup()内、按 stage 执行# inside runner.setup(), per stage: model_cfg pipeline.stage_1._transformer_builder.model_config().get(transformer, {}) attn_mgr AttentionManager( max_tokens32768, num_headsmodel_cfg[num_attention_heads], head_dimmodel_cfg[attention_head_dim], tensor_dtypepipeline.dtype, groupself.groups.transformer_group, ) pipeline.stage_1._transformer_builder SequenceParallelBuilder( innerpipeline.stage_1._transformer_builder, attn_mgrattn_mgr, registryregistry, trackertracker, )跑 runner两个入口都能端到端体验 SPuv sync --group kernels python -m ltx_pipelines.ti2vid_two_stages_mgpu \ --checkpoint-path path/to/checkpoint.safetensors \ --distilled-lora path/to/distilled_lora.safetensors 1.0 \ --spatial-upsampler-path path/to/upsampler.safetensors \ --gemma-root path/to/gemma \ --prompt A beautiful sunset over the ocean \ --output-path output.mp4包裹与继承关系SequenceParallelBuilder以inner...包裹该 stage 已有的单卡 builder因此继承 checkpoint 路径、量化、编译与 LoRA 配置只是叠加了并行。registry是进程内所有 builder 共享的一个ModelRegistrycheckpoint 每进程只从磁盘加载一次tracker是transformer_group对应的TransformerWeightTrackergroups.transformer_group由 nccl_groups.py 中dist.new_group(ranksall_ranks)创建setup 约定见 pipeline-setup.md。max_tokens 上界怎么定max_tokens必须覆盖最大的那个 step参考量级stage 1 在 512×768×121 下约 6144 个视频 tokendistilled shared stage 的 full-res 调用1024×1536×121约 24576两者默认_DEFAULT_SP_MAX_TOKENS 32768。超限后SequenceParallelModelWrapper.forward抛出的报错原文{}为运行期填充值Total video token count ({total_tokens}) exceeds attention_manager max_tokens ({max_tokens}). Use a smaller resolution or fewer frames.⚠️ 这不是精度问题而是通信 buffer 上界不够。两条出路降分辨率或减帧数或显式调大各 MGPU runnersetup()都接受的sp_max_tokens参数buffer 随之变大。另有一个易踩报错num_heads不能被卡数整除时redistribute抛heads ({heads}) must be divisible by world_size ({world_size})只能换卡数或换模型无法绕过。运行前提与不适用清单SP 依赖 NCCL 与 CUDA-IPC peer buffer边界很硬仅 Linux 可用NCCL 与 CUDA-IPC peer buffer 为 Linux 独占无 macOS/Windows单节点 ≥2 张支持 P2PNVLink/PCIe的 CUDA GPU不支持多节点带 CUDA 的 PyTorch且ltx-kernels已构建uv sync --group kernels不适用想让单卡放不下的模型塞进来——MGPU 是延迟工具而非显存工具transformer 的工作副本在每个 rank 都是完整副本SP 只额外把激活activation内存分摊到各 rank不适用训练分布外的 upscale 分辨率那是 TDP 的场景。小结SP token 维均匀切分 all2all 换头 all-gather 还原注意力保持全局结果与单 GPU 数值等价换来的是每步去噪延迟摊到多卡。掌握AttentionManagerbuffer 与 seqlen 管理和SequenceParallelBuilderbuilder 包裹与 module-ops 注入这两个 API就拿到了在自定义 MGPU runner 中接入 SP 的全部关键端到端可直接跑ti2vid_two_stages_mgpu或distilled_mgpu两个 runner。延伸阅读入口sequence-parallel.md含完整 CLI 示例与 multigpu/README.md。【免费下载链接】LTX-2Official Python inference and LoRA trainer package for the LTX-2 audio–video generative model.项目地址: https://gitcode.com/GitHub_Trending/lt/LTX-2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表