ESXi6.7 centos6 直通英睿达GPU,并编译ffmpeg
直接安装ffmpeg,是不能用显加速的
CentOS 7
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
CentOS 6
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
直接装FFmpeg 和 FFmpeg开发包
sudo yum install ffmpeg ffmpeg-devel -y<br />
sudo
rpm --
import
https:
//www
.elrepo.org
/RPM-GPG-KEY-elrepo
.org
sudo
rpm -Uvh http:
//www
.elrepo.org
/elrepo-release-7
.0-2.el7.elrepo.noarch.rpm
安装显卡检查程序:
sudo
yum
install
nvidia-detect
检测显卡型号,并选择对应的驱动:
$ nvidia-detect -
v
Probing
for
supported NVIDIA devices...
[10de:06dd] NVIDIA Corporation GF100GL [Quadro 4000]
This device requires the current 346.47 NVIDIA driver kmod-nvidia
根据 nvidia-detect 的输出信息,可以知道显卡的型号,以及要使用的驱动版本 346.47 。
安装显卡驱动
若驱动版本为 304.xx,则安装 304xx 版本:
sudo
yum
install
nvidia-x11-drv-304xx nvidia-x11-drv-304xx-32bit
若驱动版本为 340.xx,则安装 340xx 版本:
sudo
yum
install
nvidia-x11-drv-340xx nvidia-x11-drv-340xx-32bit
对于大多数比较新的显卡来说,直接安装最新版的驱动即可:
sudo
yum
install
nvidia-x11-drv nvidia-x11-drv-32bit
安装过程中可能会给出软件冲突的警告,需要卸载以下软件包及其依赖:
sudo
yum remove xorg-x11-glamor
重启
ESXi 准备工作,我是一张1080显卡和一个核显。核显被我从bios直接关闭
1.在VM的配置文件增加
hypervisor.cpuid.v0 = "FALSE"
基础依赖包
yum install -y git yasm gcc perl freetype-devel kernel-devel-$(uname -r) kernel-headers-$(uname -r)
安装CUDA
我安装的是10.1
- rpm -i cuda-repo-rhel6-10-1-local-10.1.168-418.67-1.0-1.x86_64.rpm
- yum clean all
- yum install cuda
执行第三步时,提示缺少libvdpau和dkms,谷歌,装之
yum install epel-release
yum install -y dkms libvdpau
重新执行
yum install cuda
进过漫长的等待,cuda安装结束。
验证安装结果,运行nvcc -V,结果提示没命令不存在,原因是没有加到path,加之(官方的程序也不靠谱啊,哭死)
echo 'export PATH=/usr/local/cuda-10.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
继续验证,通过
继续输入命令
nvidia-smi
应该会显示一个表
如果结合watch命令,可以拿来监控显卡工作情况
watch -n 1 nvidia-smi
试一下官方的例子
进入目录
cd /usr/local/cuda-10.1/samples
输入命令 make,要等好久,虚拟机,有点慢......
编译完成后测试
进入/usr/local/cuda-10.1/samples/bin/x86_64/linux/release
运行deviceQuery程序,./deviceQuery
查看输出结果,重点关注最后一行,Pass表示通过测试。
开始编译ffmpeg
参考官方文档https://developer.nvidia.com/ffmpeg
我创建了目录/data, 先clone 2个仓库到本地
cd /data
git clone https://github.com/libav/libav
编译,没什么问题
git clone https://git.ffmpeg.org/ffmpeg.git
又是漫长的等待,还重试了好几次,天朝的开发者真是痛苦,编译之
提示ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
在官方路径探找到答案
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
make install
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
再重新编译ffmpeg
./configure --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --enable-libfreetype --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
make -j4
make install
原因是官方好像由于某种原因移除了一些文件,不重要啦!
最后,测试一下啦
ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -vsync 0 -i <input.mp4> -vf scale_npp=1920:1072 -vcodec h264_nvenc <output0.264> -vf scale_npp=1280:720 -vcodec h264_nvenc <output1.264>
试了一下,ffmpeg硬件编码,最终speed=23.5x
若提示共享库找不到,可以自己添加
在/etc/profile中添加共享库的路径:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
生效source ~/.bashrc