日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

Ubuntu 16.04 LTS下编译GPU版tensorflow

發(fā)布時間:2025/7/25 Ubuntu 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu 16.04 LTS下编译GPU版tensorflow 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Ubuntu 16.04 LTS下編譯GPU版tensorflow

機器學習與數(shù)學 · 2016-06-10 13:51


作者: 比特小組

機器學習與數(shù)學出品


機器學習必然涉及到代碼,本小組選擇scikit-learn以及tensorflow等作為開發(fā)基礎,便于通過實例來講解某些算法。本文講一下ubuntu下編譯和安裝帶GPU支持的單機版tensorflow,已經(jīng)處理好的童鞋可以忽略此文。


不要看到這么長的篇幅就怕怕,這里給出的是相對比較完整的過程。但是由于大家的系統(tǒng)和電腦配置不同,安裝過可以忽略其中一些步驟。這個完整的編譯過程發(fā)在這里僅供大家參考。


由于針對Linux的顯卡驅(qū)動和cuda更新不夠及時,暫時只能用低版本,所以安裝起來心中沒底,過程略顯曲折。本文講述在ubuntu16.04LTS系統(tǒng)下按照官網(wǎng)所給的流程[1]編譯GPU版本的tensorflow,是針對單機版的,集群的有機會再講。現(xiàn)在很多筆記本都是雙顯卡配置的,我這款獨顯是NVIDIA GeForce 940M,顯存為4GB。這款顯卡性能很low,不過筆記本嘛,本身主要是拿來測試代碼用的。


第0步
安裝并切換到NVIDIA顯卡


首先用下面命令查看一下你的電腦有沒有N卡,如果沒有就到此結(jié)束啦,因為tensorflow目前只支持cuda,不支持opencl。命令執(zhí)行后,可以看到我的就是那個弱弱的GT940M。但是筆記本默認是用intel核顯,所以當務之急是開啟N卡,才能品嘗到cuda。


$ lspci | grep -E "VGA|3D" (或者lspci | grep -i nvidia)

?

接下來準備裝NVIDIA顯卡驅(qū)動,先用下面這個命令查看一下可以安裝的驅(qū)動。

$ ubuntu-drivers devices


看到nvidia-361驅(qū)動可用,忽略下面的nouveau(可以加入黑名單),接著使用如下命令安裝NVIDIA驅(qū)動、N卡的設置面板以及雙顯卡切換工具。


$ sudo apt-get install nvidia-361 nvidia-settings nvidia-prime


裝好重啟一下,打開NVIDIA X Server Settings,看下圖,出現(xiàn)了GPU 0 - (GeForce 940M),說明獨顯已經(jīng)啟用了。


?

用下面命令查看下GPU情況,


這一步到此就完成啦。這里說明一下如果主板是UEFI引導的,在裝ubuntu時應該將安全啟動禁用掉。另外,如果想嘗鮮的也可以試試PPA源中比官方源里更新的驅(qū)動。

?

第1步
安裝cuda7.5.18

這里可以用兩種方法。

先看第一種方法,它安裝方便,但是后面需要額外操作。


$ sudo apt-get install nvidia-cuda-toolkit


這步當前是默認安裝cuda7.5.18,且沒有samples。


第二種方法比較煩,但是后面就省事啦,推薦這種方法。因為還沒有為16.04量身定做相應的cuda版本,先去官網(wǎng)https://developer.nvidia.com/cuda-downloads下載為ubuntu15.04適配的CUDA7.5安裝文件(runfile ( local ) 那項)cuda_7.5.18_linux.run。


先安裝可能需要的依賴項,這里參考網(wǎng)文[2],這里有些是不是不必要,有興趣的童鞋可以試驗一下。


$sudo apt-get update

$sudo apt-get install ca-certificates-java default-jre default-jre-headless fonts-dejavu-extra freeglut3 freeglut3-dev java-common libatk-wrapper-java libatk-wrapper-java-jni? libdrm-dev libgl1-mesa-dev libglu1-mesa-dev libgnomevfs2-0 libgnomevfs2-common libice-dev libpthread-stubs0-dev libsctp1 libsm-dev libx11-dev libx11-doc libx11-xcb-dev libxau-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb1-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxmu-dev libxmu-headers libxshmfence-dev libxt-dev libxxf86vm-dev lksctp-tools mesa-common-dev x11proto-core-dev x11proto-damage-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev x11proto-xf86vidmode-dev xorg-sgml-doctools xtrans-dev libgles2-mesa-dev nvidia-modprobe build-essential


$ chmod 755 cuda_7.5.18_linux.run

$ sudo ./cuda_7.5.18_linux.run --override

-------------------------------------------------------------

Do you accept the previously read EULA? (accept/decline/quit): accept

You are attempting to install on an unsupported configuration. Do you wish to continue? ((y)es/(n)o) [ default is no ]: y

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 352.39? ((y)es/(n)o/(q)uit): n

