遠程深度學習,有這一篇小計就夠了

沒有GPU搞什么深度學習,用嘴么。

在服務器上運行代碼的時候一定一定一定要給別的用戶留出一定的使用空間

終于從紙上談兵到實際編碼操作,切忌自己獨占系統(tǒng)資源。本篇小記重點講:

  1. 怎么遠程調(diào)試代碼
  2. 怎么遠程運行代碼
  3. 深度學習的設置

零、關于遠程服務器的一些小訣竅

1. 關于怎么選擇GPU和限制顯存問題。

Tensorflow默認是占盡全部顯存的,即使你的代碼網(wǎng)絡結(jié)構(gòu)不占用很大的現(xiàn)存的時候,tf也會默認全部申請是為了在程序運行的過程中直接取用不用再申請操作顯存,所有有的時候回看到明明是一個很小的代碼卻占盡了GPU顯存,但是GPU得計算力卻還不到30%,尤其是在多個CPU的時候,每塊GPU的顯存都申請滿了,而只有一顆GPU在跑程序。所以我們有必要手動的修改下自己的代碼,只需要在關鍵的地方添上幾句代碼,就會限制顯存使用,同時還能指定跑程序的GPU。如果參數(shù)選擇的正確的話對程序的運行速度是沒有限制的。

CUDA_VISIBLE_DEVICES=0 python nn.py 

將Tensoeflow的命令行參數(shù)寫在python之前,指明你要使用的GPU,0代表第一塊GPU,0,1代表使用設備號是0和1的兩塊GPU。

使用tf.flags 傳遞參數(shù)
在session中使用限制顯存的參數(shù)


tf.app.flags.DEFINE_float('mr',0.5,'allocate GPU memory rate')
FLAGS=tf.app.flags.FLAGS
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=FLAGS.mr)
session = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

上面的GPUOptions就限制了你的顯存的使用率。并且我們使用tf.flags可以直接運行python程序的時候通過命令行參數(shù)來指定這個分配現(xiàn)存的大小。

# 使用第一塊GPU,并且只使用第一塊GPU20%的顯存做計算。
CUDA_VISIBLE_DEVICES=0 python nn.py --mr=0.2

2. 后臺運行

只需要在運行命令行之后添加一個&符號便可以將當前的進程掛到后臺。但是一定要記得如果不再使用當前進程的話,用Ctrl+c是殺不掉的,一定要使用kill命令殺線程。

在掛后臺的時候,會返給命令行一個PID,就是進程的ID號,最好記下來這個ID號,因為你手動殺進程的時候需要使用這個ID號,一定不能記錯了,否則殺了別人的進程是小事,把系統(tǒng)搞奔潰了可就麻煩了。

# -s 9 代表著強制殺掉進程,百殺百中
sudo kill -s 9 PID

有時候忘記了進程號,我們需要查找當前活躍的進程,然后找到這個進程號。

ps -ef | grep "python"

這里是兩個shell命令通過管道進行了結(jié)合,第一個ps能夠列出當前系統(tǒng)所有活躍的進程,然后通過grep 關鍵字查找就能找到帶有關鍵字的進程。找到PID(PID是輸出的第二列那個數(shù)字)再殺掉。

# 查看當前使用的登錄終端ID,
他的輸出也可以當做前面的grep的關鍵字來進行線程的查詢,
但是要記住使用同一個窗口。
tty 

最好的方法是通過你運行的終端的命令來進行關鍵詞查找,這樣最準確。

挺簡單的

3. 使用ssh-keygen 完成免密碼登錄

只使用f3一個命令就完成了免密碼登錄

4. 監(jiān)視服務器運行狀態(tài)的小命令

htop  #監(jiān)視內(nèi)存,線程,CPU運行狀態(tài)
Screen Shot 2018-01-10 at 23.16.59.png
watch -n 0.2 nvidia-smi #監(jiān)視GPU,每隔0.2s 刷新
Screen Shot 2018-01-10 at 23.17.05.png

一、 遠程調(diào)試代碼

必備條件:

  • Pycharm pro(一定要是pro版本,負責不支持以下操作)
  • Shell (有興趣的同學可以去設置zsh和iterm2)
  • conda (主要是為了服務器用戶隔離)

步驟:
Pycharm pro中有許多很牛逼很帥的高級功能,現(xiàn)在我們需要用到的是【development】功能來實現(xiàn)遠程的python腳本的修改調(diào)試。此功能在【tools】->【development】中。


選中Configuration功能進行配置

下面就是使用類ssh的功能來遠程連接主機了,請確定你已經(jīng)在遠程服務器上面添加了自己的賬戶。


