一、用Xshell
名稱可以隨便改,填入主機IP和端口號,點擊連接輸入密碼即可。
二、GPU狀態查看
watch -n 1 nvidia-smi #其中,--n是代表刷新時間,1就是每秒刷新一次;
或者直接nvidia-smi
三、傳輸文件
四、運行代碼
cd切換到文件目錄,conda activate **環境;conda env list可以查看當前所有的環境
python xxx.py
不過我們可能需要並行運行多種參數的代碼(轉https://blog.csdn.net/qq_41105401/article/details/111166929)
在命令后面加上&即可讓命令在后台執行。為了能看到訓練日志,可以使用>將輸出重定向到一個文件中(否則會直接打印到屏幕上)
運行的時候代碼中要調的參數用argparse(比較常見的東西,如果你讀別人的代碼的話幾乎都是用這個的)
比如要調整dropout參數和lr參數:
python train.py --dropout=0.6 --lr=0.005 > log_001.txt &
用jobs命令可以查看后台任務的運行狀況(任務號、進程號、stopped、running等),在前台運行的程序用ctrl+z可以stop它並丟到后台,用bg [任務號] (不含方括號,介紹linux命令的文檔都是這種格式哦)命令可以讓stopped的任務繼續在后台跑,用fg[任務號]命令可以讓后台的任務來前台執行。
為了防止忘記上面調了那些參數,可以把命令寫成shell腳本,即創建一個xxx.sh文件,把上面的這條命令放進去,然后賦予文件權限后用 ./xxx.sh 即可
還可以在y前面加上指令指定使用哪塊GPU,比如
CUDA_VISIBLE_DEVICES=0 python train.py --dropout=0.6 --lr=0.005 > log_001.txt &
就是使用0號GPU
注意:對於TensorFlow用 戶而言,程序中新建Session時一定要設置gpu_options.allow_growth為True。否則 TensorFlow 會占用掉你選中顯卡的所有顯存
有時候可能想要跑多個參數,可以把多個參數放到.sh文件中讓它一個一個跑,然后就可以愉快地摸魚去啦~
如何讓代碼在后台運行
$ nohup python test.py
這樣執行的時候會將代碼放在服務器后台執行,你的終端是看不到運行過程的,期間運行的結果(代碼運行過程中打印出來的)會在一個生成的nohup.out文件中保存。
另一種方法:screen
可以簡單的認為用這個命令你可以為不同的任務開不同的窗口,這個窗口之間是可以切換的,同時,窗口和你的會話連接基本上沒有任何區別,這樣你可以在開一個連接的時候同時干多件事情,並且在終端看得到運行過程的同時而不會由於斷網而導致代碼停止運行。其常用命令如下:
screen -S name #創建一個窗口,並且為窗口命名 screen -S yolo
執行完以上命令后,就會自動跳入名為yolo的窗口,在這個窗口里可以干你想干的事情。不想呆在這個窗口時,可以通過快捷鍵Ctrl+a+D斷開這個窗口的連接而回到連接會話界面。但是這個斷開只是不顯示那個窗口,而窗口對應的任務是在后台運行的。
$screen -ls #可以查看已創建的所有窗口
執行上述指令后,可以看到窗口的名字和id,Detached說明窗口是斷開的,再次強調這里的斷開是指沒有讓他顯示,其對應的任務是在后台執行的。
重新連接Detached的窗口:如果想看其中一個窗口任務的執行狀態,可以通過指令:$screen -r ssd #重新連接到yolo窗口,顯示其運行過程。
殺死某個窗口
- 如果想直接停止某個窗口任務的運行,可以直接通過殺死id的方式 $kill -9 28475 #終止ssd窗口對應任務的運行,同時殺死該窗口 執行完以上指令再看存在的窗口時后會發現只剩名為yolo的窗口了
- 在該窗口內敲
exit,
就可以徹底刪除該窗口以及窗口內的作業 - -wipe 檢查目前所有的screen作業,並刪除已經無法使用的screen作業。
窗口連接不上的情況
用 screen -ls, 顯式當前狀態為Attached, 但當前沒有用戶登陸些會話。screen此時正常狀態應該為(Detached)
此時用screen -r ,怎么也登不上。最后找到解決方法:screen -D -r <session-id>
-D -r 先踢掉前一用戶,再登陸。
user@ubuntu-Super-Server:~/code$ screen -lsThere is a screen on: 28113.yolo (2017年11月27日 19時57分26秒) (Detached)
總結一下,screen可以實現代碼在后台運行時的可視化,同時,能在開一個會話連接時創建多個窗口處理不同的任務。用起來也很方便。
其他
使用如下指令的前提是安裝好了NVIDIA的驅動(cuda。。)。
$ CUDA_VISIBLE_DEVICES=2 python test.py
在使用gpu版本的tensorflow時,跑對應的代碼(如果代碼中沒有明確指定用哪個gpu跑)默認會調用所有的gpu,使用如上命令后可以指定所使用的gpu。
$ nvidia-smi
執行上述指執行上述指執行上述指執行上述指執行上述指令可以查看服務器上gpu的使用狀況。