显卡使用情况查看
1. Web网页查看
在浏览器中输入GPU服务器的网址即可查看。
2. NVIDIA-SMI
3. NVITOP(推荐)
使用nvitop查看显卡使用情况。
通过nvitop自动选择满足需求的显卡
将以下代码添加至Python文件首行(第一行),使用nvitop自动选择空闲显存满足需求的显卡。
import os
from nvitop import select_devices
os.environ['CUDA_VISIBLE_DEVICES'] = ','.join(
select_devices(format='uuid', min_count=1, min_free_memory='10GiB')
)
# 以下应为Python文件原代码
...
其中min_count=1表示选择至少有1个显卡,min_free_memory='10GiB'表示选择空闲显存大于10GiB的显卡。
通过nvitop等待显卡空闲自动启动训练
适用条件
适用于没有空闲显卡来加入排队
使用以下代码启动训练脚本的main函数,通过nvitop接口持续检测可用显卡。等待显卡直到满足需求,模拟终端输入命令,执行相应Python文件来启动训练。
check_gpu.py
import os
import sys
from datetime import datetime
from time import sleep
need_devices = 1
need_gpu_memory_MiB = 10 * 1000 # 10GiB
devices = select_devices(
min_count=need_devices, min_free_memory=f"{need_gpu_memory_MiB}MiB"
)
while not devices:
sys.stdout.write(
f"\r[{datetime.now().replace(microsecond=0)}]Waiting for devices..."
)
sys.stdout.flush()
sleep(60)
device_strs = [str(device) for device in devices] # 将设备ID列表转换为字符串列表
# 程序启动时间
time_launch = datetime.now().replace(microsecond=0)
print(f"[{time_launch}]Found {len(device_strs)} CUDA devices: {devices}")
"""
模拟终端输入,根据自己实际情况修改cmd内容,以下为命令行输入'python tracking/run.py --dataset_file tracking/datasets/coco_mot.yaml'
"""
# Python脚本启动训练(可选1)
cmd = f"CUDA_VISIBLE_DEVICES={','.join(device_strs)} python tracking/run.py \
--dataset_file tracking/datasets/coco_mot.yaml"
# Shell脚本启动训练(可选2),Shell脚本中的第一行应添加`CUDA_VISIBLE_DEVICES=$1`
shell_scripts = "xxx.sh"
cmd = f"sh {shell_scripts} {','.join(device_strs)}"
os.system(cmd)
4. AutoDL微信API
使用AutoDL的微信API,自动通过AutoDL微信公众号发送指定信息。
获取API token
登录AutoDL账号,控制台(右上角)->账号(左下角)->设置->开发者token->新增token->复制token,复制token后替换下方代码中的api_token即可。
Autodl_Weixin_API.py
api_token = "" #从AutoDL获取
msg_text = f"程序跑完了!" # 自定义修改,可加入变量信息(如最优指标、训练剩余时间)
# 如果程序运行总时长超过10分钟,则调用AutoDL微信API来发送微信消息
if (datetime.now().replace(microsecond=0) - time_launch).seconds > 10 * 60:
resp = requests.post(
"https://www.autodl.com/api/v1/wechat/message/send",
json={"name": msg_text},
headers= {"Authorization": api_token},
)
注意
AutoDL官方教程中json的title和content已不可用,严格按照上述代码修改即可正常使用。