跑深度學習代碼在linux服務器上的常用操作(ssh,screen, tensorboard,jupyter)

如何連上遠程服務器

連上服務器

首先,當然得是要用自己的PC連接上服務器。如果你的PC是linux系統,那麼可以直接通過ssh指令進行遠程訪問,這裏不詳細說明。接下來我們主要說PC是windows上的操作。首先,我們要下一個用於ssh連接的工具,個人推薦的是Xshell。其打開後的界面如下圖所示:
ssh打開界面

然後我們依次文件->新建得到下圖:
在這裏插入圖片描述

輸入名稱——>主機(服務器ip地址)——>連接——>輸入在服務器上的用戶名及密碼,確定之後就會建立了連接。之後的界面就可以操作服務器上的文件了。

服務器與本地電腦之間傳輸文件

如果想往服務器上傳文件,可以安裝利用xftp,安裝之後打開左側是本地目錄,右側是服務器目錄,可以拖動相互傳輸文件。

如何讓代碼在後臺運行

由於實驗室的網實在是不穩定,所以經常遇到跑了好幾個小時的代碼快要出結果的時候卻斷網了,導致與服務器的連接中斷,代碼也就自然而然的停止運行了(至於其中的具體原因可以自行百度)。這點真的讓人很苦惱。同時,當你的ssh在執行一個代碼時,你如果不新建一個連接,你在這個連接中是無法幹其他的事情的,這一點也很不好。於是,考慮可以把代碼放到服務器後臺運行。

第一種 nohup
最開始的做法是

$ nohup python test.py
1
這樣執行的時候會將代碼放在服務器後臺執行,你的終端是看不到運行過程的,期間運行的結果(代碼運行過程中打印出來的)會在一個生成的nohup.out文件中保存。

第二種 screen (服務器安裝screen好像需要root權限,所以我沒有嘗試這個方法)

可以簡單的認爲用這個命令你可以爲不同的任務開不同的窗口,這個窗口之間是可以切換的,同時,窗口和你的會話連接基本上沒有任何區別,這樣你可以在開一個連接的時候同時幹多件事情,並且在終端看得到運行過程的同時而不會由於斷網而導致代碼停止運行。其常用命令如下:
創建一個窗口
screen -S name #創建一個窗口,並且爲這個窗口命名screenSyolo,yoloCtrl+a+D[detachedfrom28113.yolo]user@ubuntuSuperServer: /codescreen -S yolo 當你執行完以上命令後,就會自動跳入名爲yolo的窗口,在這個窗口裏可以幹你想幹的事情。 當你不想呆在這個窗口時,你可以通過快捷鍵Ctrl+a+D斷開這個窗口的連接而回到連接會話界面。即顯示如下 [detached from 28113.yolo]user@ubuntu-Super-Server:~/code
1
說明從yolo這個窗口斷開回到了會話界面。但是這個斷開只是不顯示那個窗口,而窗口對應的任務是在後臺運行的。
查看已創建的所有窗口
KaTeX parse error: Expected 'EOF', got '#' at position 12: screen -ls #̲可以查看已創建的所有窗口 執行… screen -lsThere are screens on: 28475.ssd (2017年11月27日 20時07分41秒) (Detached) 28113.yolo (2017年11月27日 19時57分26秒) (Detached)
1
重新連接Detached的窗口
如果想看其中一個窗口任務的執行狀態,可以通過如下指令:
$screen -r ssd #重新連接到yolo窗口,顯示其運行過程
殺死某個窗口
如果想直接停止某個窗口任務的運行,可以直接通過殺死id的方式 KaTeX parse error: Expected 'EOF', got '#' at position 15: kill -9 28475 #̲終止ssd窗口對應任務的運行,… screen -lsThere is a screen on: 28113.yolo (2017年11月27日 19時57分26秒) (Detached)
總結一下,screen可以實現代碼在後臺運行時的可視化,同時,能在開一個會話連接時創建多個窗口處理不同的任務。用起來也很方便。

服務器上tensorboard的使用

對於使用tensorflow的同學,tensorboard是個很好的工具。通過以下的命令可以打開tensorboard,這個port可以自己改,默認的是6006。

$tensorboard --logdir=log --port=6006
1
尷尬的是,當你在服務器上執行上段指令時,他會給你個地址讓你在瀏覽器上打開。但是,使用服務器上的瀏覽器基本是件不可能的事情!我怎麼將服務器上的信息轉到自己的電腦上呢?這時就需要用到***端口轉發***。我們最近實現這個有兩種方式:

