深度学习实验:服务器上批量nohup运行程序

在运行python程序时,需要对多个版本或者多个方法的代码进行运行,它们往往需要设置一个系列的参数,然后使用python xxx.py运行该py文件。这种情况往往要做大量重复的没有意义的工作,所以我想通过批量生成运行命令,然后批量跑实验。


解决方案:

首先我们需要一个批量生成命令的脚本,如下:

from copy import deepcopy

def generate(param_dict):

    count=0
    final=1
    for k,v in param_dict.items():
        count=count+1
        final=final*len(v)

    res=[None]*count
    for i in range(count):
        res[i]=final*[None]

    res_count=0
    res_final=1
    for k,v in param_dict.items():

        command_num=0

        for i in range(res_final):
            for j in range(len(v)):
                if res_count==0:
                    res[0][j]={
    
    str(k):str(v[j])}
                else:
                    tmp=deepcopy(res[res_count-1][i])
                    tmp[str(k)]=str(v[j])
                    res[res_count][command_num]=tmp
                    command_num+=1
        res_count=res_count+1
        res_final=res_final*len(v)

    return res[-1]

def command(resdict,num=1,path=" ../../output/"):
    run_sh=open('./run.sh', 'w')
    for i in range(len(resdict)):
        filename=''
        command=''
        for k,v in resdict[i].items():
            if not k.startswith("python"):
                filename+="_"+k.split("-")[-1]+v
            else:
                filename+=v.split('.')[0].split(' ')[1]
            command+=(str(k)+' '+str(v)+' ')

        command+=' >'+path+filename

        for i in range(num):
            run_sh.write(command+"_"+ str(i) + " 2>&1 &\n")




if __name__ == '__main__':
    param={
    
    "python":["-u run_cifar_5Tasks.py"],"--lr":[0.1,0.01,0.001],"--drop":[0.0],"--gpu":["3"]}

    res=generate(param)
    command(res,num=5,path=" ../../output/20201103/equal/")

生成的命令样式见下图:
在这里插入图片描述
这个代码的使用方式很简单,在红框传入你需要的预先设置的参数,生成的命令会是这些参数的全组合。需要注意的是,第一对键值对必须是"python"="-u xxx.py",这是运行python文件必须的命令。在黄框设置输出日志文件要保存的位置,最前面的空格不可少
在这里插入图片描述
然后将sh文件传入到服务器,注意相对路径
然后执行该sh文件,即可nohup批量运行程序:

nohup sh xxx.sh &

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_35531985/article/details/109471242