在使用 GeneFace++(GeneFace Plus Plus) 时,显存(VRAM)被占满通常是以下几个部分共同作用的结果,你可以对照排查:
一、模型本身占用的显存(大头)
GeneFace++ 不是一个单一模型,而是多模块串联,每个模块都会吃显存:
1. 面部运动 / 姿态估计模型
- 如
face_recon、3DMM 相关模型 - 通常基于 ResNet / Vision Transformer
- 占用:1–3 GB
2. 音素 → 动作 模型(audio2motion)
- 如
audio2exp、audio2pose - 多为 Transformer / RNN
- 占用:1–2 GB
3. 渲染 / 生成模型(核心显存杀手)
- NeRF / 3D Gaussian Splatting 渲染器
- 或基于 GAN 的 renderer
- 这是最占显存的模块
- 占用:
- 低分辨率:2–4 GB
- 高分辨率(512+):6–10+ GB
二、数据 & 中间结果占用
1. 批量尺寸(batch size)过大
- 推理时 batch > 1 会线性增加显存
- 训练时更明显
2. 视频帧缓存
- 多帧连续渲染
- 特征图、depth map、mask 同时存在显存中
3. 未释放的中间 Tensor
- 推理代码里
.cuda() 后没 del + torch.cuda.empty_cache()
三、常见“隐形”显存占用
1. PyTorch 缓存机制
- 显存“看着满”,其实很多是 reserved 而不是 allocated
- 用
nvidia-smi 看的是 reserved
2. 同时开了多个模型
- 比如:
- 先加载 audio2motion
- 又加载 renderer
- 没卸载前一个
3. CUDA 上下文
四、快速自查清单 ✅
你可以这样查:
nvidia-smi
看哪个进程占最多。
在代码里加:
import torch
print(torch.cuda.memory_summary())
检查:
- batch size 是否 > 1
- 是否同时加载多个模型
- 渲染分辨率是否过高
五、典型显存占用参考(单卡)
| 场景 | 显存 |
|---|
| 仅推理(低分辨率) | 6–8 GB |
| 推理(512 分辨率) | 10–12 GB |
| 训练 | 16–24 GB |
如果你愿意,可以告诉我:
- 你是 推理还是训练
- 用的 分辨率 / batch size
- 报错信息 or
nvidia-smi 截图
我可以直接帮你定位是哪一行代码或哪个模块把显存吃满的。