在Thinkpad X260上運行一個CNN圖像分類的樣例程序時,發現速度特別慢,迭代一輪要將近5分鐘,那麼迭代200輪需要1000分鐘,16個小時!在看到TensorFlow相關的書籍時,總是提到GPU加速,對於這樣的問題,應該能派上用場吧。TensorFlow目前只支持NVIDIA顯卡,筆者手頭沒有,阿里雲上有GPU計算型ECS,便“按量付費”買了一臺,開始了一場“坎坷小貴”的驗證之旅。坎坷的原因是沒有找到一篇完整的指南,遇到各種的版本問題,Tensorflow作爲咕果的產品官網打不開;小貴是因爲服務器12元/小時,後來看到NVIDIA Tesla P100一塊賣40000元,好吧,也不是阿里雲搶咱的錢。下面一起來如何在阿里雲GPU計算型ECS服務器上運行TensorFlow機器學習。
友情提示:本文中使用的版本已經經過驗證,直接使用這些版本可以避免很多“坑”
購買阿里雲GPU計算型ECS
筆者購買的是ecs.gn5-c4g1.xlarge實例規格,使用Ubuntu 16.04 64位操作系統
安裝NVIDIA CUDA Toolkit
NVIDA CUDA Toolkit中含有顯卡驅動,不要提前安裝顯卡驅動,以免衝突。在NVIDA網站上找到CUDA Toolkit 9.0下載地址。
wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run
wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/1/cuda_9.0.176.1_linux-run
wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/2/cuda_9.0.176.2_linux-run
下載後依次執行,執行時可以都接受默認值,或選擇y
sh cuda_9.0.176_384.81_linux-run
sh cuda_9.0.176.1_linux-run
sh cuda_9.0.176.2_linux-run
安裝後注意將類庫路徑添加到LD_LIBRARY_PATH中:
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64
安裝cuDNN
先註冊一個NVIDIA開發者賬號並登錄,然後在下載頁面https://developer.nvidia.com/rdp/cudnn-download,下載cuDNN v7.0.5 Runtime Library for Ubuntu16.04 (Deb),下載後上傳到阿里雲服務器
然後執行
dpkg -i libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
安裝TensorFlow GPU版
執行以下的命令,安裝兼容的tensorflow-gpu:
apt-get update -y
apt-get install -y python3-pip
pip3 install --upgrade pip
pip3 install tensorflow-gpu
執行TensorFlow訓練程序驗證
如圖,訓練一輪的時間已經從Thinkpad上的5分鐘加速到了25秒,是否感覺已經從遙不可及變得指日可待了呢?
常見問題彙總
1. ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
如果你的服務器上可以搜到libcublas.so.9.0文件,因爲類庫路徑沒有添加到LD_LIBRARY_PATH中,可以添加後再試。如果搜索不到,但是存在其它libcublas.so文件,那是版本不兼容,可卸載後重新安裝CUDA 9.0再試
2. Loaded runtime CuDNN library: 7102 (compatibility version 7100) but source was compiled with 7005 (compatibility version 7000)
CuDNN版本過高,卸載後安裝7.0.5版本即可解決