使用Conda虛擬環境在服務器后臺運行Python腳本,并檢查GPU分配
在服務器開發環境中,我們需要確保Python腳本運行在指定的Conda虛擬環境中,并且確認是否正確分配了GPU資源。本文將通過一個完整的start.sh
腳本,完成以下功能:
- 安裝Miniconda、查詢虛擬環境位置;
- 創建并激活指定的虛擬環境(如
test
);- 檢查是否分配GPU給Python腳本;
- 在后臺運行Python腳本。
一、安裝 Miniconda
如果服務器尚未安裝Conda,可以按照以下步驟安裝 Miniconda;若已經安裝,可跳過。
1. 下載Miniconda安裝包
根據服務器的操作系統下載對應版本的Miniconda:
-
Linux(64位系統):
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
-
macOS(Intel芯片):
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
-
macOS(Apple Silicon芯片):
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
2. 安裝Miniconda
運行以下命令安裝Miniconda:
bash Miniconda3-latest-Linux-x86_64.sh
安裝過程中按提示操作,選擇默認路徑(如:/root/miniconda3
)。安裝完成后,運行以下命令加載Conda:
source ~/miniconda3/etc/profile.d/conda.sh
3. 驗證安裝是否成功
運行以下命令檢查Conda是否安裝成功:
conda --version
如果輸出Conda的版本號,則說明安裝成功。
二、創建Conda虛擬環境
完成Miniconda安裝后,按照以下步驟創建虛擬環境:
1. 創建虛擬環境
運行以下命令創建一個名為test
的虛擬環境,并安裝指定的Python版本(如 3.9):
conda create -n test python=3.9 -y
2. 激活虛擬環境
激活test
虛擬環境:
conda activate test
3. 安裝依賴包
在虛擬環境中安裝需要的依賴包,比如numpy
(若不需要,可跳過):
conda install numpy -y
4.編寫測試腳本mian.py
import time
import datetimedef main():print("Python腳本開始運行...")while True:current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")print(f"當前時間: {current_time}")time.sleep(5) # 每5秒打印一次if __name__ == "__main__":main()
三、腳本內容
簡易版start.sh
,包含激活環境、后臺運行Python腳本,并將日志保存到output.log:
#!/bin/bash# 啟用嚴格模式
set -e# 1. 激活Conda虛擬環境
source ~/miniconda3/etc/profile.d/conda.sh
conda activate test# 2. 后臺運行Python腳本
nohup python main.py > output.log 2>&1 &
echo "Python腳本已經在后臺運行,日志輸出到output.log。"
升級版start.sh
,包含激活環境、檢查GPU分配、后臺運行Python腳本,檢查是否已有腳本運行、保存運行日志的功能:
#!/bin/bash# 啟用嚴格模式:遇到錯誤或未定義變量時立即退出腳本
set -e # 遇到錯誤退出
set -u # 使用未定義變量時退出# 1. 初始化Conda環境
# 確保Conda能夠正常工作
conda init bash
source ~/miniconda3/etc/profile.d/conda.sh# 2. 查詢Conda虛擬環境列表并激活指定環境
# 檢查虛擬環境是否存在
ENV_NAME="test"
if ! conda env list | grep -q "$ENV_NAME"; thenecho "虛擬環境 $ENV_NAME 不存在,請檢查環境名稱或創建環境!"exit 1
fi# 激活虛擬環境
conda activate $ENV_NAME
echo "已激活Conda虛擬環境:$ENV_NAME"# 3. 檢查GPU是否可用
# 使用nvidia-smi檢測GPU,并檢查是否分配給任務
if command -v nvidia-smi &> /dev/null; thenecho "檢測到GPU環境,當前GPU信息如下:"nvidia-smi
elseecho "未檢測到GPU,將使用CPU運行。"
fi# 4. 檢查是否已有腳本實例在運行
# 假設需要運行的Python腳本名為main.py
PYTHON_SCRIPT="main.py"# 查找運行中的腳本進程
RUNNING_PID=$(pgrep -f "$PYTHON_SCRIPT" || echo "")if [ -n "$RUNNING_PID" ]; thenecho "檢測到正在運行的腳本進程,PID:$RUNNING_PID,正在終止該進程..."kill -9 "$RUNNING_PID"echo "已終止進程 $RUNNING_PID。"
elseecho "未檢測到正在運行的腳本,準備啟動新任務。"
fi# 5. 后臺運行Python腳本并檢查GPU分配
# 使用nohup后臺運行Python腳本,并將日志保存到output.log
nohup python "$PYTHON_SCRIPT" > output.log 2>&1 &
NEW_PID=$!
echo "Python腳本 $PYTHON_SCRIPT 已在后臺運行,日志輸出到output.log。"
echo "新任務PID:$NEW_PID"# 6. 等待一段時間后檢查GPU使用情況
sleep 5
if command -v nvidia-smi &> /dev/null; thenecho "當前的 GPU 使用情況如下:"nvidia-smi | grep python || echo "未檢測到Python進程使用GPU。"
elseecho "無法檢測GPU使用情況,請確認GPU配置是否正確。"
fi
四、運行腳本
完成腳本編寫后,按照以下步驟運行:
1. 賦予執行權限
為腳本添加執行權限:
chmod +x start.sh
2. 啟動腳本
運行腳本有兩種方式:
-
方式 1:直接運行腳本:
./start.sh
-
方式 2:使用
bash
啟動腳本:bash start.sh
兩種方式效果相同,任選一種即可。
五、檢查腳本運行狀態
1. 查看日志
腳本運行的日志會保存在 output.log
文件中,可以通過以下命令查看:
tail -f output.log
2. 查看后臺任務
通過以下命令查看正在運行的 Python 腳本:
ps -ef | grep main.py
3. 停止后臺任務
如果需要手動停止后臺任務,可以通過 kill
命令終止:
kill <PID>
其中 <PID>
是運行的任務進程 ID。
六、總結
通過本文,我們學習了如何從頭安裝 Miniconda,創建一個名為 test
的虛擬環境,并使用 start.sh
腳本在服務器后臺運行 Python 腳本。腳本實現了以下功能:
- 自動激活指定的 Conda 虛擬環境;
- 檢查 GPU 是否可用,并確認 GPU 分配是否正確;
- 檢查是否已有任務在運行,如果有則終止;
- 后臺運行 Python 腳本,并將日志保存到文件。
希望本文對你有所幫助!如果你有其他問題或建議,歡迎在評論區留言!