RTX3090顯卡配置tensorflow延柠,使用CUDA 11.1在Ubuntu 20.10從源碼編譯

Tensorflow 2.x目前官方的版本暫時只支持到CUDA 10.1遣铝,但是RTX 3090顯卡只支持CUDA 11及以上的版本冻河,因此本次實驗采用了從源碼編譯的方法來構(gòu)建面向CUDA 11的tensorflow.

  • 系統(tǒng):Ubuntu 20.10
  • 硬件環(huán)境:Intel Core i9 10900X, 128GB內(nèi)存, 兩塊RTX 3090顯卡
  • Python版本使用Anaconda來管理

(一) 準(zhǔn)備環(huán)境

基礎(chǔ)環(huán)境已安裝:

  • Nvidia顯卡驅(qū)動 (455.38),使用Ubuntu自帶附加驅(qū)動安裝
  • Anaconda3 (或Miniconda3)棒动,并配置了國內(nèi)源
  • 系統(tǒng)自帶的gcc版本為10.2
  • vim和vscode編輯器

(1) 安裝CUDA 11.1

首先打開下載地址:https://developer.nvidia.com/cuda-toolkit-archive

CUDA下載

選擇最新版本11.1.1

然后選擇系統(tǒng)linux糙申,x86_64,Ubuntu船惨,20.04柜裸,安裝類型選runfile(local),下面會顯示安裝說明粱锐,如:

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
sudo sh cuda_11.1.0_455.23.05_linux.run
選擇CUDA 版本

這個安裝包會比較大(3.5GB)疙挺,建議執(zhí)行之前先cd到下載文件的目錄。

注:如果想要更快的下載速度怜浅,可以使用mwget -n 32來加速铐然,這里可以自己設(shè)置多線程下載的個數(shù)。

下載完執(zhí)行上面的第二句命令來安裝恶座,會提示已安裝驅(qū)動搀暑,選擇continue即可,然后accept跨琳。注意在安裝時自点,因為我們已經(jīng)有顯卡驅(qū)動,所以需要把Driver那個選項按空格鍵取消脉让,然后選Install安裝桂敛。

安裝CUDA

安裝完成后,需要配置環(huán)境變量溅潜,打開:

sudo vim ~/.bashrc

(如果沒有安裝vim术唬,首先需要安裝sudo apt install vim)

在文件末尾添加:

export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}

(括弧:這里的cuda路徑不加版本號伟恶,以便后續(xù)升級cuda版本的時候不需要重新配置)

保存之后碴开,更新環(huán)境變量:

source ~/.bashrc

最后輸入nvcc -V驗證CUDA是否已安裝,并返回版本號等信息博秫。

(2) 配置Cudnn 8.0.5

首先打開下載地址:https://developer.nvidia.com/rdp/cudnn-download

這里需要登陸或注冊Nvidia賬號潦牛,如果是第一次下載,可能還要填一份調(diào)查問卷挡育,然后根據(jù)提示選擇版本巴碗,這里選的是cuDNN Library for Linux (x86_64)

Cudnn下載

如果使用瀏覽器下載太慢,建議開始下載之后右鍵復(fù)制鏈接即寒,然后取消下載橡淆,打開終端使用mwget來下載召噩。

然后解壓:

tar -zxvf cudnn-11.1-linux-x64-v8.0.5.39.tgz

接下來把cudnn的文件復(fù)制到CUDA目錄:

