CV-CUDA之依赖环境安装

CV-CUDA之依赖环境安装

CV-CUDA是NVIDIA和字节联合开发的GPU前后端处理加速库,该库能实现将图像、视频的预处理和后处理都加载到GPU上进行处理,大幅提高模型推理能力,缺点就是需要更多一点的显存占用。有兴趣想深入研究的建议看一下下面这两个官方的文档。

经过多次尝试安装,本文针对CV-CUDA环境的配置进行以下详尽的介绍,包括安装过程中存在的问题和方法等等。需要说明的是为了不影响本地环境和更好地适配NVIDIA对CV-CUDA环境的要求(对软件配置版本要求很高),本文通过docker镜像创建容器的方式对安装和编译环境进行测试。因为本文会先介绍一部分的docker容器创建过程,已经对docker镜像容器比较熟悉的小伙伴们可以自行跳过。

CUDA的版本官方要求11.8及以上(12.0以上没有进行过测试),本文在11.4的版本下进行配置也是可行的。

镜像容器的CUDA环境必须要和本地环境中的CUDA版本相对应,不然后面使用镜像中的CUDA就会报错。
报错情况如:CUDA error with code 45059568
No error string available

一、Docker镜像容器常用操作

1、创建镜像(这里使用了NVIDIA推荐的tensorrt + cuda11.7镜像,记得配置本地挂载路径和镜像路径):

docker run -it --gpus=all -v <local_mount_path>:<docker_mount_path> nvcr.io/nvidia/tensorrt:22.09-py3
  • –gpus=all:允许docker镜像容器使用GPU;
  • <local_mount_path>:本地挂载的路径;
  • <docker_mount_path>:Docker挂载路径;

参考:https://github.com/CVCUDA/CV-CUDA/tree/release_v0.2.x/samples

2、查看Docker镜像

docker images

3、查看容器运行情况和容器id等信息(下面保存容器需要用到)

docker ps -a

4、保存镜像容器

docker commit 要保存的容器id 镜像名称:版本号    # 保存镜像

5、进入正在运行的容器中

docker exec –it 容器id bash

6、其他操作

docker导入导出镜像文件:

把某个docker镜像保存到本地文件,命令如下

导出镜像

docker save -o 镜像名.tar 原始镜像名:版本号
如:sudo docker save -o /home/user/images/ubuntu_20.04.tar ubuntu:20.04

导入镜像

docker load -i ./xxx.tar

据官方的介绍This container comes with Ubuntu 20.04 with Python 3.8.10.,因此如果不是通过官网镜像进行配置的小伙伴们最好还是按这个要求来,可以减少一些繁琐的步骤。

二、CV-CUDA基本环境配置

按照官方的文档要求,有这些安装的包,有些包还是嵌套需要安装其他包,特别是VideoProcessingFramework(基于python)。

