FaceFusion 在更新到2.6.0时明确提到“Support for Intel Arc using the OpenVINO execution provider”,通过OpenVINO支持I卡,其实好几个版本前就支持了,既然这次在更新日志中着重强调,我就试试吧,这一试人就快逝了。又是一个有坑的项目,下面我把部署的步骤写写,哪里有坑再讲讲。
FaceFusion 这个项目其实相当好部署,就是官方教程给得太简单了。
安装之前需要电脑已经安装了Visual Studio 2022 、git和python或者conda。
在需要安装FaceFusion 的文件夹资源管理器地址栏中输入CMD或者powershell打开对应的命令行工具,然后依次输入以下命令(我以conda创建虚拟环境演示,括号内的不用复制):
cd facefusion (进入facefusion 文件夹)
conda create -p ./venv python=3.10 (创建虚拟环境)
conda activate ./venv (激活虚拟环境)
conda install conda-forge::openvino=2023.1.0或pip install openvino==2023.1.0(安装openvino-2023.1.0,我测试过最新的几个版本,都用不了)
python install.py --onnxruntime openvino --skip-conda (安装剩余依赖并装上onnxruntime-openvino,这个版本对应的是1.15.0) conda install FFmpeg (安装FFmpeg)
到此FaceFusion项目就部署完了,相当的简单,步骤很少,接下来坑就出来了。
选择设备 --execution-device-id (默认是0)
选择加速方式 --execution-providers (默认是CPU,不过UI中也能改)
激活虚拟环境后输入python run.py 对于大多数设备就可以用了,但是openvino就不行,在界面选中openvino后上传了参考图就会报错“EP Error C:\Users\intel\Documents\saurabh\onnxruntime\onnxruntime\core\providers\openvino\openvino_execution_provider.h:146 __cdecl onnxruntime::OpenVINOExecutionProviderInfo::OpenVINOExecutionProviderInfo(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,void *,bool,bool) Invalid device string: 1_FP32” 运行也会切换到CPU。开始我一直以为是设备没选对,就去--execution-device-id 0/1/2/3的试,发现还是不行,我又想是不是openvino版本问题,然后我又按照官方的对照表,重装了openvino和onnxruntime-openvino,还是不行,网上搜了个遍也没找到解决办法,最后我把报错代码发给文心一言,马上就发现问题根源。
好了,啰嗦那么多,下面着重讲讲原因:openvino调用设备标识不是我们常用的 0,1,2,是CPU、GPU.0、GPU.1
输入 python -c "from openvino.runtime import Core; print(Core().available_devices)"
查询openvino支持的设备,启动时--execution-device-id 后面填上想用的设备,一般是GPU.0。至此最大的坑就填上了,仓库作者代码中没对openvino调用设备提醒也没修改代码,怀疑根本没测试,也没人提出问题,I卡用的人太少了。
python run.py --execution-device-id GPU.0 --execution-providers openvino 1、FaceFusion需要非常多的模型,如果没有梯子,最好是去找找其他地方给的模型包,但是一次性下载完会很占空间,其实也没多大,10G多。另一个就是改源代码,下载都是用的FaceFusion的github仓库地址,去facefusion文件夹中把代码中的链接替换成镜像链接就可以,涉及文件比较多,我就不一一列举了,一个一个打开看。
2、跑了几遍,FaceFusion-openvino并不能让A770全速运行,大多数时候都只有20%-30%,大家可以多试试多线程,后续优化空间很大。
3、修改缓存文件路径:如果只是跑图片,其实影响不会很大,但是处理过视频的都清楚,把一个视频分解成帧将占用大量的硬盘容量,3分钟的1080P视频分解出来有10G,所以默认在C盘不是个好选择,或者说放在固态硬盘都不是个好选择。我没找到FaceFusion设置缓存路径的参数或者相应虚拟环境的指令,在看其他项目时找到一个可以修改缓存路径的代码
打开facefusion文件夹的core.py,在第34行复制如下代码,即可把缓存文件改在项目根目录Cache文件夹中
script_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
tempfile.tempdir = os.path.join(script_dir, 'Cache')
其中'Cache'可以修改为其他路径,这个可以修改到机械硬盘中。
4、制作了一个整合包,放了汉化补丁,不含模型,修改了模型下载地址,启动会下载模型,用最新的7-zip解压,双击启动.bat,启动脚本设置设备为GPU.0,按上述使用方法确认本地GPU标识,判断是否需要修改。
2024.6.17修改: 通过修改组件代码实现视频编码qsv加速(intel显卡),不想重新打包,就把组件上传了,下载下面链接中的3个py文件,复制进facefusion文件夹替换即可。暂时只添加了h264和 hevc,需要其他编码格式的可自行参看代码替换修改。然而视频帧提取我并没有找到硬件加速的方法,目前依然是CPU运行,如果CPU不太好就建议提取jpg格式的吧。
注:本文及整合包仅供学习和娱乐之用,请遵守法律法规,禁止用于非法用途。