python深度学习调参,多GPU并行运行shell脚本

  • Post author:
  • Post category:python


在不同数据集上需要不同的超参以达到最优性能,以下通过暴力搜索的方式,对不同超参进行排列组合,用循环的方式找到最优组合。

首先是python脚本的撰写,将你需要调的超参写入

import os

BS = [8,12,16,20,24]
EDL_T=[0.1,0.5,1,2,4]
SIM_T=[0.1,0.5,1,2,4]
R = [1,2,3,4]
LDR = [0.1,0.3,0.5]


for bs in BS:
    for edl_t in EDL_T:
        for sim_t in SIM_T:
            for r in R:
                for ldr in LDR:
                    file = str(bs)+'_'+str(edl_t)+'_'+str(sim_t)+'_'+str(r)+'_'+str(ldr)+'.log'
                    print("running " + file)
                    print(os.system('sh run.sh '+str(bs)+' '+str(edl_t)+' '+ str(sim_t)+' '+ str(r) +' ' + str(ldr) +' '+str(file)))

运行脚本run.sh

#!/bin/bash

BS=$1
edl_t=$2
sim_t=$3
edl_r=$4
ldr=$5
file=$6

(nohup /usr/bin/python3 train.py --loss edl --gpu 0 --lr 0.002 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/0"${file}" 2>&1) & \
(nohup /usr/bin/python3 train.py --loss edl --gpu 1 --lr 0.004 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/1"${file}" 2>&1) & \
(nohup /usr/bin/python3 train.py --loss edl --gpu 2 --lr 0.006 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/2"${file}" 2>&1) & \
(nohup /usr/bin/python3 train.py --loss edl --gpu 3 --lr 0.008 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/3"${file}" 2>&1) & \
(nohup /usr/bin/python3 train.py --loss edl --gpu 4 --lr 0.01 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/4"${file}" 2>&1) & \
(nohup /usr/bin/python3 train.py --loss edl --gpu 5 --lr 0.02 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/5"${file}" 2>&1) & \
(nohup /usr/bin/python3 train.py --loss edl --gpu 6 --lr 0.03 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/6"${file}" 2>&1) & \
(nohup /usr/bin/python3 train.py --loss edl --gpu 7 --lr 0.04 -ldr "${ldr}" -bs "${BS}" --edl_t "${edl_t}" --sim_t "${sim_t}" --edl_r "${edl_r}" > log/7"${file}" 2>&1)

我有8块卡,所以并行运行8个训练程序,不同卡分别用不同的学习率。将中间输出写入file文件中,以便查看结果。这里的nohup,表示后台运行,即使远程连接服务器的session关了,服务器仍然可以运行。想要多卡并行,采用()& ()的方式即可。

码字不易,觉得文章有用的话,别忘了一键三联 >< !



版权声明:本文为u013685264原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。