遠程服務器上後臺訓練網絡,再也不用怕由於斷網而間斷訓練

首先說一下情況:

最近在遠程使用實驗室服務器的GPU訓練神經網絡的時候,我是用的服務器裏面的遠程jupyter notebook, 首先是用Xshell連接遠程的服務器, 進入conda,激活虛擬環境,然後打開遠程jupyter notebook, 當然我這裏使用jupyter notebook是自己配置的端口號(怕和別人衝突), 所以輸入的命令長這樣:

## 用xshell連接遠程服務器, 之後首先激活虛擬環境
conda activate tfenv

## 然後進入tfenv的虛擬環境,我一般在這個虛擬環境中寫notebook,做一些實驗等, 下面打開遠程的jupyter notebook
jupyter notebook --config ~/.jupyter/jpconfig.py

通過上面的第二行代碼,就可以打開我遠程配置的jupyter notebook, 由於我是自己單獨配置的端口和密碼,所以後面得加上那一串東西。

這樣,我回到自己的電腦,打開瀏覽器,輸入服務器的網址:端口號,比如:219.216.65.11:8991, 就可以打開這個遠程jupyter notebook了, 使用的服務器中的計算資源,所以起初用起來還是挺方便的。

但是使用遠程jupyter會有一個問題的,實時操作還可以,但是如果是要訓練一個非常複雜的神經網絡,我們肯定不可能看着它訓練,一般都是讓它自己在那訓練然後幹別的事情,這時候如果突然斷網了, xshell就連不上服務器了,這樣導致的問題就是開的那個jupyter notebook的那個進程就不能用了,也就是斷了服務。 我們的網絡就中斷訓練了, 這時候即使重新連接也不好使,畢竟我們的jupyter是需要一系列命令才能開啓的。

這一直是個很頭疼的事情,因爲最近我訓練的網絡一般需要7-8個小時,而每次訓練個3-4個小時,網就不穩定,斷一下子就前功盡棄,並且xshell是ssh連接的,還非常容易斷,對於遠程jupyter notebook來講,這個非常難弄,雖然我訓練的網絡設置了斷點,但是總不能每次都得時不時的看看啥時候斷了,然後再連接,然後從斷點開始吧,非常容易打亂幹別的事情的思路, 所以後來發現了一個方法: 服務器後臺訓練神經網絡,即使斷網了,Xshell斷了也沒有關係了

從網上搜了一些實現上面的方式, 什麼screen, tmux這一些都比較好用,但是安裝的時候我發現我不是root, 也沒有權限,竟然安裝不上, 所以我又發現了一個Linux自帶的一個命令: nohup命令, 這個解決了我的煩惱,所以我記錄一下這個是怎麼用的, 把命令放入後臺非常之簡單:

nohup jupyter notebook --config ~/.jupyter/jpconfig.py &

只需要在我打開jupyter notebook前面加一個nohup,後面加一個&, 這樣就把這個操作放入了後臺運行,可以用jobs -l看到這個進程
在這裏插入圖片描述
如果用過jupyter notebook的話,我們知道輸入jupyter notebook之後會輸出類似這樣的一串東西:
在這裏插入圖片描述
而放入後臺之後,很明顯發現沒有這些東西了, 這樣回到自己的電腦上輸入網址端口號,就可以愉快的進行訓練了,並且也不用擔心網斷或者xshell斷了對神經網絡的訓練產生的影響。簡直太爽。

當然,我們得記得訓練完了之後,就關閉這個後臺進程, 使用的命令是:

kill -9 PID

這個PID就是上面的那個進程號3905. 這個怎麼找呢? 就是jobs -l 然後看看哪個進程號是訓練網絡的那個命令, 用完了殺死這個進程。

注意,如果是當前的xshell斷了,我們重新連上之後, jobs -l命令就不好使了,這時候得用ps ux

即:linux下殺死nohup提交到後臺運行的程序

  • 方法1:
    如果沒有退出客戶端界面,可以先通過 “jobs” 命令查看程序是否在運行,此時只有序號沒有PID號;
    輸入命令 “jobs -l” 會顯示程序的PID號,然後通過 “kill -9 PID”殺死程序;
    輸入命令 “jobs” 查看程序是否被殺死。
  • 方法2:
    如果退出過客戶端界面,輸入 “jobs” 命令查不到正在運行的程序;
    輸入 “ps ux” 來查看所有程序的進程號PID,然後再通過 “kill -9 PID” 殺死程序;
    輸入 “ps ux” 來查看程序是否被殺死。

再介紹一個nohup.out維護管理方法(清空nohup.out), 因爲我們發現,後臺運行的這個jupyter notebook會把那些日誌,就是我們平時啓動jupyter notebook的那一串東西輸出到了一個nohup.out文件中了。 如果出現了超大號的文件簡直是令人討厭的事情,而且nohup.out會一直一直自己增長下去,如果你的服務器硬盤不給力的話,很容易把應用也掛掉(硬盤沒空間 ,啥都玩不轉),但是又不能一味的直接刪。因爲直接刪除,可能會造成應用無法打印後續的錯誤日誌,該問題常見於weblogic服務器,jboss服務器等這些大型中間件,這個在生產環境上要尤爲注意。

因此就有了我們不停止服務直接,清空nohup.out文件的方法。
兩個可以不用停止WEB服務就可以清空nohup.out的命令。

  • 第一種:cp /dev/null nohup.out
  • 第二種:cat /dev/null > nohup.out

好了, 今天的記錄到這裏結束,關於screen和tmux我沒用過,所以不能亂寫, 而今天的這個nohup我親測過,所以記錄一下。

參考博客:

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