当前位置: 首页 > news >正文

FaceFusion Windows 本地 .venv 部署实战教程

FaceFusion Windows 本地.venv部署实战教程



目录

FaceFusion Windows 本地 .venv 部署实战教程

前言

一、准备条件

二、创建项目内 .venv

三、安装 PyTorch CUDA 版本

四、验证 PyTorch 是否成功启用 GPU

五、安装 FaceFusion 基础依赖

​编辑

六、强制安装 CUDA 13 线路的 ONNX Runtime

七、安装 TensorRT

八、模型共享,减少磁盘占用

九、配置默认输出目录

十、启动 FaceFusion

十一、命令行测试示例

十二、常见坑

1. 没有激活 .venv

2. install.py 可能覆盖你手动安装的 ONNX Runtime

3. FaceFusion 报 choose an image for the source!

4. 看到 CUDAExecutionProvider 不代表 TensorRT 一定已启用

十三、最终验证清单

结论

参考资料



前言

https://github.com/facefusion/facefusion

这篇文章记录一次可复现的 FaceFusion 本地部署过程,特点是:

  • 系统:Windows 11
  • Python 环境:项目内.venv
  • 不使用 Conda 环境管理
  • GPU 加速:CUDA + ONNX Runtime + TensorRT
  • 适合希望本地长期使用、并且不想依赖 Conda 的场景

本文基于一次实际跑通的环境整理,相关信息如下:

  • FaceFusion 版本:3.6.1
  • Python 版本:3.12.11
  • 显卡:NVIDIA GeForce RTX 3090
  • 显卡驱动:591.86
  • ONNX Runtime:1.25.1
  • PyTorch:2.10.0+cu130
  • 系统 CUDA:13.1
  • cuDNN:9.12.0




一、准备条件

部署前建议先确认以下条件:

  • Windows 机器上已经安装 NVIDIA 显卡驱动
  • nvidia-smi可以正常执行
  • 已安装 Python3.12 (推荐 EPGF 架构)
  • 已安装 Git

可先执行一次:

nvidia-smi

如果这里就报错,先解决显卡驱动问题,再继续后面的步骤。

EPGF 架构的使用提示:

EPGF 架构 环境配置规范(注释 + 代码格式)

# 确认当前 Python 版本 python -V # 切换到指定 Python 版本环境(conda) conda activate py312 # 创建项目本地虚拟环境(--copies 禁用符号链接,用于可能移动/拷贝的项目) python -m venv --copies .venv # 激活本地虚拟环境(Windows PowerShell) .\.venv\Scripts\Activate.ps1 # 退出父级 conda 环境,避免包冲突 conda deactivate # 升级 pip 到最新版,保证依赖安装稳定 python.exe -m pip install --upgrade pip

【EPGF 白皮书】路径治理驱动的多版本 Python 架构—— Windows 环境治理与 AI 教学开发体系




二、创建项目内.venv

# 克隆项目 git clone https://github.com/facefusion/facefusion.git

进入项目根目录后,创建虚拟环境:

python -m venv --copies .venv

这里使用--copies,目的是避免虚拟环境大量使用符号链接。对于可能被移动、拷贝或打包迁移的项目,这个参数更稳。

创建完成后激活环境:

.\.venv\Scripts\Activate.ps1

升级pip

python.exe -m pip install --upgrade pip

建议顺手确认当前解释器确实来自项目内.venv

python -c "import sys; print(sys.executable)"

输出路径应类似:

K:\PythonProjects5\facefusion\.venv\Scripts\python.exe




三、安装 PyTorch CUDA 版本

这一步建议优先单独安装 PyTorch GPU 版,用它来验证显卡、CUDA 和 cuDNN 是否正常。

安装命令:

pip install torch==2.10.0 torchvision==0.25.0 torchaudio==2.10.0 --index-url https://download.pytorch.org/whl/cu130

实际验证通过的版本如下:

  • torch 2.10.0+cu130
  • torchvision 0.25.0
  • torchaudio 2.10.0




四、验证 PyTorch 是否成功启用 GPU

进入 Python:

python

执行下面这段代码:

验证PyTorch深度学习环境Torch和CUDA还有cuDNN是否正确配置的命令

# 验证 import torch # 导入 PyTorch 库 print("PyTorch 版本:", torch.__version__) # 打印 PyTorch 的版本号 # 检查 CUDA 是否可用,并设置设备("cuda:0" 或 "cpu") device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") print("设备:", device) # 打印当前使用的设备 print("CUDA 可用:", torch.cuda.is_available()) # 打印 CUDA 是否可用 print("cuDNN 已启用:", torch.backends.cudnn.enabled) # 打印 cuDNN 是否已启用 # 打印 PyTorch 支持的 CUDA 和 cuDNN 版本 print("支持的 CUDA 版本:", torch.version.cuda) print("cuDNN 版本:", torch.backends.cudnn.version()) # 创建两个随机张量(默认在 CPU 上) x = torch.rand(5, 3) y = torch.rand(5, 3) # 将张量移动到指定设备(CPU 或 GPU) x = x.to(device) y = y.to(device) # 对张量进行逐元素相加 z = x + y # 打印结果 print("张量 z 的值:") print(z) # 输出张量 z 的内容

