例項後臺執行訓練或任務

GpuMall智算云發表於2024-05-13

後臺執行程序
在正常情況下,使用命令 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 使用方法,以及如何使用它將訓練程序放到後臺的示例:

  1. 基本 Tmux 使用
  2. 啟動一個新的 tmux 會話

tmux new -s session_name

這裡 session_name 是您給新會話指定的名字

  1. 分離 tmux 會話 在 tmux 會話中,按下 Ctrl + b然後按 d ,這將 分離 您的 tmux 會話,讓它在後臺執行。

  2. 列出所有 tmux 會話

tmux ls

這個命令將顯示所有正在執行的 tmux 會話。

  1. 重新連線到現有的 tmux 會話

tmux attach -t session_name
tmux a -t session_name

使用您之前建立的會話名字來重新連線

  1. 關閉當前 tmux 會話 在 tmux 會話中,可以透過輸入 exit 或者按下 Ctrl + d 來退出會話;當最後一個視窗被關閉時,tmux 會話也會結束。

  2. 使用 Tmux 執行訓練程序示例

  3. 啟動一個新的 tmux 會話

tmux new -s training

這將建立一個名為 training 的新會話。

  1. 在 tmux 會話中,啟動您的訓練程序

python train.py

這將開始執行您的訓練指令碼,並且訓練過程中的日誌輸出也會在這個tmux會話中列印。

  1. 一旦訓練開始執行,您可以透過按 Ctrl + b 然後按 d 來從 tmux 會話中分離,讓訓練程序在後臺繼續執行。

  2. 關閉您的SSH連線或關閉終端,您的訓練程序將在 tmux 會話中繼續執行

  3. 之後當您想要檢查訓練程序的狀態時,可以重新連線到tmux會話

tmux attach -t training

這樣,即使您的SSH連線被中斷,您的訓練程序也不會受到影響;透過 tmux 您可以隨時重新連線到會話來檢視程序的狀態或輸出。

SCREEN
screen 是一個功能強大的工具,它允許您在單個終端視窗中執行多個虛擬終端會話,並且可以在斷開連線後保持這些會話執行,以下是 screen 的基本使用方法,以及如何使用 screen 將訓練程序放到後臺的示例:

  1. 基本 Screen 使用
  2. 啟動新的 screen 會話

screen -S session_name

這裡 session_name 是您給新會話指定的名字

  1. 分離 screen 會話 在 screen 會話中,按下 Ctrl + a 然後按 d ,這將 分離 您的 screen 會話,讓它在後臺執行。

  2. 列出所有 screen 會話

screen -ls

4.重新連線到現有的 screen 會話 在 screen 會話中,可以透過輸入 exit 來退出會話,當最後一個視窗被關閉時,screen 會話也會結束。

  1. 使用 Screen 執行訓練程序示例
  2. 首先,啟動一個新的 screen 會話

screen -S training

這將建立一個名為 training 的新會話。

  1. 在 screen 會話中,啟動您的訓練程序

python train.py

這將開始執行您的訓練指令碼。

  1. 一旦訓練開始執行,您可以透過按 Ctrl + a 然後按 d 來從 screen 會話中分離,讓訓練程序在後臺繼續執行

  2. 關閉您的 SSH 連線或關閉終端,您的訓練程序將在 screen 會話中繼續執行

  3. 之後當您想要檢查訓練程序的狀態時,可以重新連線到 screen 會話

screen -r training

透過使用 screen,即使您的 SSH 連線被中斷,您的訓練程序也不會受到影響,透過 screen 您可以隨時重新連線到會話來檢視程序的狀態或輸出。

nohup
nohup 是一個命令列工具,用於在登出或關閉終端後繼續執行命令,它可以將輸出重定向到一個檔案中,使得在後臺執行的程序的輸出不會丟失,以下是如何使用 nohup 將訓練程序放到後臺並持續記錄日誌的示例:

  1. 使用 nohup 執行訓練程序示例
    1.使用 nohup 執行訓練並重定向輸出

nohup python train.py > train.log 2>&1 &

這將在後臺啟動 train.py 指令碼,並將標準輸出(stdout)和標準錯誤(stderr)都重定向到 train.log 檔案中。

  1. 檢查訓練日誌 訓練過程的輸出將被寫入到 train.log,您可以使用以下命令動態檢視日誌。

tail -f train.log

這將顯示日誌檔案的最新內容,並實時更新。

  1. 結束透過 nohup 啟動的程序
    要結束透過 nohup 啟動的程序,您需要先找到該程序的程序 ID(PID),然後使用 kill 命令終止它。

  2. 查詢程序ID

ps aux | grep train.py

這將列出所有包含 train.py 的程序,查詢相應的程序ID(通常是列出的第二列)。

  1. 結束程序 使用找到的PID來終止程序

假設 PID 為 63832

kill 63832

執行後上述命令後,如果還可以透過 ps aux | grep train.py 看到程序,則需要使用 -9 引數來強制終止

kill -9 63832

注意
請注意,直接使用 kill 命令通常會傳送一個優雅的終止訊號(SIGTERM),允許程序安全地清理和關閉,如果程序沒有響應,需要使用 kill -9 PID 強制終止。

相關文章