ubuntu18.10目標(biāo)檢測(cè)算法環(huán)境部署+開機(jī)自啟動(dòng)腳本創(chuàng)建screen下的web服務(wù)

內(nèi)容概要

  • cuda+cudnn+python環(huán)境安裝
  • ubuntu18的開機(jī)自啟動(dòng)腳本
  • screen服務(wù)開啟

以我個(gè)人的實(shí)踐來看,把python開發(fā)的算法封裝成webserver的服務(wù)供前端程序調(diào)用是個(gè)不錯(cuò)的方案,解決了不同語(yǔ)言直接做接口的復(fù)雜性,同時(shí)后期的運(yùn)營(yíng)、維護(hù)、監(jiān)控也比較方便。但是python的環(huán)境部署確實(shí)比較麻煩的,一兩臺(tái)機(jī)器還行,大規(guī)模部署的話幾十上百臺(tái)機(jī)器想想就頭大,正規(guī)的做法是用docker,這里先撇開不談。但其實(shí)條件允許的話,可以在一臺(tái)機(jī)器上部署環(huán)境,然后將系統(tǒng)鏡像用systemback打包,再安裝到其他機(jī)器,新環(huán)境的部署就簡(jiǎn)單了,裝完系統(tǒng),環(huán)境就ok了,再配上開機(jī)自啟動(dòng)的算法服務(wù),簡(jiǎn)直完美(ubuntu18親測(cè)有效)。

cuda+cudnn+python環(huán)境安裝

安裝文件自行下載,這里提供我的安裝包供參考鏈接:https://pan.baidu.com/s/1WShQSF94iQYPwNX4kwle6A
提取碼:slqs

安裝cuda環(huán)境網(wǎng)上教程非常多,這里不再贅述。需要注意cuda和cudnn版本匹配,顯卡驅(qū)動(dòng)版本、以及gcc版本需注意。下面以cuda10.1+cudnn7+nvidia驅(qū)動(dòng)440+Anaconda3-5.2.0為例,列舉下可能的操作:

  • 卸載之前存在的cuda或驅(qū)動(dòng)
sudo /usr/bin/nvidia-uninstall
sudo apt-get purge nvidia*
  • 安裝驅(qū)動(dòng)
編輯:
sudo nano /etc/modprobe.d/blacklist.conf
加入:
blacklist nouveau
options nouveau modeset=0
Ctrl+O保存,Ctrl+X退出
sudo update-initramfs -u
最好重啟下
lsmod | grep nouveau 無(wú)輸出即可
  • gcc/g++降級(jí)
apt-get install gcc-7 g++-7

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50
sudo update-alternatives --config gcc命令查看gcc的默認(rèn)版本
  • 安裝cuda
chmod +x cuda_10.1.168_418.67_linux.run
sudo ./cuda_10.1.168_418.67_linux.run
進(jìn)入界面后 空格取消驅(qū)動(dòng)安裝選項(xiàng)
等待安裝完成
設(shè)置環(huán)境變量:
sudo nano ~/.bashrc
export CUDA_HOME=/usr/local/cuda-10.1
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}
Ctrl+O保存
source ~/.bashrc 使生效
輸入nvcc -V驗(yàn)證

-cudnn安裝

sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb
deb解壓安裝即可,壓縮包的話需要拷貝文件到對(duì)應(yīng)的cuda文件夾
  • Anaconda安裝
這里需要注意,如果是安裝在用戶目錄下,打包鏡像安裝到其他機(jī)器上會(huì)導(dǎo)致python無(wú)法使用,因?yàn)橛脩裘菍懰涝诃h(huán)境變量中了。建議安裝在非用戶目錄,我這里安裝路徑是/usr/local/anaconda3  供參考。
sudo sh Anaconda3-5.2.0-Linux-x86_64.sh

anaconda和cuda環(huán)境變量

ubuntu18的開機(jī)自啟動(dòng)腳本

這部分走了不少?gòu)澛罚饕窍胱詥?dòng)腳本里能實(shí)現(xiàn)在創(chuàng)建的screen下開啟算法服務(wù),這樣的話后期監(jiān)控,直接screen -r name進(jìn)入查看即可,而且是真后臺(tái)運(yùn)行,各種優(yōu)點(diǎn)吧。實(shí)現(xiàn)過程中遇到了不少問題,如conda虛擬環(huán)境無(wú)法進(jìn)入、環(huán)境變量未激活、啟動(dòng)腳本不執(zhí)行等。好在最終解決,這里直接給出可行方案:

  • 編輯自啟動(dòng)服務(wù)
    由于該系統(tǒng)沒有自帶其他linux版本自帶的rc.local文件的開機(jī)自啟動(dòng)方法,所以要自己生成rc.local文件。
    先編輯rc-local.service:
sudo nano /etc/systemd/system/rc-local.service
寫入:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local  
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0    
StandardOutput=tty  
RemainAfterExit=yes
SysVStartPriority=99 
 
[Install]
WantedBy=multi-user.target


然后編輯rc.local:
sudo nano /etc/rc.local
寫入:
#!/bin/bash
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
source ~/.bashrc
sh /home/online_stagex/auto_start/start.sh > /dev/null 2>&1 &
exit 0

最后執(zhí)行:
sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

rc.local中sh無(wú)法執(zhí)行?
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
rc-local.service文件
rc.local

其中,start.sh是開機(jī)自啟動(dòng)腳本,前面的路徑是存放位置,記得加上可執(zhí)行權(quán)限。chmod +x

screen服務(wù)創(chuàng)建及服務(wù)的開啟

在自啟動(dòng)腳本start.sh中定義了,啟動(dòng)要干的事情,這里面寫的是創(chuàng)建screen并開啟服務(wù)的過程。


創(chuàng)建screen

需要說明的是自啟動(dòng)腳本是root用戶下執(zhí)行的,創(chuàng)建的screen也是在root下面,查看需要sudo screen -ls指令。創(chuàng)建的screen在sh環(huán)境下,需要使能環(huán)境變量source ~/.bashrc否則無(wú)法使用py環(huán)境。發(fā)送到screen的指令太長(zhǎng)的話可以重新寫個(gè)腳本。

st_8381.sh

上面的腳本就是最終執(zhí)行python代碼的指令,在web_start_8381.py中封裝了算法服務(wù)。
重啟測(cè)試,服務(wù)開起來了,log里也有日志,進(jìn)入到screen有算法后臺(tái)輸出,完美!


screen
nvidia-smi查看gpu進(jìn)程

2021.1.12 update:
在ubuntu20.04server版上部署開機(jī)自啟動(dòng)遇到一個(gè)問題,rc.local里sh命令貌似不執(zhí)行,后來發(fā)現(xiàn)其實(shí)執(zhí)行了在sudo screen里 source 環(huán)境變量不生效,在su下重新設(shè)置環(huán)境變量即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容