关于深度学习批量处理的一些小Tips(python)

成为时间管理大师,我休息了但是机器不能休息!

之前在实习以及学习过程中一直存在一些效率低下的问题,比如我代码调好了打算放到服务器上跑,结果服务器有人用,一点点都插不进去,怎么办?再比如我这个训练代码大概是6个小时,现在是8.00,等跑完就凌晨了,但是我还想换几个超参多跑几个模型怎么办?在后面的学习中发现其实有很多小办法提高我们的效率,解放人类,奴隶机器,这里我也分享一下,大家有更好的方法可以评论区告诉我!

批量运行程序

我想要代码运行完第一个以后,自动运行第二个,不用自己手动调,这需要怎么处理呢?
首先我们需要对代码进行处理,让代码可以通过使用命令行传入需要调整的参数。以下面一个简单的程序为例:
python通过命令行传入参数
假设我想传入的参数是 name 与 age,那么我需要对这两个参数做如上图所示的处理。在运行时,只需要 python test.py --name stu --age 18 即可。完成了上述的操作,就可以利用linux或者是windows的一些功能花式操作代码了。

使用 shell 进行 python 运行

1. Linux 上:

首先创建一个 xx.sh(xx是你的sh文件名字)文件,在第一行加入:
#!bin/bash
注:上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行;接下来就可以写入想要运行的代码,比如使用上面的简单例子:
shell文件书写示例
接下来只需要在终端运行sh xx.sh 就可以啦。运行结果就在下面啦:
在这里插入图片描述
这种使用脚本进行批量运行代码的方法可以很好的运用到我们的神经网络的训练中,如更换不同的超参数进行神经网络的训练与测试:
比如想要测试 yolov5 不同尺寸对于同一个模型的表现结果,只需要在我们的test.sh 中写入
在这里插入图片描述
接下来运行sh test.sh,他就会自动在运行完640尺寸的训练后运行1024尺寸的训练,不需要你手动卡时间,充分利用机器。

2.windows上

只需要下载安装 git,安装后,将每个 sh 文件的首行改成#!D:/Git/bin/bash(你的git的安装目录)即可。其他一切与在 linux 上相同。

使用bat 脚本

在windows不想安装git,又想批量处理代码的话,也可以使用bat脚本:
创建一个 xx.bat 文件,在第一行加入:@echo off, 表示在此语句后所有运行的命令都不显示命令行本身 . 末尾可以加入 pause,表示运行此句会暂停批处理的执行并在屏幕上显示 Press any key to continue…的提示,等待用户按任意键后继续 。如下所示:
bat文件书写示例
运行时直接输入该文件名称即可。
在这里插入图片描述

直接使用python进行批量运行

刚刚说的两种办法都是借助其他工具,那么python可以自己做到批量运行吗?当然没问题!我们可以使用 for 循环与 os.system()结合,方便快捷的完成这一操作。
system 函数可以将字符串转化成命令在服务器上运行。那么对于上面的例子,我们可以采用如下方法,新建一个python文件,写入:
在这里插入图片描述
运行时只需要运行这个单独的文件(注意路径)就可以啦。当然也可以用于神经网络的训练,比如想训练不同 batch_size 的模型:
在这里插入图片描述
上面的分享已经让我可以很好多的压榨计算机了,但是有一个问题还是没有解决,当我连接服务器进行大数据量网络训练时,我的机器需要一直保持与服务器的连接,有时候出现网络波动,连接一断训练也就中止了,我也不能一直盯着电脑看连接呀,这里也有办法!

Linux 后台保证终端交互运行的两种方式

1.Screen 命令

我想要即使我的机器与服务器的连接断开了,我也能保证我的代码可以一直在服务器上运行,就可以使用screen语句。他的功能主要有:
1.会话恢复,只要 Screen 本身没有终止,在其内部运行的会话都可以恢复。2.多窗口:所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。这里你就可以开很多个screen窗口,给他们分配不同的任务,并行压榨计算机!
3.会话共享:Screen 可以让一个或多个用户从不同终端多次登录一个会话,不管你用什么机器再次连接服务器,只需要回到你定义的screen就可以继续你的工作啦。

使用方法:
⚫ 创建一个叫 xyx 的虚拟终端
screen -S xyx
⚫ 创建好虚拟终端后,运行你的程序(与在普通终端一样),在做完想要运行的操作后,我们按 Ctrl+a,再按 d,即可保持这个 screen 到后台并回到主终端(离开终端)。
⚫ 按 ctrl+d 或者直接输入 exit 删除当前终端。
⚫ 回到这个终端只需要输入 screen -r xyx(也可以用 screen -R xyx, -R 和-r
一样,但是没有对应名称的 PID 或者 Name 时,会自动创建新的虚拟终端。)
⚫ screen 窗口内输出不能上下滚动的问题:
在做完想要运行的操作后,我们按 Ctrl+a,再按[即可进入翻页模式,按 Ctrl+c 就可以切换回输入模式。
⚫ 保存窗口内输出问题:
在创建窗口时添加选项-L 会在当前目录下生成 screenlog.0 文件。Screen -L -S xyx 注:不加选项-L,启动后,在 screen session 下按 ctrl+a H,同样会在当前目录下生成 screenlog.0 文件。第一次按下 ctrl+a H,屏幕左下角会提示 Creating logfile “screenlog.0”.,开始记录日志。再次按下 ctrl+a H,屏幕左下角会提示 Logfile “screenlog.0” closed.,停止记录日志。

那么我们可以通过结合 screen 命令与上面的批量代码的处理,保证在长时间断开服务器的基础上较高效率的完成自己的代码任务。

2. AT命令

当你好不容易调好你的代码,正准备放到服务器上跑时,发现GPU一点点空都没有了,今天的任务又完不成了,这时候要怎么办呢?当然是大胆出击,kill 掉别人的程序啦 当然是与别人沟通,询问一个别人跑完代码的一个大概时间点,再使用AT命令,就可以万事大吉啦!
AT命令:可以让 linux 系统自动在某个时间点开始运行你的程序,而不需要手动来启动它。at[参数][时间] :在一个指定的时间执行一个指定任务。
在这里插入图片描述
在这里插入图片描述
比如:在这里插入图片描述
说明在一分钟以后执行 test.sh 这个任务。
当然时间可以有多种形式进行更换,如:at 02:00 2022-4-18 表示在 2022 年 4 月 18日凌晨两点执行命令。具体命令可见上表。
或者使用 at[时间]进入 at 界面后,再输入你需要在这个时间点执行的操作,再按 ctrl+d 即可保存并离开。
在这里插入图片描述
这里是我整理的一些关于提高效率,解放双手的一些小办法!如果有什么理解不到位的地方欢迎大家批评指正哦!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值