站点图标 高效码农

LiveAvatar深度拆解:5张显卡如何让14B大模型实现20FPS无限时直播?

把 14B 大模型塞进 5 张显卡:LiveAvatar 如何让“数字人”无限时长直播?

日期:2025-12-08


一句话速览

LiveAvatar 用 4 步扩散、流水线并行和“滚动锚帧”技术,把 14B 参数的扩散模型搬到 5×H800 显卡上,实现 20 FPS、无限时长、音唇同步的实时 avatar 直播——代码已在 GitHub 开源。


目录

  1. 它到底解决了什么痛点?
  2. 20 FPS 是怎么榨出来的?
  3. 无限时长为什么不崩?
  4. 训练 & 推理流水线的两张“蓝图”
  5. 实测数据:短 10 s vs 长 10000 s
  6. 快速上手:conda 环境到第一张生成帧
  7. 常见疑问 FAQ
  8. 局限与未来更新
  9. 一句话总结

1. 它到底解决了什么痛点?

老问题 传统方案表现 LiveAvatar 做法
实时性 14B 模型单卡 0.25 FPS 5 卡并行 20 FPS
长视频一致性 100 s 后脸开始“漂移” 10000 s 外观不变
部署成本 需要 80 步采样、显存爆炸 4 步采样,720×400 分辨率单卡 32 GB 以下

关键词:实时流媒体、无限长度、音唇同步、14B 大模型、扩散蒸馏


2. 20 FPS 是怎么榨出来的?

2.1 核心算法:Timestep-Forcing Pipeline Parallelism(TPP)

把“ Sequential 80 步去噪”切成 4 步,每步固定分给一张 GPU,形成真正的“流水线”:

GPU0 只做 t4→t3  
GPU1 只做 t3→t2  
GPU2 只做 t2→t1  
GPU3 只做 t1→t0  
GPU4 专做 VAE 解码
  • 每卡只存自己那一级的 KV-cache,通信量 = latent 大小,几乎可忽略
  • 吞吐由最慢的一步决定,而非 4 步累加,因此 FPS 直接翻 4×

2.2 训练阶段:Self-Forcing DMD 蒸馏

阶段 目的 关键设置
Stage1 Diffusion-Forcing 让模型适应“块内全注意力 + 块间因果” 3 帧一块,KV-cache 与噪声同级
Stage2 DMD 蒸馏 把 80 步教师压成 4 步学生 历史 KV 加噪,增强长序列鲁棒性

蒸馏后 NFE(Number of Function Evaluations)从 80→4,单卡 FPS 由 0.25→5,再叠加 TPP 即可 20 FPS。


3. 无限时长为什么不崩?

3.1 滚动锚帧(Rolling Sink Frame)

现象 根因 对策
身份漂移 推理与训练时的 RoPE 相对位置不一致 Rolling-RoPE:动态更新锚帧位置
颜色跑偏 锚帧始终来自外部图片,分布外 Adaptive Attention Sink:第 1 块生成后把锚帧换成自己的 latent

3.2 历史 KV 加噪(History Corrupt)

把 KV-cache 里 10 % 通道随机加高斯噪声,强迫模型“忘记”过远信息,只保留近期动作,阻断误差累积链。


4. 训练 & 推理流水线的两张“蓝图”

4.1 训练蓝图(对应论文图 2)

Stage1  
├─ 输入:3 帧 latent 块 + 音频 embedding  
├─ 掩码:块内全可见,块间因果  
└─ 输出:干净的 3 帧  

Stage2  
├─ 用 Stage1 权重初始化“学生”  
├─ 教师(固定)与“假教师”(在线更新)给出分数差  
└─ DMD 损失反向更新学生,历史 KV 有 10 % 概率被加噪

4.2 推理蓝图(对应论文图 3)

Warmup  
└─ 第一块顺序跑完 4 步,填满流水线  

Streaming  
├─ GPUi 永远只做 ti→ti-1  
├─ 每步本地 KV-cache 复用,显存占用恒定  
└─ VAE 专用卡实时解码,输出 720×400 视频流

5. 实测数据:短 10 s vs 长 10000 s