如果输出中满足这些条件,说明 PyTorch GPU 路线已经通了:

  • 设备: cuda:0
  • CUDA 可用: True
  • cuDNN 已启用: True




五、安装 FaceFusion 基础依赖

FaceFusion 自带了安装脚本。由于本文走的是本地.venv,不是 Conda,所以使用:

python install.py --onnxruntime cuda --skip-conda

这一步会安装项目的大部分 Python 依赖。

需要注意的是:项目默认安装的onnxruntime-gpu版本不一定是最适合当前 CUDA 路线的版本,所以后面还要手动覆盖一次。




六、强制安装 CUDA 13 线路的 ONNX Runtime

如果你的环境和本文一样,是实际跑通了PyTorch cu130,那么建议把onnxruntime-gpu强制切到 CUDA 13 对应源:

pip install --force-reinstall --no-cache-dir onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-13/pypi/simple/

安装完成后验证:

python -c "import onnxruntime as ort; print(ort.__version__); print(ort.get_available_providers())"

本次验证通过的输出是:

1.25.1 ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']

如果你至少看到了:

CUDAExecutionProvider

就说明 ONNX Runtime 已经可以使用 CUDA。




七、安装 TensorRT

为了让 FaceFusion 支持更高优先级的推理后端,可以继续安装 TensorRT:

pip install tensorrt --extra-index-url https://pypi.nvidia.com

安装完成后再验证一次:

python -c "from facefusion.execution import get_available_execution_providers; print(get_available_execution_providers())"

本次环境中的输出为:

['cuda', 'tensorrt', 'cpu']

这说明 FaceFusion 这一层已经能识别:

  • cuda
  • tensorrt
  • cpu

到这里,核心 GPU 加速链路就已经通了。




八、模型共享,减少磁盘占用

基于 EPGF 架构的环境迁移复现部署 及 基于符号链接的模型共享解决方案——FaceFusion 3.3.2与3.4.1 模型共享方案:100GB 空间节省实践

如果你在别的盘里已经有一份 FaceFusion 模型目录,可以通过目录符号链接复用,避免重复下载和占用空间。

例如,把:

F:\PythonProjects1\facefusion\.assets\models

共享给当前项目:

New-Item -ItemType SymbolicLink -Path ".assets\models" -Target "F:\PythonProjects1\facefusion\.assets\models"

如果.assets目录还不存在,可以先创建:

New-Item -ItemType Directory -Path ".assets"

验证方式:

Get-Item ".assets\models" | Format-List FullName,LinkType,Target

如果看到LinkType : SymbolicLink,说明链接创建成功。




九、配置默认输出目录

建议在项目根目录下创建一个outputs文件夹,用于统一保存导出结果。

先创建目录:

New-Item -ItemType Directory -Path "outputs"

然后编辑项目根目录下的facefusion.ini,把:

[paths] output_path =

改成:

[paths] output_path = outputs

这样后续默认输出会落到项目内的outputs目录,便于管理。




十、启动 FaceFusion

浏览器模式启动:

python facefusion.py run --open-browser

启动后,上传源图和目标图,执行一次实际处理,能得到正常结果就说明部署成功。




十一、命令行测试示例

如果你想先用命令行验证,而不是直接打开 UI,需要注意face_swapper默认必须同时提供源图目标图

示例:

python facefusion.py headless-run --execution-providers tensorrt cuda -s source.jpg -t target.jpg -o outputs\result.jpg

说明:

  • tensorrt放前面,表示优先尝试 TensorRT
  • cuda放后面,表示 TensorRT 不适用时回退到 CUDA




十二、常见坑

1. 没有激活.venv

如果你没有激活项目内.venv,可能会误用系统或其他环境里的 Python,导致:

  • numpy导入失败
  • onnxruntime版本不一致
  • torchonnxruntime不在同一个环境里

每次操作前建议先确认:

python -c "import sys; print(sys.executable)"



2.install.py可能覆盖你手动安装的 ONNX Runtime

本文为了适配 CUDA 13,执行过一次:

pip install --force-reinstall --no-cache-dir onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-13/pypi/simple/

如果后面再次运行项目原始安装脚本,有可能把它换回默认版本。遇到这种情况,重新执行上面的强制安装命令即可。



3. FaceFusion 报choose an image for the source!

这通常不是 CUDA 问题,而是你运行headless-run时只传了目标图,没有传源图。

正确示例:

python facefusion.py headless-run --execution-providers cuda -s source.jpg -t target.jpg -o outputs\result.jpg



4. 看到CUDAExecutionProvider不代表 TensorRT 一定已启用

要确认 FaceFusion 是否识别到 TensorRT,请执行:

python -c "from facefusion.execution import get_available_execution_providers; print(get_available_execution_providers())"

如果输出中有tensorrt,才表示 FaceFusion 这一层也看到了 TensorRT。




十三、最终验证清单