Install the CUDA 7.5 Toolkit? ((y)es/(n)o/(q)uit): y

Enter Toolkit Location [ default is /usr/local/cuda-7.5 ]:/usr/local/cuda

Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): y

Install the CUDA 7.5 Samples? ((y)es/(n)o/(q)uit): y

Enter CUDA Samples Location [ default is /home/kinghorn ]: /usr/local/cuda

Installing the CUDA Toolkit in /usr/local/cuda ...

Finished copying samples.

=========== = Summary = ===========

Driver:?? Not Selected

Toolkit:? Installed in /usr/local/cuda

Samples:? Installed in /usr/local/cuda

配置 CUDA 環(huán)境變量
$sudo vi /etc/profile.d/cuda.sh

export PATH=$PATH:/usr/local/cuda/bin

export LD_LIBRARY_PATH=$PATH:/usr/local/cuda/lib64

$ source /etc/profile.d/cuda.sh


第2步
安裝cudnn7.5 v5.0版本

先到https://developer.nvidia.com/cudnn下載cudnn-7.5-linux-x64-v5.0-ga.tgz,需要先注冊一下。下載好執(zhí)行如下命令,


$ tar xvzf cudnn-7.5-linux-x64-v5.0-ga.tgz
$ sudo cp cudnn-7.5-linux-x64-v5.0-ga/cudnn.h /usr/local/cuda/include
$ sudo cp cudnn-7.5-linux-x64-v5.0-ga/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*


第3步
下載tensorflow源碼

下載tensorflow源代碼,如果還沒有安裝git那就毫不客氣先安裝它。


$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow


--recurse-submodules參數(shù)是必須得,用于獲取tesorflow依賴的protobuf庫。


第4步
安裝Google軟件構(gòu)建工具bazel

先安裝依賴項 $ sudo apt-get install openjdk-8-jdk


下載最新的bazel安裝包
$ wget https://github.com/bazelbuild/bazel/releases/download/0.2.3/bazel-0.2.3-installer-linux-x86_64.sh

進入bazel-0.2.3-installer-linux-x86_64.sh所在目錄,
$ chmod +x bazel-0.2.3-installer-linux-x86_64.sh

$ ./bazel-0.2.3-installer-linux-x86_64.sh --use$ 或者

$ bash ./bazel-0.2.3-installer-linux-x86_64.sh

安裝程序會將bazel安裝到$HOME/bin目錄下,需要把這個目錄加入PATH,把下面這句放到你的~/.bashrc里
export PATH="$PATH:$HOME/bin"


第5步
準備工作

通過pip安裝numpy sweel。

$ Pip install numpy wheel (其實上一個帖中我們已經(jīng)在virtualenv虛擬環(huán)境中安裝好了numpy,wheel了,那么此步可省)

接下來再裝swig,發(fā)現(xiàn)pip裝不了,退出虛擬環(huán)境,在系統(tǒng)中直接安裝它。


$ sudo apt-get install swig


第6步
配置

做了這么多準備工作,終于到了重點步驟啦。


I) 配置tensorflow的cuda選項 ?

這里如果我們按上文第一種方法安裝cuda,則比較麻煩,需要按tensorflow的要求把cuda和cudnn的文件放置在一定目錄下,默認是/usr/local/cuda。但是$ sudo apt-get install nvidia-cuda-toolkit會把文件裝到/usr/bin,/usr/lib/x86_64-linux-gnu和/usr/include下面。為了遵循tensorflow的配置,我們采取一個不是很好但能達到目地的辦法。寫一個shell,建立一批符號鏈接,寫完執(zhí)行一下。


sudo mkdir -p /usr/local/cuda

sudo mkdir -p /usr/local/cuda/extras/CUPTI

sudo ln -s ?/usr/lib/x86_64-linux-gnu/ /usr/local/cuda/lib64

sudo ln -s ?/usr/include/ /usr/local/cuda/include

sudo ln -s ?/usr/bin/ /usr/local/cuda/bin

sudo ln -s ?/usr/lib/x86_64-linux-gnu/ /usr/local/cuda/nvvm

sudo ln -s ?/usr/lib/x86_64-linux-gnu/ /usr/local/cuda/extras/CUPTI/lib64

sudo ln -s ?/usr/include/ /usr/local/cuda/extras/CUPTI/include


這里相當于欺騙了tensorflow,讓它認為cuda的位置已經(jīng)放好了。接下來配置一下,很多地方只要按回車,只是在顯卡計算力那步,根據(jù)你自己顯卡的情況輸入,我的low卡是5.0。如果安裝用第二種方法安裝cuda的,那么cuda文件本來就在tensorflow想要的位置,那就更方便了,下面幾個地方填寫一下版本號即可。


II) 執(zhí)行命令