Recommended linux distros:
Ubuntu >= 20.04 (tested with 20.04 and 22.04)
WSL2 with Ubuntu >= 20.04 (tested with 20.04)
NVIDIA driver
Linux: Driver version 520.56.06 or higher
TensorRT == 8.5.2.2
NVIDIA Video Processing Framework (https://github.com/NVIDIA/VideoProcessingFramework)
Follow the instructions from Github (https://github.com/NVIDIA/VideoProcessingFramework/wiki/Building-from-source) to build it from source on Linux. VPF's dependencies include ffmpeg and NVIDIA's Video Codec SDK.
Python Packages:
torch == 1.13.0
torchvision == 0.14.0
torchnvjpeg (https://github.com/itsliupeng/torchnvjpeg)
av == 10.0.0

总的来说,要安装torch, torchvision, torchnvjpeg(基于C++), FFMPEG, x264和VideoProcessingFramework等等。

1、在docker中安装torch

pip install torch==1.13.0 torchvision==0.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

2、安装torchnvjpeg

git clone https://github.com/itsliupeng/torchnvjpeg.git
cd torchnvjpeg-main
python setup.py bdist_wheel
cd dist && pip install torchnvjpeg-0.1.0-xxxx-linux_x86_64.whl  
  • 如出现问题:
ImportError: libc10.so: cannot open shared object file: No such file or directory
  • 解决方法:
    libc10.so是基于pytorch生成的,因此需要先导入torch包,然后再导入依赖于torch的包

3、安装x264(ffmpeg要求)

cd /usr/local/ && mdkir x264    # 可根据自身需要更改安装路径
git clone https://code.videolan.org/videolan/x264 x264
cd x264
./configure --enable-shared --disable-asm --prefix=/usr/local/x264
make -j4 && make install
  • 如出现问题:
ERROR: x264 not found using pkg-config
  • 解决方法:安装pkg-config:
wget https://pkg-config.freedesktop.org/release/pkg-config-0.29.2.tar.gz
tar -xvf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2
./configure --with-internal-glib --prefix=/usr/local
make -j8 && make install
pkg-config --list-all|grep x264
  • 如出现问题:
ERROR: libx264 not found
  • 解决方法:
export PKG_CONFIG_PATH=/usr/local/x264/lib/pkgconfig   # you can write to /etc/profile
source /etc/profile

4、安装ffmpeg:

获取ffmpeg项目文件并配置:

cd /usr/local/
mkdir ffmpeg
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
cd ffmpeg
./configure --prefix=$(pwd)/build_x64_release_shared --disable-static --disable-stripping --disable-doc --enable-shared --enable-nonfree --enable-cuda --enable-cuda-nvcc --enable-gpl --enable-libx264 --enable-cuvid --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-x86asm --extra-libs=-ldl
  • $(pwd):是安装的文件路径,本文是安装到了/usr/local/ffmpeg这个路径下,读者可以根据自己的需要进行路径指定,如修改则下面所提到的相应路径也需进行修改;
  • –extra-cflags:指定cuda包括的头文件;
  • –extra-ldflags:指定cuda包括的库文件

编译安装:

make clean
make -j4 -s && make install

配置环境变量

vim ~/.bashrc
export PATH=/usr/local/ffmpeg/build_x64_release_shared/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/ffmpeg/build_x64_release_shared/lib:$LD_LIBRARY_PATH
source ~/.bashrc

添加库链接:

echo "/usr/local/ffmpeg/build_x64_release_shared/lib" >> /etc/ld.so.conf
ldconfig   # 更新

检查ffmpeg安装情况:

ffmpeg -hwaccels   # 检查硬件加速,有输出则正常
ffmpeg -codecs | grep cuvid   # 输出结果含有h264_cuvid和h264_nvenc即可硬件加速
  • 如出现问题:
ERROR: ffmpeg: error while loading shared libraries: libx264.so.164: cannot open shared object file: No such file or directory
  • 解决方法:
vim /etc/ld.so.conf

在文件内容后面加上x264的lib路径,比如这里安装到了/usr/local/x264/lib,保存退出
刷新配置ldconfig
再执行ffmpeg -version就可以了

  • 如出现问题:
ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec”
  • 解决方法:
git clone http://git.videolan.org/git/ffmpeg/nv-codec-headers.git
make
sudo make install

5、安装并编译VideoProcessingFramework

获取VideoProcessingFramework项目文件:

git clone https://github.com/NVIDIA/VideoProcessingFramework.git
cd VideoProcessingFramework
mkdir -p build 
cd build

apt安装依赖包,一般在装ffmpeg时就已装好:

apt install -y \
          libavfilter-dev \
          libavformat-dev \
          libavcodec-dev \		
          libswresample-dev \
          libavutil-dev
apt install libnvidia-encode-515 libnvidia-decode-515    # 515需换成本地对应的驱动版本号 

下载sdk:

访问https://developer.nvidia.com/nvidia-video-codec-sdk/download进行下载
复制下载得到的sdk文件夹到/usr/local/文件夹下。(复制的路径可以按照需要进行修改,需要记住,下面会用到

cp -r Video_Codec_SDK /usr/local/   # 路径可以按照需要进行修改,需要记住,下面会用到
1、使用C++源码进行编译的方式:

(1)配置:

cd build 
cmake .. \
> DVIDEO_CODEC_SDK_DIR="/usr/local/Video_Codec_SDK"\
> DGENERATE_PYTHON_BINDINGS:BOOL="1"\
> DFFMPEG_DIR:PATH="/usr/local/ffmpeg/build_x64_release_shared/"\
> CMAKE_INSTALL_PREFIX:PATH="/usr/local/videoprocessingframework/install"\
> DAVUTIL_INCLUDE_DIR="/usr/local/ffmpeg/build_x64_release_shared/include"\
> DAVCODEC_INCLUDE_DIR="/usr/local/ffmpeg/build_x64_release_shared/include"\
> DAVFORMAT_INCLUDE_DIR="/usr/local/ffmpeg/build_x64_release_shared/include"\
> DAVUTIL_LIBRARY="/usr/local/ffmpeg/build_x64_release_shared/lib/libavutil.so"\
> DAVCODEC_LIBRARY="/usr/local/ffmpeg/build_x64_release_shared/lib/libavcodec.so"\
> DAVFORMAT_LIBRARY="/usr/local/ffmpeg/build_x64_release_shared/lib/libavformat.so"\
> DSWRESAMPLE_LIBRARY="/usr/local/ffmpeg/build_x64_release_shared/lib/libswresample.so"

(2)编译并安装

make -j8 && make install 
2、使用pip进行编译的方式:
pip3 install git+https://github.com/NVIDIA/VideoProcessingFramework
# or if you cloned this repository
pip3 install .
  • 如果发生pybind11包安装错误,大部分是因为没有提前用pip(国内源)进行安装导致的,提前pip install pybind11 就可以了。

  • 如果出现其他跟cmake有关的问题,检查是否有安装,安装操作完之后千万要记得删除pyproject.toml文件。

安装PytorchNvCodec(可选)

pip install src/PytorchNvCodec  # install Torch extension if needed (optional), requires "torch" to be installed before
  • 如出现问题:
-- Checking for modules 'libavfilter>=7.110.100;libavformat>=58.76.100;libavcodec>=58.134.100;libswresample>=3.9.100;libavutil>=56.70.100'
--   No package 'libavfilter' found
--   No package 'libavformat' found
--   No package 'libavcodec' found
--   No package 'libswresample' found
--   No package 'libavutil' found
  • 解决方法:
- export PKG_CONFIG_PATH=/usr/local/ffmpeg/build_x64_release_shared/lib/pkgconfig

如果导入之后还是提示某些包找不到,问题解决不了,可以使用pip3 install .进行安装。

测试安装是否成功:

cd ../samples
python SampleDecode.py -g 0 -e ../install/demo.mp4 -r ../install/demo_result.h264
  • -g 0:代表指定GPU设备编号为0运行程序;

  • -e:代表编码的文件;

  • -r: 代表解码后的文件

  • 如出现问题:

ModuleNotFoundError: No module named 'PyNvCodec'
  • 解决方法:
    将编译生成的.so文件拷贝到调用的Python包路径
mv /usr/local/PyNvCodec/_PyNvCodec.cpython-38-x86_64-linux-gnu.so /usr/local/PyNvCodec/PyNvCodec.cpython-38-x86_64-linux-gnu.so 
cp /usr/local/PyNvCodec/PyNvCodec.cpython-38-x86_64-linux-gnu.so /usr/local/lib/python3.8/dist-packages/
  • 如出现问题:
    ValueError: FFmpegDemuxer: no AVFormatContext provided.

  • 解决方法:这是ffmpeg版本问题,修改命令如下:

cd src/TC/src
vim FFmpegDemuxer.cpp 
找到第485行解注释:av_register_all();

如发现修改后编译报av_register_all();的错,则说明不是该问题产生的错误,建议重新注释掉。

参考: https://github.com/NVIDIA/VideoProcessingFramework/issues/287

  • 如出现问题:
    RuntimeError: Failed to open dynamic library: cuvid: libnvcuvid.so: cannot open shared object file
  • 解决方法:
    首先在linunx下通过查找,找到这两个库的相关路径,再创建这两个库的软连接,具体方法如下:
sudo ln -s 找到该库的路径/libnvcuvid.so /usr/lib/libnvcuvid.so
sudo ln -s 找到该库的路径/libnvcuvid.so.1 /usr/lib/libnvcuvid.so.1

ln -s xxx/libnvcxxx.so
ldconfig
  • 如出现问题:
    E: Failed to fetch https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64/./libnvjpeg-11-6_11.6.0.55-1_amd64.deb Hash Sum mismatch

  • 解决方法:注释掉/etc/apt/sources.list.d/cuda.list文件中的内容

至此,CV-CUDA的整个依赖环境基本已经安装完毕。下一步就是编译并使用CV-CUDA。

三、Reference:

[1] https://github.com/NVIDIA/VideoProcessingFramework/issues/287

[2] https://blog.csdn.net/abc1827085/article/details/129532576

[3] https://blog.csdn.net/weixin_41247701/article/details/113924476

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Torch是一种用于机器学习和深度学习的工具。然而,有时候在使用Torch时可能会遇到一些问题,例如无法使用GPU进行计算。解决这个问题的方法是通过命令行参数添加“--skip-torch-cuda-test”。 这个问题的原因通常是因为在使用Torch之前未正确配置CUDA库。当Torch尝试使用GPU时,它会尝试运行一些GPU测试,以确保CUDA库已正确安装。如果测试失败,Torch将无法使用GPU。 添加“--skip-torch-cuda-test”命令行参数可以绕过这个测试,从而让Torch能够在没有GPU支持的情况下正常工作。但是,这样做并不是最终的解决方案,因为在使用基于深度学习的应用程序时,GPU通常可以提高计算速度和效率。 因此,为了最大化Torch的性能,最好是解决CUDA库的配置问题,并为Torch启用GPU支持。这样可以让我们利用GPU的并行计算优势来加速训练和预测过程。 ### 回答2: 首先,Torch是一种开源的机器学习框架,它提供了很多优秀的工具包和算法,支持用户进行高效的深度学习,计算机视觉,自然语言处理等应用。与此同时,Torch还支持在GPU上运算,以加速训练模型的速度。不过,在安装Torch时,有时候会出现无法使用GPU的问题。 这个问题可能与本地GPU的驱动程序或Cuda版本不兼容有关,也可能是用户在配置时出现了错误。如果你确保本地GPU和Cuda安装正确,并且仍然无法使用GPU,则可以尝试在命令行中添加--skip-torch-cuda-test参数来跳过CUDA测试阶段,以尝试解决问题。 这个参数的意义是在启动Torch时跳过CUDA的兼容性测试,因为在测试期间可能会出现错误,导致Torch无法使用GPU。通过添加该参数,可以让Torch忽略这些错误,并以CPU模式启动,用于排除其他错误。 但是,值得注意的是,这个参数并不是一个理想的解决方案,因为它无法真正解决无法使用GPU的根本原因。如果您想在Torch中成功地使用GPU,您应该在CUDA安装和配置时小心,确保所有依赖项和兼容性问题得到解决。同时,使用最新版本的Torch和CUDA也可能会减少可能出现的错误,从而提高使用GPU的成功率。 ### 回答3: Torch是一种流行的机器学习框架,它允许您构建和训练神经网络模型。GPU是一种高性能的处理器,可以用来训练深度神经网络模型。然而,有时候在使用Torch时,我们可能会遇到一个问题:Torch不能使用GPU。 这个问题的原因可能是你的电脑上没有安装CUDA工具包。CUDA是一种由NVIDIA开发的并行计算平台和编程模型,允许您在GPU上进行并行计算。因此,如果您想要在Torch中使用GPU进行模型训练,您需要先安装CUDA工具包。 如果您已经安装CUDA工具包,但在Torch中仍无法使用GPU,您可以尝试使用命令行选项“--skip-torch-cuda-test”。这个选项可以让Torch绕过对CUDA的测试,从而强制使用CPU进行模型训练。 但是需要注意的是,如果您硬件支持GPU加速,建议不要使用这个选项。因为使用GPU可以大大缩短模型训练所需的时间,提高模型的训练效率和准确率。如果您确实需要使用CPU进行训练,您可以考虑使用更轻量级的模型或者减小训练数据的规模,以减少训练时间。 总之,要在Torch中使用GPU,您需要先安装CUDA工具包,并确保您的硬件支持GPU加速。如果出现问题,您可以尝试使用选项“--skip-torch-cuda-test”,但不建议这样做。最好的做法是解决问题,让Torch能够正确地使用GPU。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值