前置条件
- 1已注册腾讯云账号
- 2已购买一台腾讯云 GPU 云服务器(建议 16GB 显存起步)
- 3服务器已安装 NVIDIA 驱动与 Docker(Docker 路径需要)
读完想动手?新用户首单 8 折上云
服务器 + 大模型 API + 对象存储,新用户首购享 20% 补贴
LivePortrait 腾讯云 GPU 部署完整指南
本教程将详细介绍如何在 腾讯云 GPU 云服务器上部署快手开源的国产肖像动画项目 LivePortrait,提供 conda 源码部署与 Docker 容器两条完整路径,让你拥有一套私有的数字人视频生成服务 —— 一张照片加一段驱动视频,就能产出自然的人像动画。
前置准备
在开始之前,请确保你已经完成以下准备工作:
- 已注册腾讯云账号
- 已购买一台腾讯云 GPU 云服务器(建议 16GB 显存起步)
- 服务器已安装 NVIDIA 驱动与 Docker(Docker 路径需要)
为什么选 LivePortrait
数字人方案很多,先说清楚它的位置,避免选错工具白花钱。
一句话定位
信息
LivePortrait = 一张静态照片 + 一段驱动视频 → 自然的人像动画,不需要建模、不需要训练目标人物、不需要微调,开箱即用。
它由快手视觉生成团队联合高校开源,核心思路是把驱动视频里的表情与姿态迁移到你的源图上,通过精巧的拼接与重定向控制,生成连贯的结果。因为不需要针对目标人物采集素材,它是「批量产出口播视频」这一类需求里性价比最高的开源方案。
与其他路线的区别
| 路线 | 需要什么 | 上手成本 | 适合场景 |
|---|---|---|---|
| LivePortrait | 一张照片 + 一段驱动视频 | ⭐ 极低 | 快速批量产出会说话的人像视频 |
| 3D 建模数字人 | 建模资产 / 动捕设备 | 极高 | 高质量虚拟偶像、影视级制作 |
| 微调训练数字人 | 目标人物数小时素材 + 训练 | 高 | 高度定制的专属形象 |
| 口型 SaaS 服务 | 按次付费 | 低 | 不在意成本在意省事的运营团队 |
关键事实:
- 显存门槛友好:8GB 显存即可运行,16GB 体验明显更好,不像很多视频生成模型动辄要 24GB
- 支持 animal 模式:可以让猫狗的照片动起来(需要额外编译 X-Pose 依赖)
- Gradio 可视化界面:拖拖拽拽就能用,不必每次敲命令
- 支持命令行批量推理:适合把生成流程接进自己的自动化流水线
什么时候该选它
✅ 适合:批量产出口播/讲解视频 / 让历史照片或插画动起来 / 做表情包与创意短视频 / 想私有化部署不希望素材上传到第三方
❌ 不适合:需要全身动作而非仅头部表情(它主要驱动面部与头部姿态)/ 需要极高的影视级画质 / 想让非人非动物物体动起来
GPU 实例选型:这一步决定能不能跑起来
选型的第一约束始终是显存。下面是实测的显存与体验对应关系:
| GPU 档位 | 显存 | 能做什么 | 体验评价 |
|---|---|---|---|
| 入门档(如 T4 档) | 16GB | 单张人像 + 短视频驱动 | ✅ 可跑,速度中等,适合验证与批量生产 |
| 主流档(如 A10 档) | 24GB | 更长视频、更大分辨率 | ⭐ 推荐,速度与画质兼顾 |
| 高性能档(如 A100 档) | 40GB 以上 | 长视频批量、并发多路 | 团队共享、生产级吞吐 |
警告
⚠️ 官方与实测的边界:官方给出的最低要求是 8GB 显存(对应 RTX 3070 档)。但在实际生成中,驱动视频越长、源图分辨率越大,显存占用越高。用 8GB 跑短片段没问题,跑长视频大概率 OOM。所以本教程推荐从 16GB 起步。
其他配置:
| 项目 | 建议 | 说明 |
|---|---|---|
| CPU | 8 核以上 | 视频编解码与前后处理会用到 |
| 内存 | 32GB | 处理长视频时内存也会吃紧 |
| 磁盘 | 100GB SSD 以上 | 权重约十几 GB,加上缓存与输出视频 |
提示
💡 省钱建议:腾讯云 GPU 实例选按量计费,验证完就用完即毁。需要长期保留环境时,把权重目录放进 COS 对象存储,重开实例时挂载下来,避免每次都重新下载十几 GB。
前往 腾讯云 GPU 云服务器 查看各档机型与实时库存;同地域创建可以配合 COS 内网传输,几乎不花流量费。
路径 A:conda 源码部署(推荐,排障最直接)
源码部署步骤多一点点,但出问题时最容易定位,也方便改参数。
A1. 确认驱动与 CUDA 版本
1# 应看到显卡型号、驱动版本与显存总量
2nvidia-smi
3
4# 查看 CUDA 编译器版本(决定要装哪个 PyTorch)
5nvcc -V警告
⚠️ 这一步不能跳过。PyTorch 的 CUDA 版本必须与系统驱动兼容,选错会导致 torch.cuda.is_available() 返回 False,是最常见的失败原因。
PyTorch 与 CUDA 的对应关系(以本项目验证过的组合为准):
| 系统 CUDA | 安装命令中的 index-url | 说明 |
|---|---|---|
| CUDA 11.8 | cu118 | 兼容性最好的组合,推荐首选 |
| CUDA 12.1 | cu121 | 新驱动可用 |
A2. 创建 conda 环境并安装 PyTorch
1# 安装 miniconda(若已装可跳过)
2wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
3bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda
4echo 'export PATH=/opt/conda/bin:$PATH' >> ~/.bashrc
5source ~/.bashrc
6
7# 创建独立环境(官方推荐 Python 3.10)
8conda create -n LivePortrait python=3.10 -y
9conda activate LivePortrait
10
11# 安装 PyTorch(以 CUDA 11.8 为例;CUDA 12.1 把 cu118 换成 cu121)
12pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 \
13 --index-url https://download.pytorch.org/whl/cu118
14
15# 国内加速:配置清华 PyPI 源再装其余依赖
16pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple提示
💡 腾讯云 GPU 镜像通常已预装驱动。若 nvidia-smi 报 command not found,说明选的是普通镜像而非 GPU 镜像,需要到控制台重装系统选择 GPU 驱动版本,或手动安装驱动。
A3. 拉取代码并安装依赖
1cd /opt
2git clone https://github.com/KwaiVGI/LivePortrait.git
3cd LivePortrait
4
5pip install -r requirements.txt
6
7# 安装 ffmpeg(视频读写必需)
8apt-get update && apt-get install -y ffmpeg
9ffmpeg -version警告
⚠️ 若 git clone 很慢,可临时走代理或使用 Gitee 上的镜像仓库。依赖安装过程中若某个包编译失败,先确认 gcc、g++、make 已安装(apt-get install -y build-essential)。
A4. 下载预训练权重(国内走 hf-mirror)
权重托管在 HuggingFace,国内直接下载经常超时,务必先设镜像端点:
1# 国内加速关键:设置 HF 镜像
2export HF_ENDPOINT=https://hf-mirror.com
3
4pip install -U "huggingface_hub[cli]"
5
6# 下载权重到 pretrained_weights 目录(约十几 GB)
7huggingface-cli download KwaiVGI/LivePortrait \
8 --local-dir pretrained_weights \
9 --exclude "*.git*" "README.md" "docs"
10
11# 确认下载完整
12du -sh pretrained_weights
13ls pretrained_weights提示
💡 备选:如果 hf-mirror 也不稳定,可以到 ModelScope 搜索社区同步的同名权重,下载后放到同样的 pretrained_weights 目录结构中。
A5. 验证 GPU 可用
1python -c "import torch; print('CUDA 可用:', torch.cuda.is_available()); print('显卡:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else '无')"必须看到 CUDA 可用: True。若为 False,说明 A1/A2 的 PyTorch 版本装错了,回到那一步重新装,后面的问题都源于此。
A6. 启动 Gradio 界面
1cd /opt/LivePortrait
2conda activate LivePortrait
3
4# 人类模式
5python app.py
6
7# 动物模式(需要额外编译 X-Pose 依赖)
8python app_animals.py终端会输出访问地址,默认是 http://127.0.0.1:7860。
在服务器上运行需要对外访问时:
1# 监听所有网卡 + 指定端口
2python app.py --server-name 0.0.0.0 --server-port 7860界面分为三块:
| 区域 | 作用 |
|---|---|
| 源图像上传区 | 上传要让它动起来的那张照片 |
| 驱动视频上传区 | 上传提供表情与动作的参考视频,或用内置模板 |
| 参数设置区 | 调整驱动强度、裁剪方式、输出分辨率等 |
第一次使用建议:先点两处「Examples」里的示例文件和示例驱动视频,直接点生成跑通一遍,确认整条链路正常后,再换成自己的素材 —— 这样出问题能快速区分是素材问题还是环境问题。
A7. 命令行推理(适合批量)
界面验证通过后,用命令行做批量生产:
1python inference.py \
2 -s assets/examples/source/s9.jpg \
3 -d assets/examples/driving/d0.mp4 \
4 --output_path output.mp4| 参数 | 作用 |
|---|---|
-s | 源图像路径,支持图片或视频 |
-d | 驱动文件路径,支持 mp4 或 .pkl 动作模板 |
--output_path | 输出视频路径 |
生成的视频默认落在项目目录下的 animations 目录,包含原始尺寸与适配尺寸两个版本。
提示
💡 批量技巧:驱动视频可以复用同一个 .pkl 模板。先把一段标准口播动作做成模板,之后换不同的源图即可批量产出,比每次都传整段视频快得多。
路径 B:Docker 容器部署(环境隔离更干净)
警告
⚠️ 说明:LivePortrait 官方并未发布维护中的官方镜像,容器路径需要自己基于 PyTorch 基础镜像构建。好处是环境可复现、不污染宿主机;代价是首次构建要花一些时间,且遇到问题需要进容器排查。
B1. 安装 NVIDIA Container Toolkit
1distribution=$(. /etc/os-release; echo $ID$VERSION_ID)
2curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
3curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
4 sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
5 tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
6
7apt-get update
8apt-get install -y nvidia-container-toolkit
9nvidia-ctk runtime configure --runtime=docker
10systemctl restart docker验证容器能否看到显卡(这一步没通过,后面全白搭):
1docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smiB2. 用 compose 起服务
1mkdir -p /opt/liveportrait && cd /opt/liveportrait
2
3cat > Dockerfile <<-'EOF'
4FROM pytorch/pytorch:2.3.0-cuda11.8-cudnn8-runtime
5
6WORKDIR /app
7
8RUN apt-get update && apt-get install -y git ffmpeg libgl1 libglib2.0-0 && rm -rf /var/lib/apt/lists/*
9
10RUN git clone https://github.com/KwaiVGI/LivePortrait.git /app/LivePortrait
11
12WORKDIR /app/LivePortrait
13RUN pip install --no-cache-dir -r requirements.txt
14
15ENV HF_ENDPOINT=https://hf-mirror.com
16EXPOSE 7860
17
18CMD ["python", "app.py", "--server-name", "0.0.0.0", "--server-port", "7860"]
19EOF
20
21cat > docker-compose.yml <<-'EOF'
22version: '3.8'
23
24services:
25 liveportrait:
26 build: .
27 image: liveportrait:local
28 container_name: liveportrait
29 restart: unless-stopped
30 ipc: host
31 ports:
32 - "127.0.0.1:7860:7860"
33 volumes:
34 - ./pretrained_weights:/app/LivePortrait/pretrained_weights
35 - ./animations:/app/LivePortrait/animations
36 shm_size: '16gb'
37 environment:
38 - HF_ENDPOINT=https://hf-mirror.com
39 deploy:
40 resources:
41 reservations:
42 devices:
43 - driver: nvidia
44 count: all
45 capabilities: [gpu]
46EOF
47
48docker compose build
49docker compose up -d
50docker compose logs -f liveportrait警告
⚠️ shm_size: '16gb' 不能省。PyTorch 的 DataLoader 默认用共享内存,容器默认只有 64MB,处理视频数据时很容易崩,报错通常是难以理解的 worker 被杀。
权重怎么放:在宿主机把 A4 那一步下载的权重放进 ./pretrained_weights,容器通过挂载读取,避免每次重建都重新下载十几 GB。
B3. 两种路径怎么选
| 维度 | conda 源码 | Docker |
|---|---|---|
| 排障直观度 | ⭐ 直接看报错 | 需进容器一层 |
| 环境复现 | 依赖具体机器 | ⭐ 镜像固化的可复现 |
| 污染宿主机 | 会 | ⭐ 不会 |
| 首次耗时 | 中 | ⭐ 构建较慢 |
| 适合场景 | 调试、改参数、开发 | 交付、多机器复制 |
提示
💡 推荐组合:先用 conda 源码跑通一次,确认环境与权重没问题,再用 Docker 把环境固化下来复制到其他机器。
Nginx 反向代理 + HTTPS + 鉴权
Gradio 界面默认是无鉴权的,直接暴露公网等于把你的 GPU 开放给大家免费使用。
1apt-get install -y nginx certbot python3-certbot-nginx apache2-utils
2
3# 生成密码文件(会提示输入密码)
4htpasswd -c /etc/nginx/.htpasswd portrait
5
6cat > /etc/nginx/sites-available/liveportrait <<-'EOF'
7server {
8 listen 80;
9 server_name portrait.yourcompany.com;
10
11 location / {
12 auth_basic "Restricted";
13 auth_basic_user_file /etc/nginx/.htpasswd;
14
15 proxy_pass http://127.0.0.1:7860;
16 proxy_set_header Host $host;
17 proxy_http_version 1.1;
18 # Gradio 的 WebSocket 必须升级协议
19 proxy_set_header Upgrade $http_upgrade;
20 proxy_set_header Connection "upgrade";
21 proxy_set_header X-Real-IP $remote_addr;
22 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
23 proxy_read_timeout 600s;
24 client_max_body_size 200m;
25 }
26}
27EOF
28
29ln -s /etc/nginx/sites-available/liveportrait /etc/nginx/sites-enabled/
30nginx -t && systemctl reload nginx
31
32certbot --nginx -d portrait.yourcompany.com警告
⚠️ WebSocket 那两行必须保留。Gradio 依赖 WebSocket 推送进度,缺了会出现「界面能打开但点了没反应」。
也可以用 Gradio 自带的鉴权,启动时传入账号密码:
1python app.py --server-name 0.0.0.0 --server-port 7860 --auth admin:your-strong-password成本控制:GPU 是最容易烧钱的坑
⚠️ 最重要的一条:云上关机不停费。只有在控制台执行「销毁/退还」才停止计费,在系统里关机或停容器,账单依然在走。
| 策略 | 说明 |
|---|---|
| 用按量计费 | 适合验证与间歇性批量生产,用完立刻销毁 |
| 转包年包月 | 只有长期高频使用才划算,先按量跑一周算清楚成本再决定 |
| 竞价/抢占式实例 | 便宜很多,但会被回收,只适合能容错的批处理 |
| 权重放 COS | 避免每次新开实例都重新下载十几 GB |
| 跑完立即销毁 | 最重要的一条,写在你的操作清单第一行 |
1# 收工前确认 GPU 是否还有进程占着(有进程说明别急着销毁)
2nvidia-smi
3
4# 确认实例未在跑任务后,到腾讯云控制台执行「销毁」故障排查表
| # | 症状 | 可能原因 | 解决方案 |
|---|---|---|---|
| 1 | nvidia-smi: command not found | 选了普通镜像非 GPU 镜像 | 控制台重装系统选 GPU 驱动版本,或手动装驱动 |
| 2 | torch.cuda.is_available() 返回 False | PyTorch 的 CUDA 版本与驱动不匹配 | 用 nvcc -V 确认版本,重装对应 cu118 或 cu121 的 PyTorch |
| 3 | nvcc: command not found | 只装了驱动没装 CUDA Toolkit | 装 CUDA Toolkit,或用 GPU 镜像自带的运行时版本 |
| 4 | git clone 极慢或超时 | 直连 GitHub 受限 | 走代理或用国内镜像仓库 |
| 5 | pip install 某个包编译失败 | 缺编译工具 | apt-get install -y build-essential |
| 6 | 权重下载卡住/超时 | 没设 HF 镜像 | export HF_ENDPOINT=https://hf-mirror.com 后重试 |
| 7 | 权重下载完但报文件缺失 | 下载不完整 | 重新执行 download 命令;确认磁盘空间充足 |
| 8 | CUDA out of memory | 显存不足 | 缩短驱动视频;降低源图分辨率;换更大显存实例 |
| 9 | 容器内找不到 GPU | 没装 Container Toolkit | 安装后 nvidia-ctk runtime configure 并重启 docker |
| 10 | compose 启动报 no GPU device | 没声明 GPU 资源 | 加 deploy.resources.reservations.devices 段落 |
| 11 | DataLoader 崩 / worker 被杀 | shm 太小 | 加 --shm-size 16g 或 compose 的 shm_size |
| 12 | 界面能打开但按钮无响应 | 缺 WebSocket 升级 | Nginx 加 Upgrade 与 Connection 两行 |
| 13 | 7860 端口访问不了 | 两层防火墙 | 腾讯云控制台安全组 + 系统 ufw 都要放行 |
| 14 | ffmpeg: command not found | 没装 ffmpeg | apt-get install -y ffmpeg |
| 15 | animal 模式启动失败 | X-Pose 依赖未编译成功 | 确认 CUDA 与编译工具齐全;人类模式不受影响可先用 |
| 16 | 生成视频没有声音 | 原视频音轨未合成 | LivePortrait 主要生成画面;音轨需另行用 ffmpeg 合成 |
| 17 | 磁盘很快占满 | 输出视频积累 | 定期清理 animations,或把输出目录挂到数据盘 |
| 18 | 账单意外高 | 只关机没销毁实例 | 控制台执行销毁;关机不停费是 GPU 新手最大成本坑 |
总结
通过本文,你在腾讯云 GPU 实例上完成了 LivePortrait 国产数字人的私有化部署,得到了一套照片即可驱动的视频生成服务。
| 环节 | 关键点 |
|---|---|
| 选型 | 显存是第一约束;16GB 起步,视频越长越吃显存 |
| 环境 | PyTorch 的 CUDA 版本必须与驱动匹配,is_available() 为 True 才算通 |
| 权重 | 国内务必设 HF_ENDPOINT 走 hf-mirror,否则下载基本超时 |
| 使用 | 先用官方 Examples 跑通一遍,再换自己的素材,便于区分素材问题还是环境问题 |
| 安全与成本 | Gradio 默认无鉴权必须加防护;关机不停费,跑完必须销毁 |
四条落地建议:
- 先用示例素材跑通再做自己的 —— 官方 Examples 是一个已知正确的基线,跑不通说明是环境问题,跑通了才是素材或参数问题。
- 把驱动视频做成模板复用 —— 把一段标准口播动作存成
.pkl,之后换源图即可批量出片,效率比每次传视频高一个量级。 - 权重目录一定要挂载出来 —— 十几 GB 的权重如果留在容器里,每次重建都要重新下载,非常浪费时间和流量。
- 养成收工即销毁的习惯 —— GPU 是按秒计费的,忘记销毁一次的成本可能比整轮验证还高。
现在挑一张人物照片和一段口播视频,跑出第一条属于你自己的数字人视频 —— 你会发现国产开源方案在「不需要建模也不需要训练」这件事上,已经把门槛降到了个人开发者能玩得起的程度。
常见问题
Q必须要 GPU 吗?CPU 能不能跑?
不建议纯 CPU 跑。LivePortrait 的人像驱动涉及多个神经网络的串行推理,CPU 上生成几秒视频通常要几十分钟甚至更久,基本不具备实用性。官方推荐最低 8GB 显存(如 RTX 3070 档),实测 16GB 显存体验明显更好,24GB 可以流畅处理更长视频。腾讯云 GPU 实例按量计费,用完立即销毁,验证一把的成本很低。
QLivePortrait 和其他数字人方案比有什么优势?
最大的优势是「不需要建模也不需要训练」。传统数字人方案要么需要 3D 建模资产,要么需要为目标人物采集素材做微调;LivePortrait 给定一张照片加一段驱动视频就能出结果,属于即时可用型。它由快手视觉团队联合高校开源,效果自然,且支持显存友好的拼注重定向。如果你追求的是「快速批量产出口播视频」而不是「高度定制的虚拟偶像」,它是最实用的开源选择。
Q跑完不用了要怎么省钱?
这是 GPU 新手最容易忽略的成本坑:**在云上关机不停费**。腾讯云 GPU 实例只有在控制台执行「销毁/退还」后才停止计费,仅仅在操作系统里关机或停止 Docker 容器,账单仍在走。所以正确做法是用按量计费实例,跑完立即在控制台销毁;如果需要保留环境,把权重目录放到 COS 对象存储,新实例启动时挂载下来即可,避免每次重装都重新下载。