$ ./configure
Please specify the location of python. [Default is /usr/bin/python]:
Do you wish to build TensorFlow with GPU support? [y/N] y
GPU support will be enabled for TensorFlow Please specify which gcc nvcc should use as the host compiler. [Default is /usr/bin/gcc]: /usr/bin/gcc-4.9
Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: ?
Please specify the location where CUDA 7.5 toolkit is installed. Refer to README.md for more details. [default is: /usr/local/cuda]: /usr/local/cuda
Please specify the Cudnn version you want to use. [Leave empty to use system default]: ?
Please specify the location where the cuDNN 4.0.4 library is installed. Refer to README.md for more details. [default is: /usr/local/cuda]: /usr/local/cudnn-r4-rc/
Please specify a list of comma-separated Cuda compute capabilities you want to build with. You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus. Please note that each additional compute capability significantly increases your build time and binary size. [Default is: \"3.5,5.2\"]: 5.0
Setting up Cuda include
Setting up Cuda lib64
Setting up Cuda bin
Setting up Cuda nvvm
Setting up CUPTI include
Setting up CUPTI lib64
Configuration finished


第7步
編譯和測試

好了,開始編譯吧,但是只是開始,前路漫漫,還不知道會發(fā)生什么情況。


$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer


在編譯過程中會陸陸續(xù)續(xù)出現(xiàn)如下一些問題,或許搞定一個又來一個,
INFO: From Compiling tensorflow/core/kernels/ adjust_contrast_op_gpu.cu.cc: # Omitting warnings
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.1/include/mwaitxintrin.h(36): error: identifier
"__builtin_ia32_monitorx" is undefined
/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.1/include/mwaitxintrin.h(42): error: identifier
"__builtin_ia32_mwaitx" is undefined
/usr/include/string.h: In function 'void* __mempcpy_inline(void*, const void*, size_t)':
/usr/include/string.h:652:42: error: 'memcpy' was not declared in this scope return (char *) memcpy (__dest, __src, __n) + __n;

這時如果沒有以前積累下來的針對類似錯誤的經(jīng)驗,那就google吧,總有人比我們早遇到這樣的問題,找到類似解決辦法。這里問題會一個一個出來,那我們也得一個一個來解決,但這里我就一次性搞定它吧。打開tensorflow/third_party/gpus/crosstool/CROSSTOOL,大概在50多行左右一次性增加紅色三行,這樣的話,gcc-5-3-1也可以編譯tensorflow,不用像某些教程那樣降級到4.9裝之類的。

cxx_flag: "-std=c++11"
cxx_flag: "-D_FORCE_INLINES"
cxx_flag: "-D_MWAITXINTRIN_H_INCLUDED"
cxx_flag: "-D__STRICT_ANSI__"

linker_flag: "-lstdc++"
linker_flag: "-B/usr/bin/"

再次編譯,這次過了半個多小時就出來結(jié)果啦,這期間可以泡杯茶或咖啡休息一下。本人在編譯中途死機了一次,多耽誤了些時間。下圖是編譯過程中的截圖,


編譯好后再按照官方的流程執(zhí)行如下命令檢驗下有沒有編譯成功。
$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu



第8步
使用pip編譯和安裝

# 以下命令,參數(shù)--config=cuda是為了編譯GPU版本

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



# 以下命令將在/tmp/tensorflow_pkg中產(chǎn)生相應的whl文件,具體的whl文件名看你編譯平臺。
$ bazel-bin/tensorflow/tools/pip_package/build_pip_ package /tmp/tensorflow_pkg
?
# 用pip在虛擬環(huán)境中安裝它
$ pip install /tmp/tensorflow_pkg/tensorflow-0.8.0-py2-none-any.whl


好了,這下真的大功告成。


第9步
測試tensorflow

運行下面例子,在代碼所在目錄里執(zhí)行

(python2.7) tensor@tensor-com:~/code/tensorflow-master$ bazel-bin/tensorflow/models/image/mnist /convolutional 或者退出代碼目錄執(zhí)行,


$ python -m tensorflow.models.image.mnist.convolutional




對比下cpu版本,雖然我的顯卡很low,但是gpu版本還是快了幾倍哦。




第10步
小結(jié)

因為ubuntu版本較新,NVIDIA還沒跟上,所以安裝過程有那么點點的艱辛,但好在有g(shù)oogle老師在。大家的系統(tǒng)和電腦配置不同,可能安裝過程會有些許不同,此文發(fā)在這里僅供大家參考。



參考文獻


[1] https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/get_started/os_setup.md

[2] https://www.pugetsystems.com/labs/hpc/NVIDIA-CUDA-with-Ubuntu-16-04-beta-on-a-laptop-if-you-just-cannot-wait-775/


總結(jié)

以上是生活随笔為你收集整理的Ubuntu 16.04 LTS下编译GPU版tensorflow的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。