1.更換Ubuntu軟件倉庫鏡像源
????????為了在WSL上使用TensorRT進行推理加速,需要安裝以下環境,下面將按以下順序分別介紹安裝、驗證以及刪除環境:
#1.C++環境配置
gcc、gdb、g++
#2.gpu環境
cuda、cudnn
#3.Cmake環境
CMake
#4.OpenCV環境
OpenCV
#5.TensorRT環境
TensorRT
????????在安裝這些庫之前,需要先更換清華鏡像,可以加速Ubuntu下載速度,使用指令lsb_release -a查看Linux 發行版的信息,如下所示:
????????其中關注一下Codename:focal ,參照博客WSL不同版本的Ubuntu更換清華鏡像-CSDN博客,如果是focal的話,則修改鏡像源為下面內容,如果是其他的codename的話,需要將https://mirrors.tuna.tsinghua.edu.cn/ubuntu,后面的focal修改為對應的內容,比如還可能是jammy、lunar、kinetic和bionic。
# 默認注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiversedeb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse# 預發布軟件源,不建議啟用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
????????現在來看一下如何修改,分成兩個步驟,第一:備份該配置文件,避免鏡像替換后不可用,還可以恢復到原始版本;第二:修改鏡像源。
??????? 首先來看備份配置文件:配置文件放在/etc/apt路徑下,執行以下指令備份配置文件sources.list.
cp sources.list sources.list.bak
?????????然后修改鏡像源,執行以下指令:
vim source.list
?????????最后把前面的鏡像源地址復制進去,然后在一般模式下使用:wq,保存并退出,如下所示:
2.C++環境配置
????????安裝:
sudo apt update
sudo apt install build-essential
? ? ? ? 驗證:
gcc --version
3.CUDA和CUDNN安裝?
????????前面也提到了wsl-ubuntu20.04的顯卡驅動和本機的顯卡驅動是一樣的,再利用nvidia-smi查看下顯卡驅動版本,再決定安裝什么版本的CUDA和cuDNN.
????????顯卡驅動版本號為12.2,可以理解為可以支持的CUDA最大版本號,但是我們也不需要安裝那么高的CUDA,可以選擇一個穩定點的比如CUDA11.6.
3.1CUDA-11.6安裝?
????????CUDA下載:CUDA Toolkit Archive | NVIDIA Developer,選擇cuda11.6下載,如下所示。
?????????安裝: 接下來執行以下指令來進行安裝;
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-6-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
????????以上的指令分別代表:(1)下載 cuda-wsl-ubuntu.pin
文件;(2)移動 cuda-wsl-ubuntu.pin
文件到 /etc/apt/preferences.d/
目錄;(3)下載 CUDA 11.6 的本地安裝包;(4)安裝 CUDA 倉庫包;(5)添加 CUDA 倉庫的公鑰;(6)更新包列表;(7)安裝 CUDA。
????????其中第三步中,如果網絡不順暢的話可以直接復制鏈接到瀏覽器中進行下載,然后再放到你的安裝路徑下,我這里直接是放在/root路徑下,然后繼續執行后面的步驟。
????????驗證:
????????CUDA默認安裝在/usr/local路徑下,進入到該路徑下,其中cuda-11.6文件夾即為安裝好的cuda,里面會包含有bin、lib及include文件,其中nvcc指令在bin路徑下,即/usr/local/cuda-11.6/bin.
????????下面需要把bin路徑下的常用指令添加在home/.bashrc環境變量文件中,然后再使用nvcc -V來驗證cuda是否安裝成功:
???????首先使用下面指令打開.bashrc:
vim ~/.bashrc
????????然后直接在最后一行插入下面代碼,指示了cuda-11.6的路徑:
export CUDA_HOME=/usr/local/cuda-11.6 # 新建環境變量CUDA_HOME
export PATH=$PATH:$CUDA_HOME/bin # 將bin目錄添加到PATH這個環境變量
?????????最后執行下面指令來驗證cuda是否已經安裝成功:?
source ~/.bashrc
nvcc -V
3.2cuDNN-8.9.5安裝?
??????????cuDNN下載:鏈接,我這里選擇符合版本要求的v8.9.5,選擇Linux_x86_64(Tar)下載。
????????我這里選擇把下載好的文件放在/root路徑下,如下所示:?
?????????安裝: 首先解壓得到lib和include文件夾,然后將解壓后的文件夾分別復制到前面的cuda-11.6里面對應的lib64和include路徑下,指令如下所示:
tar -xvf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz
cd cudnn-linux-x86_64-8.9.5.30_cuda11-archive/ #進入解壓路徑
cp ./lib/* /usr/local/cuda-11.6/lib64 # 拷貝lib
cp ./include/* /usr/local/cuda-11.6/include # 拷貝頭文件
????????驗證: 執行以下指令,顯示如下內容說明cuDNN安裝成功。
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
?4.CMake-3.30.0安裝
????????CMake下載:Download CMake,這里我選擇的是3.30.0版本進行下載,下載得到cmake-3.30.0.tar.gz壓縮包,然后找個路徑進行解壓,如下所示:
?????????安裝:
????????首先將cmake-3.30.0.tar.gz這個壓縮包放在/root路徑下,使用以下指令來解壓縮cmake包.
tar -zxvf cmake-3.30.0.tar.gz
????????然后進入解壓后的文件夾,進行編譯和安裝,其中make -j4中的-j4表示使用4個進程,可以提升生成的速度:?
cd cmake-3.30.0/
./bootstrap
make -j4
make install
????????問題: 我在執行./bootstrap遇到了Error:Could not find OpenSSL,如下所示:
????????解決: 那么需要安裝libssl-dev,然后重新再執行一遍./bootstrap指令,執行成功后是下面這樣子的.
sudo apt-get install libssl-dev
?????????驗證: 執行以下指令,查看Cmake版本及Cmake位置,沒有問題的話說明Cmake安裝成功了。?
cmake --version
which cmake
5.OpenCV-4.8安裝
????????OpenCV下載:Releases - OpenCV,這里我選擇一年前發布的OpenCV-4.8,點擊sources,下載得到opencv-4.8.0.zip壓縮包,然后找個路徑進行解壓,如下所示:
?????????安裝:
????????第一步:把opencv-4.8.0.zip這個壓縮包放在/root路徑下,使用unzip指令來解壓縮opencv包.
unzip opencv-4.8.0.zip
?????????第二步:進入opencv路徑,創建build文件,用來保存編譯的文件。
cd opencv-4.8.0/
mkdir build
cd build
?????????第三步:依次執行以下指令,使用CMake來配置、生成和安裝OpenCV,其中make生成這一步的時間稍微會長一點,大概15分鐘左右,可以在make后面加入-j4來加快生成,其中4指同時使用4個進程。?
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES ..
make -j4
make install
????????問題: 我在執行make -j4指令的時候,報錯fatal error: openjpeg.h: No such file or directory,那么需要安裝libopenjp2-7-dev。
????????解決: 如果你和我遇到了一樣的問題,那么安裝完之后為了保險起見,需要刪除build文件夾,重新配置生成,即重新執行第二步和第三步的指令。
apt-get install libopenjp2-7-dev
????????驗證:
????????安裝完OpenCV后需要知道OpenCV的bin、lib及include文件放在哪個路徑下:
????????其中include頭文件放在路徑下:/usr/local/include/opencv4/opencv2;bin文件放在路徑下:/usr/local/bin;lib文件放在路徑下:/usr/local/lib.
????????下面來驗證OpenCV是否安裝成功,由于我們不是在ubuntu主機上操作,而是相當于鏈接一個遠程主機,所以使用imshow報錯是很正常的,如下所示,但是我們不需要imshow函數,只需要用到opencv來處理圖片,所以我需要修改一下樣例的代碼。?
????????首先時進入到一開始解壓縮的文件夾中,并使用vim來編輯一下代碼,只需要把imshow修改為imwrite,并且注釋掉waitKey(0)代碼即可,如下所示。?
cd /root/opencv-4.8.0/samples/cpp/example_cmake
vim example.cpp
????????然后再執行以下指令編譯和生成可執行文件,如下所示.
cmake -S . -B build
cmake --build build
????????最后運行可執行文件,發現在當前路徑下會生成一個Sample.jpg的圖片,顯示如下則說明安裝成功了(查看圖片可以直接通過\wsl.localhost\Ubuntu-2004\root\opencv-4.8.0\samples\cpp\example_cmake路徑,在window上直接查看):?
./build/opencv_example
6.TensorRT-8.5安裝
????????TensorRT下載:NVIDIA TensorRT 8.x Download | NVIDIA Developer,EA 版本代表搶先體驗,而GA 代表通用性,表示穩定版,所以我們還是下載TensorRT8.5GA穩定版的,
????????安裝:
????????第一步:把TensorRT-8.5.1.7.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz這個壓縮包放在/root路徑下,解壓縮TensorRT包.
tar -zxvf TensorRT-8.5.1.7.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz
????????第二步: 將TensorRT/lib的絕對路徑添加到在home/.bashrc環境變量文件中.
????????首先使用以下指令打開.bashrc.
vim ~/.bashrc
????????然后添加以下代碼到文件中,如下所示:?
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/TensorRT-8.5.1.7/lib
????????最后使用以下指令更新一下:?
source ~/.bashrc
????????驗證:
????????第一步:進入到/root/TensorRT-8.5.1.7/samples/sampleOnnxMNIST路徑下.
cd /root/TensorRT-8.5.1.7/samples/sampleOnnxMNIST
????????第二步:編譯并執行可執行文件,如下所示即安裝成功。?
make
../../targets/x86_64-linux-gnu/bin/sample_onnx_mnist