部署完成后,至少确认以下几点:

  • .venv已激活
  • python -c "import torch; print(torch.cuda.is_available())"输出True
  • python -c "import onnxruntime as ort; print(ort.get_available_providers())"中有CUDAExecutionProvider
  • python -c "from facefusion.execution import get_available_execution_providers; print(get_available_execution_providers())"中有cuda
  • 如需 TensorRT,加上确认输出里有tensorrt
  • python facefusion.py run --open-browser可以正常打开页面并完成一次处理




结论

如果你的目标是在 Windows 上,以本地.venv的方式部署 FaceFusion,而不是依赖 Conda,那么这套流程是可以跑通的:

  • python -m venv --copies .venv创建独立环境
  • 先验证PyTorch + CUDA
  • 再安装 FaceFusion
  • 手动切换到可用的onnxruntime-gpu CUDA 13
  • 补装 TensorRT
  • 最后通过 UI 或命令行做一次实测

部署成功后,这套环境已经具备:

  • PyTorch GPU 加速
  • ONNX Runtime CUDA 加速
  • TensorRT 可选加速
  • 模型目录跨项目共享
  • 项目内统一输出目录

对于需要长期维护、希望项目目录结构清晰、并且不想引入 Conda 的用户,这是一条比较稳的 Windows 本地部署路线。




参考资料

https://docs.facefusion.io/

基于 EPGF 架构的环境迁移复现部署 及 基于符号链接的模型共享解决方案——FaceFusion 3.3.2与3.4.1 模型共享方案:100GB 空间节省实践

FaceFusion 3.4.1 版本:[FACEFUSION.CORE] Copying image failed 大分辨率图像处理失败的解决方案与 Bug 探究

基于 EPGF 架构理念的 FaceFusion 3.4.1 本地 .venv 部署教程(非 Conda 环境部署优化版)

【笔记】Facefusion3.3.2 之 NSFW 检测屏蔽测试

【笔记】FaceFusion 3.3.0 CUDA GPU 环境 Docker 构建与运行全流程记录

怎么使用嵌套虚拟环境实现项目部署之virtualenv嵌套conda绕开安装环境检测实现.venv部署facefusion

http://www.jsqmd.com/news/729819/

相关文章:

  • 实战避坑:支付宝周期扣款签约回调的坑,我们踩了,你别再踩了(附Java代码)
  • 深入UE5蓝图Cast节点源码:手把手教你理解类型转换背后的C++魔法
  • SpecVibe:基于对比学习的音频-文本跨模态对齐技术详解
  • 别再乱改inittab了!嵌入式Linux开机自启的正确姿势:BusyBox init + /etc/init.d/脚本详解
  • 别再只看Ic了!IGBT选型避坑指南:从RBSOA到有源钳位,手把手教你读懂数据手册
  • Weka机器学习工具:从数据预处理到模型部署全流程指南
  • 研华PCI-1285运动控制卡C#开发避坑指南:从DLL导入到异常处理
  • 保姆级避坑指南:在CentOS 7上从零搭建Hadoop 3.1.4集群(含防火墙、免密、时间同步全流程)
  • 扩散模型中多主体生成的注意力优化技术FOCUS
  • 对比在ubuntu本地直接调用与通过taotoken聚合调用的便捷性体验
  • 刷ZJUT OJ别蛮干:巧用‘开关灯’问题理解算法思维与模拟题套路
  • JFrog Helm Charts 仓库深度解析:云原生制品管理一键部署指南
  • [具身智能-508]:系统熵增定律:为什么你的 AI 应用和企业一样,总是“越管越乱”?
  • 用PyTorch手写一个Transformer的Encoder:从理论到代码的保姆级实践
  • 从零开始设计一个CMOS运算放大器:手把手教你搞定一级运放(附完整设计步骤与仿真验证)
  • FPGA与PHY芯片的“握手”对话:深入剖析MDIO协议如何驱动千兆网口自协商
  • 从AttributeError聊起:Pandas的Series和NumPy的ndarray到底有啥区别?
  • 告别交叉调试:为你的ARM-Linux设备编译一个‘原生’GDB调试器(基于GDB-7.6.1)
  • 晶科能源:逆势中彰显龙头韧性,技术引领迈向高质量发展新阶段
  • 扫描件效果生成在线工具大汇总
  • 信创环境下,手把手教你用RPM包在CentOS 7上部署Nebula Graph 3.6.0单机版
  • 告别重启!用Hotswap Agent+DCEVM在JDK8和JDK11下实现真正的Java热部署(附IDEA插件配置避坑指南)
  • GRAG技术:精准图像编辑的注意力机制实践
  • [具身智能-515]:如何让windows power shell or Trae CN关联conda,且自动加载conda特定的环境?
  • RC振荡器频率校准与非线性修剪技术解析
  • LLM智能体安全评估与T-MAP框架的突破
  • 机器学习过拟合与欠拟合:诊断与解决方案
  • WordPress靶机渗透实战:从信息收集到脏牛提权的完整复现(附避坑指南)
  • 从set_drive到set_driving_cell:聊聊数字IC后端设计中输入驱动建模的演进与最佳实践
  • 感受 Taotoken 官方价折扣活动对 AI 应用开发成本的切实降低