最近給公司部署一套深度學習相關的環境,以tensorflow為框架。簡單整理下整個的部署過程。
tensorflow官方網站:https://www.tensorflow.org
服務器選型
我們的tensorflow是基於gpu的版本,使用的是tensorflow-gpu 1.12.0版本。既然是gpu的版本,那么首先得需要一個帶有gpu的服務器。我們這里直接使用阿里雲服務器,型號如下:
NVIDIA GPU驅動安裝
那么既然有了帶gpu的服務器,gpu驅動就必然是一個繞不開的話題。通過上面的選型我們可以知道,阿里雲的購買頁面明確給出了gpu的型號,我們需要去到gpu官方網站,根據型號選擇驅動。
通過如下頁面查找相應的GPU驅動:
https://www.nvidia.com/Download/index.aspx?lang=en-us
下載的驅動名稱示例:NVIDIA-Linux-x86_64-410.104.run
安裝的話相對比較簡單:
# 通過shell運行,然后按照提示操作即可
sh NVIDIA-Linux-x86_64-410.104.run
驗證是否正常安裝了:
[root@ctnr ~]# nvidia-smi
Tue Mar 26 11:31:34 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P4 Off | 00000000:00:08.0 Off | 0 |
| N/A 28C P8 7W / 75W | 0MiB / 7611MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
查看當前服務器顯卡的個數:
yum install -y lspci
[root@ctnr ~]# lspci|grep -i nvidia
00:08.0 3D controller: NVIDIA Corporation GP104GL [Tesla P4] (rev a1)
其中00:08.0
是顯卡的代號,通過如下方式可以查看詳細的顯卡信息:
[root@ctnr ~]# lspci -v -s 00:08.0
00:08.0 3D controller: NVIDIA Corporation GP104GL [Tesla P4] (rev a1)
Subsystem: NVIDIA Corporation Device 11d8
Physical Slot: 8
Flags: bus master, fast devsel, latency 0, IRQ 39
Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
Memory at e0000000 (64-bit, prefetchable) [size=256M]
Memory at f2000000 (64-bit, prefetchable) [size=32M]
Capabilities: [60] Power Management version 3
Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [78] Express Endpoint, MSI 00
Capabilities: [c8] Vendor Specific Information: Len=08 <?>
Kernel driver in use: nvidia
Kernel modules: nouveau, nvidia_drm, nvidia
這里是tensorflow官方給出的gpu支持:https://www.tensorflow.org/install/gpu
cuda和cudnn的安裝
tensorflow-gpu要想正常運行,除了必要的gpu驅動,還依賴cuda和cudnn兩個sdk。
下面是tensorflow-gpu版本依賴的cuda和cudnn的版本:
https://www.tensorflow.org/install/source
cuda是深度學習的sdk
cudnn是神經網絡的sdk
cuda安裝
cuda的下載地址:
https://developer.nvidia.com/cuda-90-download-archive
需要下載cuda包,以及所有的補丁文件,我這里因為是centos,所以下載的全是rpm包。直接通過yum安裝即可:
yum localinstall -y cuda-repo-rhel7-9-0-*.rpm
需要說明的是,這些包都只是本地倉庫包,也就是說,安裝了這些包,並不會真正安裝cuda,而只是把cuda的包在本地生成了一個本地yum源。這個時候,就可以直接使用yum install -y cuda
來安裝cuda了。
驗證安裝:
[root@ctnr ~]# cat /usr/local/cuda/version.txt
CUDA Version 9.0.176
cudnn的安裝
cudnn的下載地址:
https://developer.nvidia.com/rdp/cudnn-download
需要說明的是,要下載cudnn,需要先登錄,這就要求我們得要有nvidia的帳號。
這兩個包也是rpm包,直接安裝即可。
安裝完成后的驗證方式如下:
[root@ctnr ~]# cat /usr/include/cudnn_v7.h |grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#include "driver_types.h"
上面的三行,分別代表主版本、次版本以及修定版本
在上圖中,其實可以看到,除了定制的系統版本,cudnn也提供通用版本,即cnDNN Library for Linux
,下載下來是一個tar.gz的文件,我們可以通過如下方式安裝即可:
tar xf cudnn-9.0-linux-x64-v7.5.0.56.tgz
cp cuda/lib/64/libcudnn.so* /usr/local/cuda/lib64/
cp cuda/lib64/libcudnn_static.a /usr/local/cuda/lib64/
cp cuda/include/cudnn.h /usr/include/
另外,還需要說明的是,我嘗試在windows上直接下載通用版本的時候,下載的總是一個solitairetheme8為后綴的一個卡牌游戲。在linux上通過wget的方式下載,則是正常的壓縮包。
tensorflow-gpu安裝
以上配置都做好了以后,tensorflow-gpu的安裝相對倒是比較簡單。官方基於Bazel使用源碼編譯的安裝方式可以直接參考這里:https://www.tensorflow.org/install/source#build_the_package
我這里簡化部署,直接使用pip安裝:
yum install -y python36 python36-pip
pip3 install -U pip six numpy wheel mock
pip3 install -U keras_applications==1.0.5 --no-deps
pip3 install -U keras_preprocessing==1.0.3 --no-deps
pip3 install tensorflow-gpu-1.12.0
至此,tensorflow安裝完成。