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

前陣子參考一份外文的教程(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 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章