DL training on GPU management


License
MIT
Install
pip install gpulimit==0.1.1

Documentation

gpulimit: 使用GPU(机器学习算法)的任务队列管理

这是一个任务队列自动调度的程序。

研究机器学习算法,针对不同参数,常常需要跑多组实验。而机器学习的算法通常占用大量的内存、显存。通常无法同时运行多组程序。

本调度程序可以自动安排不同GPU上的任务数量,自动调度,同时提供前端管理界面,供手动管理。

install

源码安装

git clone https://github.com/lichunown/gpu-limit.git
cd gpu-limit
python setup.py install

pip 安装

本项目已上传pypi,可直接通过pip安装

pip3 install gpulimit

usage

本程序使用linux socket进行交互,后台gpulimit_server动态调度,前台gpulimit发送命令,获取信息。

启动后台服务

gpulimit_server # 直接启动
nohup gpulimit_server & # 后台运行

前台命令

$ gpulimitc help

GPU Task Manage:
    usage:

        client.py -h                  show help
        gpulimit add [cmds]           add task [cmds] to gpulimit queue.


    other commands:

        help [cmd]                    show help
        add [cmds]                    ls GPU task queue status
        ls                            ls GPU task queue status
        show [id]                     show task [id] details.
        rm [id]                       remove task [id] from manage, 
        							  	if task is running, kill it.
        							  
        kill [id]                     kill task [id]
        move [id] [index(default=0)]  move [id] to [index]
        set [name] [value]            set some property.
        start [id defalut=None]       Force start task(s).
        log [id]                      show [id] output.
        status                        show System status.
        debug [id]                    if task [id] is `CMD_ERROR`, 
                                      	use this show error traceback.

添加任务

gpulimit add [cmds]
# for example
# gpulimit add python3 main.py --lambda=12 --alpha=1
gpulimit add --priority=1 [cmds] # 改变添加任务优先级
gpulimit add --logpath="./" [cmds] # 重定向任务输出(默认在/tmp/gpulimit下)

查看任务

gpulimit ls

查看任务信息

gpulimit show [id]

查看任务输出日志

gpulimit log [task id]

同样,也支持查看gpulimit_server的后台输出:

gpulimit log main

更改调度算法参数

gpulimit set # 查看现有参数
gpulimit set [param name] [value]# 设置新参数

现有调度算法下,共有参数如下:

  • TIMER_POLLING_TIME:轮询时间
  • MAX_ERR_TIMES:最大运行次数(大于1的话,任务出错可重启)
  • SAFETY_KEEP_MEMORY:保留内存百分比(默认0.2),当内存超出80%时不再新添加任务
  • SAFETY_KEEP_GPU_MEMORY:针对单个显卡,保留显存的百分比(默认0.5),当显存超出50%时不再新添加任务

scheduling

整个系统调度抽为以下4种:

  • timer_call定时器:按照一定时间间隔运行
  • callback_process_end:单个任务结束回调函数
  • callback_add_process:用户添加任务时的回调函数
  • user_start_scheduling:用户强制运行任务调用

目前调度算法为:

  • 仅仅进行轮询,有符合条件的任务的话,每次添加1个任务(条件参考**[更改调度算法参数]**部分)

task信息:

  • priority:default=5, 越小越优先
  • status
    • 'CMD_ERROR':命令本身有问题,python报错,可用gpulimit debug [id]查看报错信息
    • 'complete':任务完成
    • 'waiting':等待调用
    • 'running':正在运行
    • 'runtime_error':任务在运行过程中出错,可能是显存爆了,也有可能是程序有问题
    • 'killed':被用户kill的正在运行的进程,用户可以通过start命令重启
    • 'paused':暂停的进程(暂停状态仍然占用GPU显存)
  • run_times:任务出错

V0.2.0

  • 重写status状态
  • 调整task调度
  • 简化调度算法

TODO list

  • change raise type, and add try except for exception break.
  • __doc__
  • kill all, range
  • add commits
  • use priority queue as task_manage.queue
  • Improve scheduling aligorithm
  • catch memory error in cmds, when cmds is python ... and usetf or pytorch.