还是 FaceFusion 的问题,我在用 FaceFusion 的时候,发现速度好慢,就是比 CPU 快不了多少,我一开始以为就是这样,看了眼别人的演示发现并不是这样的。

问题描述

首先,终端里会显示如下内容:

2025-01-31 12:30:59.244128068 [E:onnxruntime:Default, provider_bridge_ort.cc:1862 TryGetProviderInfo_CUDA] /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1539 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_cuda.so with error: libcudnn.so.9: cannot open shared object file: No such file or directory

请添加图片描述

出现这个是因为没有安装 Nvidia cuDNN,或者是 cuDNN 的版本不对。

需要注意,如果这个问题不是每次都出现,也就是每次选择“cuda”然后跑都会出现这个问题,那么可能只是偶发问题,重启一下 FaceFusion 就好了。

此外,FaceFusion 速度只有一秒 1~2 帧。nvidia-smi显示利用率只有45%,显存占用也只有 500 MB。这种情况要么是没选“cuda”,要么就是没装好。

我咋知道安没安装?版本如何呢?

ONNX Runtime、cuDNN 和 CUDA对应的情况请见:Requirements - CUDA Execution Provider - ONNX Runtime,比如 CUDA 12.x 的如下:
请添加图片描述

从上面的错误信息可以看到,出错的是 cuDNN。这玩意没有常用的方法来检查安没安装,就像python --version这种方法。我在网上找的方法也没用,还是靠自己了。

首先,安装 cuDNN 的时候会安装一个示例项目,供你测试,如果你之前没安装过,那么可以通过找这个文件看看有没有安装。

$ ls /usr/src/ | grep cudnn
cudnn_samples_v9

其次,如果你记不清安装过没有,可以用下面的方法找到安装位置。

$ dpkg -L libcudnn9-samples
/.
/usr
/usr/share
/usr/share/doc
.....

这里你其实通过目录名cudnn_samples_v9看出来版本是9了,但是你可能还是想知道其他办法。命令行的方法我没找到,但是有一个 Pytorch 的,我觉得你都搞模型了设备上大概率也装了 Pytorch,所以这个方法实用性应该也挺高的。

import torch
print(torch.backends.cudnn.m.is_available())
print(torch.backends.cudnn.version())

输出如下:

请添加图片描述

可以看到 cuDNN 已安装,版本为 9.0.1。

如何安装cuDNN

如果你没安装 cuDNN 的话,请和驱动一样去官方下载,因为可能会因为系统版本较老等问题,导致下载的版本有问题。官方链接为:cuDNN Downloads

这真的不是废话,我就是因为用包管理安装的,折腾了一下午。
请添加图片描述

安装方法下面有描述,也不用你自己查。

请添加图片描述

安装好之后的效果

此时,速度达到一秒 10~20 帧。nvidia-smi显示利用率也稳定 90% 以上,显存占用到达了 5000 MB。如下:

请添加图片描述

请添加图片描述

这个速度就能接受了。

希望能帮到有需要的人~

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