Python脚本,用于记录服务器中谁使用了GPU,使用了多长时间并生成汇总报告。
监控GPU使用记录,每隔一定时间记录一次GPU使用情况
pthon3 monitor.py [--monitor-interval ${MONITOR_INTERVAL}] [--log-dir ${LOG_DIR}] [--log-time-unit ${LOG_TIME_UNIT}]
[--save-interval ${SAVE_INTERVAL}] [--log-storage-date ${LOG_STORAGE_DATE}]
[--delete-summary ${DELETE_SUMMARY}] [--check-docker ${CHECK_DOCKER}]
[--docker-as-user ${DOCKER_AS_USER}] [--print-log ${PRINT_LOG}]
可选参数:
MONITOR_INTERVAL
:监控间隔(秒),每MONITOR_INTERVAL
秒监控一次GPU使用情况,默认60秒,默认该时间段内用户一直在使用GPULOG_DIR
:日志存放的文件夹,默认./log
LOG_TIME_UNIT
:日志中记录的用户使用时常的单位,可选['day','hour','minute','second']
,默认hour
SAVE_INTERVAL
:每次写入日志的间隔(天),默认为1天,每次会写入两个日志:detail和summary, 日志格式为${DATE}_detail.csv
和${DATE}_summary.csv
,detail日志保存了每个监控间隔记录到的用户名,pid, docker容器名,使用的gpu_index,以及GPU使用率。 summary日志记录这一天每个用户使用的总GPU时常(total gpu time(LOG_TIME_UNIT
)), 总时常(used time(LOG_TIME_UNIT
))以及平均GPU使用数量(average used gpu num)。 其中,总GPU时常为使用的GPU数量*每个GPU使用的时常,总时常为占用GPU时常,无论占用了多少个GPU。平均GPU使用数量为总GPU时常/总时常。LOG_STORAGE_DATE
:日志的保存时间(天),超过保存时间的日志会被删除,默认为90天DELETE_SUMMARY
:是否删除summary日志,默认TrueCHECK_DOCKER
:是否检查在容器中启动的进程对应的容器名,如果是,则在detail日志中的container_name显示。DOCKER_AS_USER
:是否将容器当成一个用户,如果为True,则容器名格式为${USER}_xxx
,并将USER
当作同一个用户, 如果为False,则把每个容器名当成一个用户,并在容器名前加入标识&DOCKER&
PRINT_LOG
:是否打印监控信息,默认为False
根据监控记录生成开始时间到结束时间,包括开始和结束时间的汇总报告
pthon3 generate_report.py [--start-date ${START_DATE}] [--end-date ${END_DATE}]
[--log-dir ${LOG_DIR}] [--report-dir ${REPORT_DIR}]
可选参数:
START_DATE
:报告生成的开始时间,默认是END_DATE
往前一个月END_DATE
:报告生成的结束时间,默认是昨天LOG_DIR
:日志存放的文件夹,默认./log
REPORT_DIR
:报告存放的文件夹,默认./report
。报告汇总从START_DATE
到END_DATE
的summary日志,输出格式与summary日志一致。
monitor.py
,generate_report.py
中不能应对多种LOG_TIME_UNIT
的日志,不然会出现错误,如果需要更换LOG_TIME_UNIT
需要先删除之前的日志- 该脚本不能放在容器中运行,不然会找不到使用GPU的进程号的信息
- 2020.8.26更新:修改了detail日志存储方式,使其可以在同一天中进程中断时不丢失之前的记录
- 2020.8.25更新:新加入检查在容器中的pid对应容器名的功能