5.1 短片段(GenBench-ShortVideo,约 10 s)

模型 ASE↑ IQA↑ Sync-C↑ FPS↑
Ditto 3.31 4.24 4.09 21.8
OmniAvatar 3.53 4.49 6.77 0.16
LiveAvatar 3.44 4.35 5.69 20.88

5.2 长片段(GenBench-LongVideo,约 7 min)

模型 ASE↑ IQA↑ Sync-C↑ Dino-S↑
OmniAvatar 2.36 2.86 8.00 0.66
WanS2V 2.63 3.99 6.04 0.80
LiveAvatar 3.38 4.73 6.28 0.94

5.3 极限压力测试(10000 s 连续生成)

区间 ASE IQA Sync-C Dino-S
0–10 s 3.37 4.72 6.20 0.94
10000–10010 s 3.38 4.71 6.26 0.93

10000 秒无衰减,迄今公开最长连续数字人视频。


6. 快速上手:conda 环境到第一张生成帧

官方代码 12 月初已上传,以下步骤来自仓库 README,实测 Ubuntu 22.04 + CUDA 12.4 通过。

6.1 安装

# 1. 创建环境
conda create -n liveavatar python=3.10 -y
conda activate liveavatar

# 2. CUDA 驱动
conda install nvidia/label/cuda-12.4.1::cuda -y
conda install -c nvidia/label/cuda-12.4.1 cudatoolkit -y

# 3. PyTorch & FlashAttention
pip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128
pip install flash-attn==2.8.3 --no-build-isolation

# 4. 其余依赖
pip install -r requirements.txt

6.2 下载权重

mkdir checkpoints
git lfs install
git clone https://huggingface.co/Quark-Vision/Live-Avatar checkpoints/

6.3 无限时长推理(5 卡)

bash scripts/infinite_inference.sh \
  --audio   data/audio.wav \
  --image   data/ref.jpg \
  --text    "Make the fire talk!" \
  --outdir  outputs/
  • 首次运行会 Warmup 20 帧填满流水线,随后稳定 20 FPS
  • Ctrl+C 随时停止,已生成片段已自动落盘为 mp4,可直接播放

7. 常见疑问 FAQ

Q1:我只有 2 张 RTX 4090,能跑吗?
A:官方后续会放 3 步蒸馏 + INT8 量化版,目标 4090 双卡 15 FPS,请留意仓库更新。

Q2:为什么 720×400 分辨率不能再高?
A:流水线里 VAE 解码是瓶颈,提高分辨率会线性增加延迟。团队正在尝试 SVD 量化 + Tile 解码,未来支持 1080p。

Q3:想用自己的声音驱动,音频需要什么格式?
A:单声道 16 kHz WAV,时长不限,代码内部自动切成 20 ms 窗口。

Q4:会不会出现“ deepfake 滥用”?
A:仓库内置可见水印 + 帧级哈希校验,且用户协议要求“可追踪授权”。详见论文 13 章伦理声明。

Q5:训练要自己跑 500 GPU 天吗?
A:普通玩家不必重训,官方已放出 14B checkpoints;若想微调,8×A100 + LoRA 128 rank 约 3 天可复现。


8. 局限与未来更新

当前局限 官方 roadmap
需 5×H800,硬件门槛高 RTX 4090/A100 3 步优化
仅支持英文/中文语音 TTS 模块集成,多语言
720×400 分辨率 SVD 量化 + Tile 1080p
无 ComfyUI 节点 ComfyUI 插件 12 月底发布
模型 14B 显存大 1.3B 轻量版 Q1 上线

9. 一句话总结

LiveAvatar 把“大模型、小步采样、流水线并行、滚动锚帧”四个齿轮咬合在一起,首次让 14B 参数的扩散模型跑出 20 FPS 的实时流,并且把数字人的“脸”稳到 10000 秒都不崩——如果你在做虚拟主播、远程客服或游戏 NPC,这套开源方案值得直接 pull 下来试跑。

仓库地址:https://github.com/Alibaba-Quark/LiveAvatar
论文全文:arXiv:2512.04677

退出移动版