後臺執行程序
在正常情況下,使用命令 python train.py 執行機器學習的訓練或推理任務時,該程序會掛載到系統的前臺,這意味著如果您透過SSH連線到遠端例項進行操作,一旦SSH連線因網路延遲或波動等原因中斷,與SSH會話關聯的前臺程序(包括您的訓練任務)也將被終止,這會導致您失去所有未儲存的訓練進度。
立即免費體驗:https://gpumall.com/login?type=register&source=cnblogs
為了防止由於網路中斷導致訓練程序意外關閉,推薦透過 SSH登入例項 後,使用諸如 Tmux、SCREEN 或 nohup 等工具來執行長時間的任務,這些工具可以幫助您將訓練/推理/長時間執行的程序放到後臺執行,從而在斷開SSH連線後仍能保持執行。#autodl#恆源雲#矩池雲#算力雲#恆源雲 例項遷移#autodl 官網#autodi#GpuMall#GPU雲#AutoDL#AotuDL 算力雲#GpuMall智算雲#AI#大資料#算力租賃#大模型#深度學習#人工智慧#算力變現
使用這些工具,您可以確保即使發生網路問題,您的訓練任務也不會中斷,並且在網路恢復後可以繼續監控程序的狀態。
Tmux
tmux 是一個強大的終端複用器,它允許您在一個視窗中執行多個終端會話,並且可以在斷開連線後繼續保持這些會話執行;以下是基本的 tmux 使用方法,以及如何使用它將訓練程序放到後臺的示例:
- 基本 Tmux 使用
- 啟動一個新的 tmux 會話
tmux new -s session_name
這裡 session_name 是您給新會話指定的名字
-
分離 tmux 會話 在 tmux 會話中,按下 Ctrl + b然後按 d ,這將 分離 您的 tmux 會話,讓它在後臺執行。
-
列出所有 tmux 會話
tmux ls
這個命令將顯示所有正在執行的 tmux 會話。
- 重新連線到現有的 tmux 會話
tmux attach -t session_name
tmux a -t session_name
使用您之前建立的會話名字來重新連線
-
關閉當前 tmux 會話 在 tmux 會話中,可以透過輸入 exit 或者按下 Ctrl + d 來退出會話;當最後一個視窗被關閉時,tmux 會話也會結束。
-
使用 Tmux 執行訓練程序示例
-
啟動一個新的 tmux 會話
tmux new -s training
這將建立一個名為 training 的新會話。
- 在 tmux 會話中,啟動您的訓練程序
python train.py
這將開始執行您的訓練指令碼,並且訓練過程中的日誌輸出也會在這個tmux會話中列印。
-
一旦訓練開始執行,您可以透過按 Ctrl + b 然後按 d 來從 tmux 會話中分離,讓訓練程序在後臺繼續執行。
-
關閉您的SSH連線或關閉終端,您的訓練程序將在 tmux 會話中繼續執行
-
之後當您想要檢查訓練程序的狀態時,可以重新連線到tmux會話
tmux attach -t training
這樣,即使您的SSH連線被中斷,您的訓練程序也不會受到影響;透過 tmux 您可以隨時重新連線到會話來檢視程序的狀態或輸出。
SCREEN
screen 是一個功能強大的工具,它允許您在單個終端視窗中執行多個虛擬終端會話,並且可以在斷開連線後保持這些會話執行,以下是 screen 的基本使用方法,以及如何使用 screen 將訓練程序放到後臺的示例:
- 基本 Screen 使用
- 啟動新的 screen 會話
screen -S session_name
這裡 session_name 是您給新會話指定的名字
-
分離 screen 會話 在 screen 會話中,按下 Ctrl + a 然後按 d ,這將 分離 您的 screen 會話,讓它在後臺執行。
-
列出所有 screen 會話
screen -ls
4.重新連線到現有的 screen 會話 在 screen 會話中,可以透過輸入 exit 來退出會話,當最後一個視窗被關閉時,screen 會話也會結束。
- 使用 Screen 執行訓練程序示例
- 首先,啟動一個新的 screen 會話
screen -S training
這將建立一個名為 training 的新會話。
- 在 screen 會話中,啟動您的訓練程序
python train.py
這將開始執行您的訓練指令碼。
-
一旦訓練開始執行,您可以透過按 Ctrl + a 然後按 d 來從 screen 會話中分離,讓訓練程序在後臺繼續執行
-
關閉您的 SSH 連線或關閉終端,您的訓練程序將在 screen 會話中繼續執行
-
之後當您想要檢查訓練程序的狀態時,可以重新連線到 screen 會話
screen -r training
透過使用 screen,即使您的 SSH 連線被中斷,您的訓練程序也不會受到影響,透過 screen 您可以隨時重新連線到會話來檢視程序的狀態或輸出。
nohup
nohup 是一個命令列工具,用於在登出或關閉終端後繼續執行命令,它可以將輸出重定向到一個檔案中,使得在後臺執行的程序的輸出不會丟失,以下是如何使用 nohup 將訓練程序放到後臺並持續記錄日誌的示例:
- 使用 nohup 執行訓練程序示例
1.使用 nohup 執行訓練並重定向輸出
nohup python train.py > train.log 2>&1 &
這將在後臺啟動 train.py 指令碼,並將標準輸出(stdout)和標準錯誤(stderr)都重定向到 train.log
檔案中。
- 檢查訓練日誌 訓練過程的輸出將被寫入到 train.log,您可以使用以下命令動態檢視日誌。
tail -f train.log
這將顯示日誌檔案的最新內容,並實時更新。
-
結束透過 nohup 啟動的程序
要結束透過 nohup 啟動的程序,您需要先找到該程序的程序 ID(PID),然後使用 kill 命令終止它。 -
查詢程序ID
ps aux | grep train.py
這將列出所有包含 train.py 的程序,查詢相應的程序ID(通常是列出的第二列)。
- 結束程序 使用找到的PID來終止程序
假設 PID 為 63832
kill 63832
執行後上述命令後,如果還可以透過 ps aux | grep train.py 看到程序,則需要使用 -9 引數來強制終止
kill -9 63832
注意
請注意,直接使用 kill 命令通常會傳送一個優雅的終止訊號(SIGTERM),允許程序安全地清理和關閉,如果程序沒有響應,需要使用 kill -9 PID 強制終止。