sudo cp cuda/lib64/* /usr/local/cuda/lib64/
sudo cp cuda/include/* /usr/local/cuda/include/
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

最后驗證cudnn是否配置好并輸出版本號:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

返回值為相關(guān)define的信息。

(3) 配置TensorRT

打開下載地址:https://developer.nvidia.com/tensorrt

登陸Nvidia賬號逸爵,同樣的可能會讓填一份問卷具滴,提交之后點擊立即下載。這里選擇版本為"TensorRT 7.2.1 for Ubuntu 18.04 and CUDA 11.1 TAR package"

下載TensorRT

同樣可以采用mwget加速下載师倔,然后解壓并配置:

tar -zxvf TensorRT-7.2.1.6.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.0.tar.gz
sudo mv TensorRT-7.2.1.6 /usr/local/TensorRT-7.2.1.6
sudo ln -s /usr/local/TensorRT-7.2.1.6 /usr/local/tensorrt

然后配置環(huán)境變量构韵,打開:

sudo vim ~/.bashrc

在文件末尾添加:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/tensorrt/lib

然后更新環(huán)境變量:

source ~/.bashrc

(4) 配置Python接口

因為Ubuntu 20.10自帶的python版本為3.8,而tensorrt只支持到3.7趋艘,因此需要建立一個新的Anaconda虛擬環(huán)境疲恢,設(shè)置python 3.7版本:

conda create -n tf2 python=3.7
conda activate tf2

然后在(tf2)下配置:

cd /usr/local/tensorrt/python
pip install tensorrt-7.2.1.6-cp37-none-linux_x86_64.whl

(5) 安裝UFF和graphsurgeon

cd /usr/local/tensorrt/uff
pip install uff-0.6.9-py2.py3-none-any.whl

cd /usr/local/tensorrt/graphsurgeon
pip install graphsurgeon-0.4.5-py2.py3-none-any.whl

(6) 驗證TensorRT安裝

運行mnist示例程序:

cd /usr/local/tensorrt/samples/sampleMNIST
make
/usr/local/tensorrt/bin/sample_mnist

(7) 安裝Bazel

首先打開下載地址:https://github.com/bazelbuild/bazel/releases

然后點擊Assets,選擇bazel-3.7.0-linux-x86_64瓷胧,版本號以最新版為準(zhǔn)显拳,然后下載,可使用mwget加速搓萧。

這個下載的文件就是可執(zhí)行文件杂数,然后配置:

mkdir ~/bin
mv bazel-3.7.0-linux-x86_64 ~/bin/
cd ~/bin/
ln -s bazel-3.7.0-linux-x86_64 bazel

接下來配環(huán)境變量:

sudo vim ~/.bashrc

在文件末尾添加:

export BAZEL_HOME=/home/lab
export PATH=${PATH}:${BAZEL_HOME}/bin

(注意這里需要把lab改成自己的用戶名)

然后更新環(huán)境變量:

source ~/.bashrc

最后輸入bazel驗證是否安裝成功。

(二) 編譯Tensorflow

(1) 獲取源碼

首先cd到想要下載源碼的目錄:

# 官網(wǎng)
git clone https://github.com/tensorflow/tensorflow.git
# 可以使用國內(nèi)加速
git clone https://hub.fastgit.org/tensorflow/tensorflow.git
cd tesorflow

(2) 配置編譯選項

首先保證Anaconda已經(jīng)切換到剛剛建立的虛擬環(huán)境矛绘,然后:

./configure

選擇python版本時耍休,如果路徑正確,則直接敲回車货矮。

You have bazel 3.7.0 installed.
Please specify the location of python. [Default is /home/lab/miniconda3/envs/tf2/bin/python3]:

Found possible Python library paths:
/home/lab/miniconda3/envs/tf2/lib/python3.7/site-packages
Please input the desired Python library path to use. Default is [/home/lab/miniconda3/envs/tf2/lib/python3.7/site-packages]

Do you wish to build TensorFlow with ROCm support? [y/N]: N
No ROCm support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: y
CUDA support will be enabled for TensorFlow.

Do you wish to build TensorFlow with TensorRT support? [y/N]: y
TensorRT support will be enabled for TensorFlow.

后面的選項需要把CUDA和TensorRT設(shè)置成Y羊精,然后選擇CUDA版本,設(shè)置為11.1囚玫,CUDNN設(shè)置為8喧锦,TensorRT設(shè)置為7,因為NCCL沒有配置抓督,所以用默認(rèn):

Please specify the CUDA SDK version you want to use. [Leave empty to default to CUDA 10]: 11.1
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7]: 8
Please specify the TensorRT version you want to use. [Leave empty to default to TensorRT 6]: 7
Please specify the locally installed NCCL version you want to use. [Leave empty to use http://github.com/nvidia/nccl]:

然后配置CUDA路徑:

Please specify the comma-separated list of base paths to look for CUDA libraries and headers. [Leave empty to use the default]:

這里輸入:

/usr/local/tensorrt$ /lib,/lib/x86_64-linux-gnu,/usr,/usr/lib/x86_64-linux-gnu/libfakeroot,/usr/local/cuda,/usr/local/cuda/targets/x86_64-linux/lib,/usr/local/tensorrt

然后設(shè)置對GPU顯卡算力的支持:

Please note that each additional compute capability significantly increases your build time and binary size, and that TensorFlow only supports compute capabilities >= 3.5 [Default is: 8.6,8.6]:

對于RTX3090燃少,輸入8.6然后回車。(其他顯卡查詢:https://developer.nvidia.com/zh-cn/cuda-gpus#collapseOne

是否使用clang選擇N铃在,gcc編譯器使用默認(rèn)阵具,編譯器優(yōu)化選項默認(rèn)回車,安卓選項設(shè)置為N:

Do you want to use clang as CUDA compiler? [y/N]: N
nvcc will be used as CUDA compiler.

Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]:

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:

Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: N
Not configuring the WORKSPACE for Android builds.

最后輸出以下信息定铜,配置完成阳液。

Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
--config=mkl # Build with MKL support.
--config=mkl_aarch64 # Build with oneDNN support for Aarch64.
--config=monolithic # Config for mostly static monolithic build.
--config=numa # Build with NUMA support.
--config=dynamic_kernels # (Experimental) Build kernels into separate shared objects.
--config=v2 # Build TensorFlow 2.x instead of 1.x.
Preconfigured Bazel build configs to DISABLE default on features:
--config=noaws # Disable AWS S3 filesystem support.
--config=nogcp # Disable GCP support.
--config=nohdfs # Disable HDFS support.
--config=nonccl # Disable NVIDIA NCCL support.
Configuration finished

(3) 配置github加速

首先已cd到tensorflow源碼目錄,并且Anaconda已激活虛擬環(huán)境揣炕。使用vscode編輯源碼:

code WORKSPACE

按下Ctrl+H帘皿,把代碼中的那個"https://github.com"替換為"https://hub.fastgit.org",然后Ctrl+S保存畸陡,再編輯:

code tensorflow/workspace.bzl
code third_party/aws/workspace.bzl

按照同樣的方法替換鹰溜,大約分別有57處和4處虽填,全部替換,并保存曹动,關(guān)掉vscode斋日。

注:后續(xù)如果還出現(xiàn)下載github很慢的情況,可能是tensorflow版本更新的改動仁期,可以使用全文檢索的方法來查找文件路徑并替換網(wǎng)址(說明文檔以及注釋里的路徑不需要替換):

find .|xargs grep -ri "https://github.com/" -l

(4) 使用bazel進(jìn)行build

構(gòu)建帶有CUDA支持的tensorflow:

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

根據(jù)網(wǎng)速的情況桑驱,下載過程大概需要20分鐘左右,編譯過程根據(jù)CPU配置可能需要1個多小時(酷睿i9 10900X)跛蛋,把機子開著去睡覺即可。

(5) 編譯報錯問題解決

報錯信息:

ModuleNotFoundError: No module named 'keras_preprocessing'

解決方法:

pip install keras_applications keras_preprocessing

成功安裝后會提示"INFO: Build completed successfully"痊硕。

(6) 從master分支構(gòu)建whl軟件包

./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg

注意這里的輸出路徑/tmp/tensorflow_pkg建議不要修改赊级,否則容易出問題。

(7) 安裝生成的軟件包

首先查看生成的whl文件

cd /tmp/tensorflow_pkg/
ls
查看生成的whl文件

這里會顯示生成的文件名岔绸,然后安裝這個軟件包(以輸出的文件名為準(zhǔn))理逊。此時需要確認(rèn)已經(jīng)在正確的Anaconda虛擬環(huán)境下。

pip install tf_nightly-2.5.0-cp37-cp37m-linux_x86_64.whl

安裝過程會自動安裝相關(guān)依賴項盒揉。

(三) 測試編譯的Tensorflow是否可以訪問GPU

打開python晋被,運行以下代碼:

from tensorflow.python.client import device_lib
def get_available_gpus():
  local_device_protos = device_lib.list_local_devices()
  return [x.name for x in local_device_protos if x.device_type == 'GPU']
print(get_available_gpus())

這里會輸出一些和GPU相關(guān)的信息:

2020-11-19 12:16:47.387251: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2020-11-19 12:16:48.022598: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1267] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-11-19 12:16:48.022639: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1273] 0 1
2020-11-19 12:16:48.022644: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1286] 0: N N
2020-11-19 12:16:48.022647: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1286] 1: N N
2020-11-19 12:16:48.026415: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1413] Created TensorFlow device (/device:GPU:0 with 22423 MB memory) -> physical GPU (device: 0, name: GeForce RTX 3090, pci bus id: 0000:17:00.0, compute capability: 8.6)
2020-11-19 12:16:48.028475: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1413] Created TensorFlow device (/device:GPU:1 with 21814 MB memory) -> physical GPU (device: 1, name: GeForce RTX 3090, pci bus id: 0000:65:00.0, compute capability: 8.6)
['/device:GPU:0', '/device:GPU:1']

如果輸出結(jié)果和你的實際GPU符合,則說明Tensorflow可以訪問GPU刚盈。

然后可以打開vscode羡洛,將Anaconda環(huán)境切換到本次配置的虛擬環(huán)境,然后測試自己的tensorflow程序藕漱。

在vscode中切換虛擬環(huán)境

運行時打開nvidia-smi欲侮,觀察到GPU使用率提高,程序輸出結(jié)果正常肋联,說明配置成功威蕉。

實際測試3090顯卡比之前的Titan RTX訓(xùn)練網(wǎng)絡(luò)的速度明顯快一些,這里面可能也有一部分因為CUDA 11的加速作用橄仍。

參考文獻(xiàn)

官方文檔:從源代碼構(gòu)建Tensorflow

Tensorflow編譯血淚史

Tensorflow源碼編譯 - 知乎

Ubuntu18.04 LTS 使用CUDA11.1編譯TensoFlow-GPU版本

RTX3090 cuda,cudnn,tensorflow環(huán)境配置

RTX 3090的深度學(xué)習(xí)環(huán)境配置pytorch韧涨、tensorflow、keras - 知乎

ubuntu 查找文件中的字符串

如何提高國內(nèi)訪問Github的速度到2MB/s以上

求助侮繁!Tensorflow2.3 GPU報錯InternalError: CUDA runtime implicit initialization on GPU:0 failed.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虑粥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鼎天,更是在濱河造成了極大的恐慌舀奶,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斋射,死亡現(xiàn)場離奇詭異育勺,居然都是意外死亡但荤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門涧至,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腹躁,“玉大人,你說我怎么就攤上這事南蓬》姆牵” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵赘方,是天一觀的道長烧颖。 經(jīng)常有香客問我,道長窄陡,這世上最難降的妖魔是什么炕淮? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮跳夭,結(jié)果婚禮上涂圆,老公的妹妹穿的比我還像新娘。我一直安慰自己币叹,他們只是感情好润歉,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颈抚,像睡著了一般踩衩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邪意,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天九妈,我揣著相機與錄音,去河邊找鬼雾鬼。 笑死萌朱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的策菜。 我是一名探鬼主播晶疼,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼又憨!你這毒婦竟也來了翠霍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蠢莺,失蹤者是張志新(化名)和其女友劉穎寒匙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡锄弱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年考蕾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片会宪。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡肖卧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掸鹅,到底是詐尸還是另有隱情塞帐,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布巍沙,位于F島的核電站葵姥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏句携。R本人自食惡果不足惜牌里,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望务甥。 院中可真熱鬧,春花似錦喳篇、人聲如沸敞临。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挺尿。三九已至,卻和暖如春炊邦,著一層夾襖步出監(jiān)牢的瞬間编矾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工馁害, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窄俏,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓碘菜,卻偏偏與公主長得像凹蜈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忍啸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容