第一種 針對win10用戶(我沒有嘗試這一種)
想必大家都知道2017年win10系統內嵌了一個linux的子系統。首先我們要啓用這個子系統。具體步驟是:打開 所有設置->更新與安全->針對開發人員然後選擇下圖中的開發人員模式。
執行完上述步驟win10會自動下載相關庫和包,下載完後在控制面板中找到程序和功能然後選擇啓用或關閉Windows功能,出現下圖菜單:
勾選適用於Linux的Windows子系統(Beta),然後重啓電腦。
重啓電腦後win+R輸入cmd,然後在dos界面輸入bash之後就會下載對應的組件,這個時間可能比較長需要耐心等待。下載完成後,輸入相應的用戶名和密碼就好了。這樣,我們就完成了win10上的linux子系統的安裝。下次打開時,直接通過win+R輸入bash即可。
接下來就是用自己電腦的linux與服務器進行ssh連接並進行端口轉發。具體步驟是:
首先win+R 輸入bash打開win10自帶的linux的子系統,在命令行輸入以下指令
$ ssh -L 16006:127.0.0.1:6006 [email protected]
1
解釋下上面的指令,127.0.0.1是自己PC的本地地址(localhost),16006代表的本地的16006端口,192.168.1.115是服務器的ip地址(同樣服務器和PC在一個局域網下)usr是在服務器上想登陸的用戶名,6006是服務器上的6006端口,上面的指令就可以實現將服務器上6006端口的信息轉發到本地主機的16006端口上。
當你建立了以上連接後,在你的xshell建立的會話連接中輸入打開tensorboard的指令後,我們在自己的電腦瀏覽器上輸入127.0.0.1:16006或者localhost:16006就可以訪問到服務器上的tensorboard的信息了。

第二種 依然是使用xshell(我用的這一種,還挺好用的)
具體做法是當你用xshell建立好連接後,點擊下圖紅框中的屬性按鈕

然後點擊屬性中的SSH下的隧道,得到如下界面
在這裏插入圖片描述
點擊添加:
在這裏插入圖片描述
將偵聽端口改爲16006(當然也可以是其他的,就是本機的端口),目標主機和源主機保持localhost不變,目標端口就是服務器上打開tensorboard對應的端口6006然後點擊確定之後,就建立好了服務器端口16006與自己電腦端口6006的轉發。然後按之前的步驟打開tensorboard,在本地瀏覽器中輸入127.0.0.1:16006或者localhost:16006就可以訪問到服務器上的tensorboard的信息了,所以說xshell真的特別好用!

注:下面的圖片後面再補上, 暫時先這樣吧。。。。。

遠程服務器上jupyter notebook的使用

在服務器上jupyter notebook也是經常被用到的,一般輸入如下命令便可以打開

$ jupyter notebook --port=8888
這裏的port默認是8888。同樣,在不能使用服務器瀏覽器的情況下想本地PC能讀到服務器8888端口的信息,也需要建立端口轉發。整個過程同tensorboard的設置類似,不過是把端口號更改就好。當端口轉發建立後。我們在服務器輸入上述指令,會得到以下輸出:

[I 23:17:08.227 NotebookApp] Writing notebook server cookie secret to /run/user/1002/jupyter/notebook_cookie_secret[I 23:17:08.275 NotebookApp] JupyterLab alpha preview extension loaded from /home/yuwei/anaconda3/lib/python3.6/site-packages/jupyterlabJupyterLab v0.27.0Known labextensions:[I 23:17:08.277 NotebookApp] Running the core application with no additional extensions or settings[I 23:17:08.280 NotebookApp] Serving notebooks from local directory: /home/yuwei[I 23:17:08.280 NotebookApp] 0 active kernels [I 23:17:08.280 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=d4846a751b41bb288ac8c38b1da7976c0677b6aa51430705[I 23:17:08.280 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).[C 23:17:08.280 NotebookApp] Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=d4846a751b41bb288ac8c38b1da7976c0677b6aa51430705
1
需要做的只是將最後一行的地址複製到本地瀏覽器然後將8888(服務器端口)改爲轉發的本地端口(如:16006或8888)就可以了。這樣我們在自己的電腦上也可以使用服務器上的jupyter notebook了,如下圖所示。

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