Hallo 做的事情很单一:给它一张正脸照片和一段语音,它输出一段嘴型、表情、头部姿态都跟着音频动的视频。初代论文《Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation》2024 年 6 月放出,主干是 Stable Diffusion 1.5 的去噪 UNet,加上 AnimateDiff 的 mm_sd_v15_v2 运动模块、wav2vec2-base-960h 音频编码器,以及论文的核心贡献 HADVS——把音频特征分层送进唇部、表情、姿态三路交叉注意力。这也是为什么推理脚本上挂着 --lip_weight、--face_weight、--pose_weight 三个可调权重,你能单独把嘴型咬紧、把头部晃动压小。
接下来三代是三次不同方向的加码。Hallo2(ICLR 2025)保持 SD 1.5 主干不动,解决的是「只能出几秒」和「只有 512×512」两个硬伤:靠 patch-drop 增广把连续生成拉到最长 1 小时,再挂一个从 CodeFormer 改出来的视频超分头输出 4K。Hallo3(CVPR 2025)直接换主干,把 UNet 换成 CogVideoX-5B-I2V 的视频扩散 Transformer,背景动态和大幅度头部运动质量跃升,代价是整套权重涨到 52GB、48GB 显存的卡都跑不动。Hallo4(SIGGRAPH Asia 2025,复旦 + 百度 + 南大 + 阿里)又换到 Wan2.1-1.3B,用 DPO 直接偏好对齐来抬保真度,主干反而小了回去。
所以「Hallo 需要多大显存」根本不是一个数字,而是四个差了将近十倍的数字。这页把每一代的权重体积、实测显存、单次生成长度、以及自建时真正会绊倒你的地方(英文 wav2vec2 带来的中文口型问题、音量没归一化导致结果飘、Hallo3 没有多卡推理路径、Hallo4 明明是音频驱动却要加载 11GB 的 umT5-XXL 文本编码器)全列出来,再配上 NexGPU 上按秒计费的对应机型,你按行对号入座就行。
01 —
四代版本对照:权重体积、实测显存、能出多长
全部来自官方仓库、HuggingFace 权重清单与论文表格,不是估算
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| Hallo(初代,arXiv 2024.06,MIT) | SD 1.5 UNet 主干 + HADVS | net.pth 4.85GB,全套权重约 11.3GB | fp16 256×256 ≈ 6.62GB | 512×512 ≈ 9.77GB | 1024×1024 ≈ 20.66GB | 512×512 · 25fps · 16 帧滑窗 + 2 帧运动帧 · 40 步 · CFG 3.5 | 最省显存的一档,24GB 单卡随便跑。显存数字取自论文 Table 7,同时给出了 0.46 / 1.63 / 10.29 秒的耗时口径。适合先跑通管线、验证素材质量。 |
| Hallo2(ICLR 2025,MIT + S-Lab 1.0) | 同 SD 1.5 主干 net.pth 4.85GB + 超分头 net_g.pth 905MB | 全套约 13GB | 生成阶段与初代同级 ≈ 10GB;4K 超分是独立第二遍,逐帧过 CodeFormer + RealESRGAN_x2plus | 最长 1 小时连续生成 · 基础 512×512 · 超分后最高 4K | 真正能拿去做长口播的一代。两段式:先 inference_long.py 出 512×512 长片,再 video_sr.py 单独超分。超分那一遍的成本要单独算,它是完整过一遍所有帧。 |
| Hallo3(CVPR 2025,MIT,受 CogVideoX 许可约束) | CogVideoX-5B-I2V DiT + 3D VAE + T5-v1.1-XXL | 主检查点 29.1GB,全套约 52GB | bf16 推理:仓库 issue 里 48GB 报 OOM、A100 开 xformers 仍 OOM、4090 24GB 直接卡死 —— 按 80GB 单卡准备 | sampling_num_frames 13(3D VAE 时序 4 倍压缩,对应 49 帧片段)· 25fps · 参考图 1:1 或 3:2 | 画质和动态幅度最强的一代,也是最贵的一代。没有多卡推理路径,issue #13 里 4×RTX 6000 Ada 也只能用上一张,15 秒音频就把单卡吃满。训练阶段 A800 80GB 都有人 OOM。 |
| Hallo4(SIGGRAPH Asia 2025,随 Wan2.1 许可) | Wan2.1-1.3B 主干 model_weight.ckpt 5.54GB + umT5-XXL 编码器 11.36GB + Wan2.1_VAE 508MB | 全套约 17.8GB | bf16 ≈ 32GB 起步(主干小但 11.36GB 文本编码器同时驻留);缓存 T5 embedding 后能压进 RTX 5090 32GB | 参考图 1:1 至 480:832 竖屏 · Wan 480p 档 | 当前主线。用 DPO 直接对齐人类偏好来抬保真度,主干比 Hallo3 小四倍多,显存回落到消费级可及的区间,是四代里性价比最好的一档。 |
02 —
按版本选卡:NexGPU 机型与每卡时价格
显存按实测峰值配,不把 5B 视频 DiT 塞进 24GB 卡里骗你
Hallo / Hallo2 跑 512×512,验证素材与批量出片
RTX 3090 24GB$0.193/卡·时
论文实测峰值 9.77GB,24GB 装得下 UNet、运动模块和 onnxruntime 的几个人脸会话还剩一半余量,而它是整个价目表里最便宜的一张卡。
Hallo 出 1024×1024,或 Hallo2 长视频 + 4K 超分两段流水
RTX 5090 32GB$0.723/卡·时
1024×1024 实测 20.66GB、10.29 秒的耗时口径,24GB 卡余量太窄;32GB 留够缓冲,而超分那第二遍是逐帧硬算,新架构省下的就是真金白银的机时。
Hallo4(Wan2.1-1.3B + DPO)推理出片
RTX A6000 48GB$0.817/卡·时
5.54GB 主干 + 11.36GB umT5-XXL + VAE 要同时在显存里,48GB 不用打任何补丁就能跑通;等你把 T5 embedding 缓存下来再换 5090 32GB 省钱。
Hallo3(CogVideoX-5B DiT)推理与长片段拼接
A100 PCIE 80GB$0.824/卡·时
48GB 已被证实不够,而 Hallo3 没有多卡推理路径,堆卡救不了你——只能上单张 80GB。单卡推理不吃 NVLink,PCIE 版比 SXM4 每小时省 $0.264。
03 —
从开机到出片:四步
以最实用的 Hallo2 长视频管线为主线,其余版本的差异写在每步说明里
- 01
起实例、建环境
NexGPU 的 PyTorch 预置镜像已经带好 CUDA 与 conda,开机直接建环境。全系要求 Python 3.10;注意 CUDA 版本不统一——Hallo / Hallo3 / Hallo4 官方标 CUDA 12.1,Hallo2 标的是 CUDA 11.8,跨版本混装 torch 最典型的报错就是 xformers 起不来。ffmpeg 是硬依赖,抽帧和封装都靠它,别漏。
git clone https://github.com/fudan-generative-vision/hallo2 && cd hallo2 && conda create -n hallo python=3.10 -y && conda activate hallo && pip install -r requirements.txt && apt-get install -y ffmpeg - 02
把权重拉到数据盘,目录结构必须对
Hallo2 这一整套约 13GB:hallo2/net.pth 4.85GB、超分头 net_g.pth 905MB、SD 1.5 UNet 3.44GB、AnimateDiff 运动模块 mm_sd_v15_v2.ckpt 1.82GB、sd-vae-ft-mse 335MB、wav2vec2-base-960h 378MB,外加 InsightFace 的 scrfd / glintr100 / 1k3d68 一组 onnx 和做人声分离的 Kim_Vocal_2.onnx。换 Hallo3 就是 52GB,Hallo4 约 17.8GB。脚本按硬路径找模型,pretrained_models 下的目录层级必须和 README 完全一致,这是新手第一大坑。
huggingface-cli download fudan-generative-ai/hallo2 --local-dir ./pretrained_models - 03
先出 512×512 长视频
long.yaml 的默认值是 512×512、fp16、40 步、CFG 3.5、25fps、16 帧片段配 2 帧运动帧。素材上有三条硬规矩:正方形裁切、人脸占画面 50%~70%、正脸且旋转角小于 30°,不满足就先用 --face_expand_ratio 调。音频要 WAV,背景音乐可以留着——管线里 Kim_Vocal_2.onnx 会先把人声抠出来再喂 wav2vec2;但音量务必先归一化,仓库把「音量影响推理结果」列在了待办里,这不是玄学。初代用 scripts/inference.py,Hallo3 用 bash scripts/inference_long_batch.sh 或 python hallo3/app.py 起 Gradio,Hallo4 直接 bash inf.sh。
python scripts/inference_long.py --config ./configs/inference/long.yaml - 04
4K 超分单独跑,跑完就停机
超分是完整的第二遍逐帧计算,机时要单独算进预算,所以先看 512×512 的成片满不满意再决定要不要跑。-w 是 CodeFormer 的保真度权重(1 偏保真、0 偏画质),-s 4 是四倍放大,--face_upsample 单独增强人脸区域。跑完把成片拷走,实例一停计算立刻停止计费;权重盘按 $0.414/GB·月 继续计,不用了就销毁。出网 $0.0081/GB,一段一小时的 4K 成片约 18GB,出网费约 $0.15。
python scripts/video_sr.py --input_path ./output_long/debug/result.mp4 --output_path ./output_sr --bg_upsampler realesrgan --face_upsample -w 1 -s 4
一段 60 秒口播视频,到底多少钱
拿 Hallo / Hallo2 的 512×512 默认档算。论文 Table 7 在 A100 级别的机器上给出 9.77GB 显存、1.63 秒的耗时口径(仓库 issue #28 里有人追问过这是不是每帧,社区普遍按每帧理解,你自己跑一遍就知道)。按每帧 1.63 秒、25fps 算:60 秒成片 = 1500 帧,1500 × 1.63 秒 = 2445 秒 ≈ 0.68 小时。挂在 A100 PCIE 80GB($0.824/卡·时)上,算力费 0.68 × $0.824 ≈ $0.56;加上拉权重和预热约 10 分钟,0.17 × $0.824 ≈ $0.14,一段 60 秒口播总共约 $0.70。换成 RTX 3090 24GB($0.193/卡·时),显存 9.77GB 绰绰有余,只是墙上时间会长——按 2.5 倍保守估算约 1.7 小时,1.7 × $0.193 ≈ $0.33,反而比 A100 便宜一半以上。这就是为什么 512×512 这一档我们默认推 3090:慢,但每段成片更省。Hallo3 就完全是另一本账,48GB 不够、必须 A100 PCIE 80GB 起,$0.824/卡·时 从第一秒就开始烧,而且 52GB 权重光挂着就是 52 × $0.414 ÷ 30 ≈ $0.72/天。按秒计费、没有最低时长、没有起步费、停机即停计算费用,所以先在 3090 上把管线和素材调对,再切到 80GB 卡上跑最终版本,是最省钱的顺序。
04 —
