1. 程式人生 > >深度模型部署上雲——環境配置

深度模型部署上雲——環境配置

前陣子參考一份外文的教程(https://www.pyimagesearch.com/2018/02/05/deep-learning-production-keras-redis-flask-apache/)在雲端部署了一項深度模型web服務,其中反反覆覆最繁瑣的就是環境配置(中間出了一點波折,還曾經在在winServer上配了一次),下面撿其中重要的記錄一下。

環境:ubuntu 16.04 + apache 2.4.18 + redis 3.0.6 + 
     mod_wsgi 4.6.4 + flask 1.0.2(based on python 3.5.2)
  apachectl -v 檢視當前apache版本
  redis-server -v 檢視當前redis版本
1
2
3
4
Apache2在Ubuntu下的安裝和測試

ubuntu系統一般會自帶apache2,但注意這是一個非完整版的apache,其中剔除了如asxp這樣的編譯工具,在測試apache的hello world的時候不涉及這些,但到了要安裝mod_wsgi的時候就會報錯,告訴你缺少asxp,要解決這個問題,需要安裝額外的部件apache-dev。

(sudo) apt-get apache2-dev
1
安裝了完整的apache元件後,我們可以先測試一下,開啟apache2的服務

service apache2 start
1
預設的訪問埠在80,開啟瀏覽器,鍵入 http://localhost/ 或者 http://xxx.xxx.xxx.xxx/,正常的話應該可以看到apache2的測試頁面(這裡一般是不需要把埠號寫明的,服務控制會自動地把http類的請求轉到80埠)。 
apache2存放測試頁面的目錄是 /var/www/html,之後我們自己的web應用或是頁面一般也是放在這個目錄下。(直接放進去或是用軟連線)

CUDA和cuDNN的配置

在有GPU的裝置上使用深度學習框架,需要cuda和cuDNN的支援,在安裝之前,你需要到下面的網站檢視自己的GPU是不是支援cuda(有許多系列是不支援的) 
https://developer.nvidia.com/cuda-gpus 
到下面的網站選擇你需要的CUDA版本,找到連結後wget下載。 
https://developer.nvidia.com/cuda-toolkit-archive 
安裝的時候有可能報出警告,告訴你找不到GPU硬體驅動,如果你確定GPU是支援CUDA的,可以去檢視一下自己的驅動版本, nvidia-smi列印的資訊中就有。CUDA在Linux下的安裝過程比較簡潔,到了windows可能還要配一配環境變數。 
如果你的驅動版本確實有問題,可以到nvidia官網更新你的驅動: 
https://www.nvidia.cn/Download/index.aspx?lang=cn 
cuDNN,是一個專門用於支援深度學習的元件,CUDA安裝之後才可以安裝cuDNN,連結如下,需要填一些資訊才能下載,下載前看清楚其對硬體驅動和CUDA版本的要求。 
https://developer.nvidia.com/cudnn

python虛擬環境

我們的web應用是用python編寫的,需要python環境的支援,為了隔離不同的py版本和環境,我們構建一個虛擬環境。實際測試中發現,anaconda的體量略大,且安裝耗時,所以,我們使用更為輕便的virtualenv。 
virtualenv可以使用pip來安裝

pip install virtualenv
pip install virtualenvwrapper (額外工具,可以理解成virtualenv的一個補丁)
1
2
安裝完成,在 ~/.bashrc 中新增如下的內容:

export WORKON_HOME=/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
1
2
不少的教程裡會讓你把WORKON_HOME設定在root目錄(即 ~/)下,但由於我們是要提供web服務,root目錄本身嚴格的訪問許可權限制會使之後服務軟體無法呼叫其中的python直譯器,apache會報錯:

(13)Permission denied: mod_wsgi (pid=6099): Unable to stat Python home /root/.virtualenvs/web_app. Python interpreter may not be able to be initialized correctly. Verify the supplied path and access permissions for whole of the path.
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
1
2
3
所以,我們選擇將python虛擬環境安裝在根目錄下的一個隱藏資料夾中,用 ls -al 可以看到,.vritualenvs資料夾的許可權為755。修改.bashrc之後需要啟用操作。

source ~/.bashrc
1
我們利用ubuntu中已有的python3.5編譯器建立一個虛擬環境。

mkvirtualenv --python=/usr/bin/python3.5 venv_name
1
具體的直譯器執行檔案的路徑可以用 whereis python 檢視,虛擬環境建立完成後,用如下命令啟用

workon venv_name 
1
激活了環境後,你就可以隨意地用pip安裝需要的包了,退出環境使用:

deactivate
1
mod_wsgi安裝與配置

為了讓你的apache可以部署用python編寫的應用,需要一個介面:WSGI。它可以作為一個mod新增到apache中。mod_wsgi的安裝是之前環境配工作中最折騰人的一環,因為它有各種各樣的安裝方法,你不知道哪一種對於你來說是合適的,關於這些安裝方法,pypi上有一篇十分完整的說明:https://pypi.org/project/mod_wsgi 在嘗試了幾乎所有的安裝方法後,我發現pip安裝是最高效穩定的,安裝命令如下:

pip install mod_wsgi (雖然是pip安裝,但還是需要gcc5和asxp的支援)
1
pip安裝之後,mod_wsgi可以安裝後還需要將其連線到apache2中,使用命令

mod_wsgi-express module-config
1
檢視當前的PythonHome與.so檔案的路徑,在我的雲主機上,這條命令的返回結果是:

LoadModule wsgi_module "/.virtualenvs/keras_flask/lib/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so"
WSGIPythonHome "/.virtualenvs/keras_flask"
1
2
將上面內容新增到apache2的配置檔案 /etc/apache2/mods-available/wsgi.load (即使原本沒有這個檔案,你也可以自己新增)。配置檔案儲存之後,我們就可以讓apache2載入這個新的mod:

(sudo)a2enmod wsgi
1
mod使能之後再重啟apache2:

(sudo)service apache2 restart
1
安裝記憶體資料庫redis

安裝redis沒有經歷什麼波折,直接(sudo)apt-get redis-server 即可,之後要啟動資料庫就直接redis-server即可。redis預設的埠號是6379,當程式非正常關閉時,這個埠會被持續地佔用,想要在開就要kill掉之前的程序,釋放這個埠。
--------------------- 
作者:hikkilover 
來源:CSDN 
原文:https://blog.csdn.net/hikkilover/article/details/80899133 
版權宣告:本文為博主原創文章,轉載請附上博文連結!