配置

name則是整個配置的名稱,隨便你命名。
Type選擇SFTP。
host直接填寫遠程服務器的IP地址(例如:xxx.xxx.xxx.xxx)。
Root path則是你遠程服務器上面的代碼存放位置,我一般就是在我的用戶目錄下直接建立code,這樣比較方便。
User namePassword則是你遠程服務上的用戶名和密碼。

本地和遠程的mapping的設置

localPath就是你本地的項目上的代碼位置,如果你是用Pycharm pro直接open的項目的話,name這個地方是自動填充自己的項目位置的。
Development Path on sever '***' 則是你在服務上要上傳代碼的位置。上傳完成之后會在服務器的Root path下新建一個文件夾,就是這個名稱。
Web path這個不用管。

之后需要設置Pycharm,讓他在遠程服務器上能夠建立文件夾,這樣即使我們首次上傳也不會出現(xiàn)遠程服務器沒有文件夾的問題。
還是在之前【development】那里,這次我們選擇的是下面的【options】選項。將第五個checkbox create empty directories勾選上就可以了。

Screen Shot 2018-01-10 at 22.50.13.png

下面就可以上傳本地的項目到遠程的服務器上面了。不過在此之前請確定你遠程的服務器上有你的用戶,并且你的用戶目錄有write權(quán)限,關于用戶權(quán)限你可以用ls -l查看目錄下的文件,第一列就列出了用戶權(quán)限。請自行百度,如果你自己的用戶在你用戶目錄下沒有write的權(quán)限的話,那么即使連接上了遠程服務器也不能成功上傳,原因就是你沒有建立文件夾和文件的權(quán)限??梢允褂孟旅娴拿钚迯汀?/p>

ls -l

顯示
-rwxr-xr-x 1 root root 6444 09-22 15:33 shmwrite
-rw-r--r-- 1 root root 1443 09-22 15:33 shmwrite.c
drwxr-xr-x 2 root root 4096 09-22 17:19 test

第一個字符代表文件類型。d代表目錄,-代表非目錄。

接下來每三個字符為一組權(quán)限,分為三組,依次代表所有者權(quán)限,同組用戶權(quán)限,其它用戶權(quán)限.每組權(quán)限的三個字符依次代表是否可讀,是否可寫,是否可執(zhí)行

r 表示擁有讀的權(quán)限
w 表示擁有寫的權(quán)限
x 表示擁有可執(zhí)行的權(quán)限
- 表示沒有該權(quán)限

修改權(quán)限
可用chmod命令來修改文件權(quán)限。

sudo chmod -R XXX floderName
sudo chmod XXX fileName
sudo chown user:group fileName

前兩條命令表示改變文件屬性(文件三種屬性,read-可讀,write-可寫,x-可執(zhí)行)。按照二進制來計算沒組權(quán)限的屬性就OK了,具體的請自行學習查詢,這里不展開了。

然后我們在Pycharm pro中的項目上,鼠標右鍵菜單下部會出現(xiàn)upload to name選項,選擇以后就能完成文件的上傳了。

當我們修改了某一個文件時候,也可以單獨上傳一個文件

二、設置遠程調(diào)試解析器

遠程服務器上一般安裝有conda和virtualenv虛擬軟件,大家一定一定一定要花點時間來學習conda的虛擬環(huán)境,一定一定一定不要和別人公用虛擬環(huán)境,一般自己的虛擬環(huán)境自己維護,用自己的用戶名做前綴防止別人給你修改。這對服務器的維護和軟件的運行都是很有益處的。

假設你已經(jīng)在服務器上建立好了自己的python虛擬環(huán)境,那么下一步就是設置Pycharm的解釋器了。我們只需要將解釋器的位置設置為遠程地址就行。

首先查看你遠程服務器上的虛擬環(huán)境中的python解釋器的位置。找到anaconda的安裝位置,一般安裝的人是為一個用戶安裝的也就是root用戶,此時你需要找到root用戶下的conda的位置。然后在env文件下找到你的虛擬環(huán)境目錄,然后在/bin目錄下查找python2.7。


添加Remote Interpreters

稍后Pycharm會從遠程的服務器上pull下服務器的conda環(huán)境到本機。完成之后就能debug遠程服務器的代碼了。

調(diào)試窗口

我們可以從調(diào)試窗口第一行的啟動命令看出,此時候用的是遠程的解釋器。這樣再也不用擔心自己的筆記本運行不了了,還得一遍一遍的修改上傳再啟動。

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

相關閱讀更多精彩內(nèi)容

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