在 Jetson Thor 上运行 LTX-2 19B:具备完整内存生命周期管理的开源流水线
摘要
本文介绍了一个在 NVIDIA Jetson AGX Thor 上运行 LTX-2 19B 视频生成模型的开源流水线。该流水线实现了 1080p 视频生成,并重点解决了 Jetson AGX Thor 128GB 统一内存带来的内存管理挑战,包括避免无效的 CPU 卸载、手动内存清理、页面缓存问题以及 VAE 解码时的 `torch.no_grad()` 使用。仓库提供了完整的代码、批量渲染脚本、LoRA 支持和可选的 FP8 量化。文章也坦诚了模型在推理步数、负面提示、分辨率和生成速度方面的局限性,并指出该流水线至少需要 128GB 内存。
正文
我一直在 NVIDIA Jetson AGX Thor 上运行 LTX-2(19B 蒸馏模型),并围绕它构建了一个开源流水线。该流水线能够生成带音频、相机控制 LoRA 和批量渲染的 1080p 视频(1920x1088),帧率为 24fps。考虑到在 Jetson 上运行大型视频模型的资料几乎为零,我觉得有必要分享一下。
GitHub 链接:github.com/divhanthelion/ltx2
生成内容
https://reddit.com/link/1r042w1/video/n4ulj0n7zgig1/player
https://reddit.com/link/1r042w1/video/3eerc7tpzgig1/player
视频分辨率为 1920x1088,包含 161 帧(约 6.7 秒),帧率为 24fps,并同步了音频。在 Thor 上,每个片段大约需要 15 分钟进行扩散处理,2 分钟进行 VAE 解码。
关键点:统一内存
Jetson Thor 拥有 128GB 由 CPU 和 GPU 共享的 RAM。这听起来很棒,直到你意识到它破坏了所有标准的内存优化方法:
enable_model_cpu_offload()无效 — CPU 和 GPU 使用同一内存。将张量移动到 CPU 不会释放任何内存。更糟糕的是,卸载钩子会创建引用路径,阻止模型被删除,而之后移除这些钩子会导致模型处于不一致状态,并在 VAE 解码过程中发生段错误。tensor.to("cpu")是一个空操作 — 物理内存相同。你必须实际使用del对象并运行gc.collect()+torch.cuda.empty_cache()(两次——第二次会捕获第一次释放的对象)。- 页面缓存会拖垮你 — safetensors 通过 mmap 加载权重。即使在
.to("cuda")之后,原始页面仍可能被页面缓存支持。如果在模型存活时调用drop_caches,内核会驱逐权重页面,导致下一次前向传播发生段错误。 - 必须使用
torch.no_grad()进行 VAE 解码 — 否则,PyTorch 会在分块解码过程中构建所有 15+ 个空间块的自动梯度图。在统一内存上,这不会优雅地导致 OOM(内存不足)——而是会发生段错误。我因此浪费了大约 4 个小时。
该流水线采用手动内存生命周期管理:加载所有内容 → 扩散 → 删除 /text encoder/scheduler/connectors → 解码音频 → 删除音频组件 → 在 no_grad() 下进行 VAE 解码 → 删除所有内容 → 清空页面缓存 → 编码视频。每个阶段都有明确的清理和内存报告。
仓库内容
generate.py— 包含所有内存管理的主流水线decode_latents.py— 用于从失败运行中恢复的独立解码器(潜在向量会自动保存)- 带有进度跟踪和预计到达时间的批量渲染脚本
- 相机控制 LoRA 支持(推拉/左右平移、上下摇摄、固定)
- 可选的 FP8 量化(将 内存占用大约减半)
- 用于 RIFE 帧插值 + Real-ESRGAN 升级的后处理流水线(也已 Docker 化)
所有内容均在 Docker 中运行,避免影响你的系统 Python。NGC PyTorch 基础镜像包含正确的 CUDA 13 / sm_110 构建。
局限性(坦诚说明)
- 蒸馏模型仅支持 8 个推理步 — 运动效果尚可,但不够流畅。后处理中的帧插值有所帮助。
- 负面提示无效 — 蒸馏模型使用 CFG=1.0,这在数学上消除了负面提示项。它会静默接受该标志但不起作用。
- 1080p 是质量上限 — 你可以生成更高分辨率的视频,但模型是在 1080p 下训练的。超过此分辨率会出现空间块接缝和连贯性损失。最好在 1080p 下生成然后进行升级。
- 每个片段约 15 分钟 — 这是一个在边缘设备上的 19B 模型。速度不快。但它是完全本地化和离线的。
硬件
NVIDIA Jetson AGX Thor,JetPack 7.0,CUDA 13.0。128GB 统一内存。该流水线至少需要 128GB — 在 64GB 下,你需要使用 FP8 + 预计算的文本嵌入才能装载,而且会非常紧张。
如果还有其他人在 Jetson 硬件上运行视频生成模型,我很想交流一下经验。统一内存的陷阱确实存在,而且几乎没有文档说明。