Ubuntu20.04环境从零安装 Python+PyTorch+CUDA+cuDNN+TensorRT+FFmpeg+OpenCV,以Docker镜像为例
一. Docker配置首先确认自己有root账户或者sudo权限,否则用不了docker。1. 确认自己的Docker版本:sudo docker --version如果是19.02或者更老的,建议更新Docker到最新版本,否则如果使用GPU的话需要安装nvidia-docker,并使用nvidia-docker启动容器。这里不再赘述过程。如果是19.03或者更新的,按照下面步骤安装nvidia
一. Docker配置
不用docker只想安装环境的直接跳到【二】
首先确认自己有root账户或者sudo权限,否则用不了docker。
1. 确认自己的Docker版本:
sudo docker --version
如果是19.02或者更老的,建议更新Docker到最新版本,否则如果使用GPU的话需要安装nvidia-docker,并使用nvidia-docker启动容器。这里不再赘述过程。
如果是19.03或者更新的,按照下面步骤安装nvidia-docker2即可。
2. 安装nvidia-docker2
nvidia-docker是英伟达为了让用户可以在docker里使用GPU而开发的套件,对于老版本的Docker,安装nvidia-docker后,使用nvidia-docker启动容器。对于19.03版本以后Docker,安装nvidia-docker2之后,使用docker命令加上--gpu参数启动容器即可。
设置GPG key:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
然后使用apt安装:
sudo apt-get update
sudo apt-get install -y nvidia-docker2
重启docker,并验证是否成功:
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
成功的话应该输出类似界面:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
如有安装过程遇到问题,参照官方文档:
3. 运行镜像
从docker hub 拉取镜像,以ubuntu20.04为例:
sudo docker pull ubuntu:20.04
启动容器(docker19.03或更新版本):
sudo docker run -it --gpus all ubuntu:20.04
如果你是老版本docker,则需要使用nvidia-docker来启动容器:
sudo nvidia-docker run -it ubuntu:20.04
之后你会发现命令行变为root@1234abcd5678:,这样就是进入docker容器里了。在容器中输入exit即可退出容器,以下是docker常用的命令:
# 以下均为在宿主机上使用的命令,不要在容器里使用
sudo docker pull image_name:v1.0 #下载名为image_name:v1.0的镜像
sudo docker images #查看所有镜像
sudo docker run -it image_name:v1.0 #把名为image_name:v1.0的镜像运行,成为一个容器
sudo docker ps -a #查看所有容器
sudo docker start -i 1234abcd5678 #启动ID为1234abcd5678的容器
sudo docker cp ./abc.txt 1234abcd5678:/root/ #把当前路径下的abc.txt拷贝到容器1234abcd5678的/root/目录下
sudo docker rm 1234abcd5678 #删除ID为1234abcd5678的容器
sudo docker rmi image_name:v1.0 #删除名为image_name:v1.0的镜像
sudo docker commit 1234abcd5678 image_name:v2.0 #把ID为1234abcd5678的容器打包成名为image_name:v2.0的镜像
从docker hub下载的Ubuntu20.04镜像只有几十兆,基本什么都没安装,所有环境都从头安装。
二. 安装python
Ubuntu20.04发行版是默认安装python3.8的,想换版本的可以跟着此步骤编译安装,已经有Python且不想换版本的忽略此步。
首先安装一些依赖,有权限问题的记得在apt前面加sudo,docker里面默认是root用户,所以不需要sudo:
apt update
apt install pkg-config
apt install wget
apt install gcc
apt install vim
apt install software-properties-common
apt install kmod
apt install build-essential
apt install git
apt install unzip
apt install libeigen3-dev
(可选)如果想编译python所有的可选模块,也安装一下下面这些依赖:
apt install build-essential gdb lcov pkg-config \
libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \
libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \
lzma lzma-dev tk-dev uuid-dev zlib1g-dev
下载Python源码安装包并解压,别的版本自己替换网址。
wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tar.xz
tar -xf Python-3.9.12.tar.xz
cd Python-3.9.12
./configure --enable-optimizations
make
make install
三、安装CUDA、cuDNN、TensorRT、PyTorch
1. 安装显卡驱动和CUDA
我们是以docker镜像为例,因此不需要安装驱动,驱动是在宿主机已经安装好的,再安装也不会成功。
如果你不是docker镜像,且想安装驱动,CUDA安装包里是包含驱动的,所以可以直接安装CUDA。
访问CUDA下载界面
CUDA Toolkit 11.6 Update 2 Downloads | NVIDIA Developerhttps://developer.nvidia.com/cuda-downloads选择自己的架构和系统,最后一步是选择安装方式,一般有deb和runfile安装两种方式,我习惯用deb装,更简洁方便,而且再想安装其他版本的话不用去卸载已有版本。
还是以我们的Ubuntu20.04为例,deb安装步骤是这样的:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda-repo-ubuntu2004-11-6-local_11.6.2-510.47.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-6-local_11.6.2-510.47.03-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-6-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
2023.02.13 这里补充一个安装新版本遇到的坑,如果你使用deb在安装其他版本cuda的时候遇到了【cuda已是最新版 (老版本号)】【W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件】【由于没有公钥,无法验证下列签名】【E: 无法定位软件包 cuda】等问题,请尝试遵循以下步骤解决:
# 看一下/etc/apt/sources.list.d/ 文件夹下有没有你要安装的版本相关的文件
ls /etc/apt/sources.list.d/
# 我要安装的是cuda11.8,文件夹里应该有:cuda-ubuntuXXXX-11-8-local.list
# 如果有别的CUDA版本的list文件,请删掉
# 如果没有,把deb文件解压到一个临时文件夹里
mkdir tmp
dpkg-deb -x cuda-XXXXXX-XXXXXX.deb tmp/
# 解压后把里面的list文件复制到刚才文件夹下
cd tmp/etc/apt/sources.list.d/
sudo cp cuda-ubuntuXXXX-11-8-local.list /etc/apt/sources.list.d/
# 再刷新一下应该就能装新版本的cuda了
sudo apt update
sudo apt -y install cuda
说一下原理,deb安装其实就是把解压后里面的对应路径的文件拷贝到系统对应的文件夹里,导致上述错误的原因就是没有把里面的apt list文件拷贝到/etc/apt/sources.list.d/里,手动拷贝即可。
如果安装遇到其他问题,参考CUDA安装官方文档,英伟达家的官方文档都非常详细且丰富,对新手非常友好,真的可以秒杀其他任何软件的文档:
2. 安装CuDNN
去这里下载(需要登录Nvidia账户):
cuDNN Download | NVIDIA Developerhttps://developer.nvidia.com/rdp/cudnn-download先访问网页,登录,选择版本下载(我选择用Tar包,比DEB方便),下载之后把tar包传到Ubuntu上,如果你是桌面版Ubuntu可以直接访问网页下载。注意,用命令行wget下载是下载不下来的。
解压tar:
tar -xvf cudnn-linux-x86_64-8.x.x.x_cudaX.Y-archive.tar.xz
# 注意,上面的x.x.x和X.Y应替换为实际的版本,或者直接tab键自动填充
拷贝到cuda相关目录即为安装成功。
cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
如果使用其他安装方式,或者安装遇到什么问题,参考cuDNN官方安装文档:
3. 安装TensorRT
访问TensorRT下载界面,同样需要Nvidia会员登录:
NVIDIA TensorRT Download | NVIDIA Developerhttps://developer.nvidia.com/nvidia-tensorrt-download选择版本后,找到和你CUDA版本相应的DEB安装包下载,将DEB包传到Ubuntu上。
安装步骤,不要全复制,记得把文件名字改成你对应的。
dpkg -i nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.2.3.4-ga-20210226_1-1_amd64.deb
apt-key add /var/nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.2.3.4-ga-20210226/7fa2af80.pub
apt-get update
apt-get install tensorrt
2023.02.13补充遇到的一个坑, TensorRT下载时虽然写着适用11.0—11.8,但是下载下来的deb是cuda11.8的,可能兼容之前的cuda11版本,但是我遇到了这样的错误:
sudo apt-get install tensorrt
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
tensorrt : 依赖: libnvinfer8 (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvinfer-plugin8 (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvparsers8 (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvonnxparsers8 (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvinfer-bin (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvinfer-dev (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvinfer-plugin-dev (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvparsers-dev (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvonnxparsers-dev (= 8.5.3-1+cuda11.8) 但是它将不会被安装
依赖: libnvinfer-samples (= 8.5.3-1+cuda11.8) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
英文版是这样的:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
tensorrt : Depends: libnvinfer8 (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvinfer-plugin8 (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvparsers8 (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvonnxparsers8 (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvinfer-bin (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvinfer-dev (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvinfer-plugin-dev (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvparsers-dev (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvonnxparsers-dev (= 8.5.3-1+cuda11.8) but it is not going to be installed
Depends: libnvinfer-samples (= 8.5.3-1+cuda11.8) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
一开始怀疑是这个deb仅支持cuda11.8,折腾了一下把CUDA升级到了11.8,还是一样的问题,网上搜了一下都没解决,直到看到了这篇文章tensorrt安装 - 知乎 (zhihu.com) ,瞬间打开了思路,如果遇到这种版本不匹配或者依赖无法安装的,可以尝试这样解决:
# 先cd到/var/下tensorrt的文件夹,根据你自己版本号替换,下同
cd /var/nv-tensorrt-local-repo-ubuntu1804-8.5.3-cuda-11.8
# 每个deb单独安装
sudo dpkg -i graphsurgeon-tf_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvinfer8_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvinfer-bin_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvinfer-dev_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvinfer-plugin8_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvinfer-plugin-dev_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvinfer-samples_8.5.3-1+cuda11.8_all.deb
sudo dpkg -i libnvonnxparsers8_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvonnxparsers-dev_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvparsers8_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i libnvparsers-dev_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i onnx-graphsurgeon_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i python3-libnvinfer_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i python3-libnvinfer-dev_8.5.3-1+cuda11.8_amd64.deb
sudo dpkg -i tensorrt_8.5.3.1-1+cuda11.8_amd64.deb
sudo dpkg -i tensorrt-dev_8.5.3.1-1+cuda11.8_amd64.deb
sudo dpkg -i tensorrt-libs_8.5.3.1-1+cuda11.8_amd64.deb
sudo dpkg -i uff-converter-tf_8.5.3-1+cuda11.8_amd64.deb
# 如果中途安装某个deb时遇到报依赖缺少的错,看看是不是上面这里面的
# 如果是的话可以不用管,等安装上了就自动配置好了,
# 上述那些我执行了两遍,发现最后缺一个libcudnn,
# 于是又用deb的方式安装了一遍cudnn(如果你没报错那就不用执行下列语句了) :
sudo dpkg -i cudnn-local-repo-ubuntu1804-8.6.0.163_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu1804-8.6.0.163/cudnn-local-77B32ECB-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt-get install libcudnn8-dev=8.6.0.163-1+cuda11.8 libcudnn8=8.6.0.163-1+cuda11.8
# libcudnn-samples安不安装都行:
sudo apt-get install libcudnn8-samples=8.6.0.163-1+cuda11.8
# 如果愿意可以验证一下是否安装好cudnn
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
# 执行后应该会看到:
Test passed!
# 如果报找不到FreeImage.h,则安装:
sudo apt-get install libfreeimage3 libfreeimage-dev
其他安装方式或者遇到问题,参照TensorRT官方文档,在这里面找到你要安装的版本,找Installation Guide:
4. 安装PyTorch
访问官网,选择OS和安装方式,然后复制指令即可。
PyTorchhttps://pytorch.org/我选的是1.11.0版本、Linux、pip、python,安装指令就是默认的:
pip3 install torch torchvision torchaudio
四、安装FFmpeg和OpenCV
首先安装FFmpeg,再安装OpenCV。
FFmpeg在Ubuntu上可以使用apt install ffmpeg来安装,但是缺少一些东西,我这里选择源码编译安装。
1. 编译安装yasm
先安装yasm,在FFmpeg编译时用到,使用wget下载1.3.0版本或者手动访问官网Index of /projects/yasm/releases/ (tortall.net)下载其他版本。
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make
make install
这里插一条,各种格式的压缩包在Linux上的解压和压缩方法:
2. 编译安装x264和x265
x264可以直接用apt装:
apt install x264 libx264-dev
x265安装
apt install nasm
git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git/build
cmake ../source/
make
make install
3. 编译安装FFmpeg
使用wget或者手动访问官网 Download FFmpeg下载安装包。
configure时记住要加`--enable-shared`,不然后续安装opencv时会有问题
wget https://ffmpeg.org/releases/ffmpeg-4.4.2.tar.xz
tar -xf ffmpeg-4.4.2.tar.xz
cd ffmpeg-4.4.2/
./configure --enable-shared --enable-gpl --enable-nonfree --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads
make
make install
4. 编译安装OpenCV
下载opencv和opencv_contrib
wget https://github.com/opencv/opencv/archive/4.5.5.zip
unzip -q 4.5.5.zip
rm 4.5.5.zip
wget wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.zip
unzip -q 4.5.5.zip
rm 4.5.5.zip
建立一个临时的build文件夹,在里面进行编译安装
mkdir build_opencv
cd build_opencv/
cmake -DCMAKE_BUILD_TYPE=Release -D WITH_CUDA=ON -D WITH_NVCUVID=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.5/modules/ ../opencv-4.5.5
cmake之后,输出总结里的FFMPEG、CUDA、cuDNN、OpenCL应该都是YES
然后编译安装
make
make install
如果你是CUDA10.2,make时有可能会报unsupported GNU version gcc versions later than 8 are not supported错误,得通过降级gcc和g++来解决:
apt remove gcc
apt-get install gcc-7 g++-7 -y
ln -s /usr/bin/gcc-7 /usr/bin/gcc
ln -s /usr/bin/g++-7 /usr/bin/g++
ln -s /usr/bin/gcc-7 /usr/bin/cc
ln -s /usr/bin/g++-7 /usr/bin/c++
更多推荐
所有评论(0)