远程SSH连接后台训练,防止SSH中断后,训练终止

news2024/11/19 7:15:10

在云服务器上或者SSH远程服务器后台运行深度学习训练任务

在云服务器上训练深度学习模型时,我们经常会遇到这样的问题:当在终端中直接运行训练程序时,如果断开终端连接,或者在Jupyter Notebook中运行程序后关闭网页,训练进程会直接被杀死。为了避免这种情况,我们需要将训练任务转为后台运行,并确保即使关闭终端或网页,进程也能继续执行。本文将介绍如何使用setsid命令来实现这一功能。

使用setsid

一、使用setsid命令后台运行程序

setsid命令可以创建一个新的会话,并将指定的程序在这个新的会话中运行。这样,即使关闭终端或网页,程序也会在新的会话中继续运行,不会受到终端关闭的影响。

命令格式如下:

setsid bash train.sh 2 --model nextvit_small --batch-size 1024 --lr 5e-4 --warmup-epochs 30 --weight-decay 0.1 --data-path ImageNet/ >log.out 2>1&

参数说明:

  1. setsid:创建一个新的会话,并启动指定的程序。
  2. python filename.py:执行指定的Python训练脚本。
  3. > /tmp/log1:将标准输出(STDOUT)重定向到/tmp/log1文件中。
  4. 2>&1:将标准错误(STDERR)重定向到标准输出(STDOUT),这样错误信息也会写入到/tmp/log1文件中。
  5. &:将程序放到后台运行。

二、重定向日志和错误输出

在上面的命令中,>2>&1 用于重定向程序的输出和错误信息。> 将标准输出重定向到指定的文件中,而 2>&1 则将标准错误重定向到标准输出,这样两者都会写入到同一个文件中。

重定向的好处是,即使程序在后台运行,我们也可以通过查看日志文件来了解程序的运行状态和可能出现的错误。

三、后台运行程序的监控和管理

使用setsid命令启动后台程序后,我们可以使用pstophtop等命令来查看正在运行的进程。如果需要终止进程,可以使用kill命令,并指定进程的PID(进程ID)。

如果使用了setsid命令,进程会成为新的会话的领头进程,这意味着它不会接收任何来自终端的信号(如HUP信号)。因此,即使关闭终端或网页,进程也不会被杀死。

但是,如果你确实需要终止这个进程,可以使用killall命令来杀死所有指定名称的进程。例如,使用killall -9 python可以杀死所有正在运行的Python进程(注意:这可能会影响到其他不相关的Python进程,因此使用时需要谨慎)。

更精确的方法是使用ps命令找到进程的PID,然后使用kill命令来终止它。例如:

ps aux | grep python | grep filename.py
kill -9 [PID]

其中[PID]是你要终止的进程的PID。

四、注意事项

  1. 资源限制:在云服务器上运行深度学习训练任务时,需要注意资源的限制(如CPU、内存和GPU等)。确保你的训练任务不会超过服务器的资源限制,否则可能会导致服务器性能下降或崩溃。
  2. 日志管理:定期查看和管理日志文件,以避免日志文件占用过多的磁盘空间。你可以使用日志轮转工具(如logrotate)来自动管理日志文件。
  3. 安全性:确保你的云服务器和训练脚本的安全性。使用强密码、防火墙和定期更新等措施来保护你的服务器免受攻击。

使用tmux

1. 安装 tmux

首先,通过 SSH 连接到你的远程服务器。然后使用以下命令安装 tmux

sudo apt-get update
sudo apt-get install tmux

2. 启动 tmux 会话并运行程序

安装完成后,输入 tmux 启动一个新的 tmux 会话:

tmux

你会看到一个新的终端界面,这个界面就是 tmux 会话。在这个会话中,你可以运行你的网络训练程序。例如,假设你有一个 Python 脚本 train.py 需要运行:

python train.py

3. 分离 tmux 会话

现在,你的训练程序正在 tmux 会话中运行。如果你想要断开这个会话而不中断程序的运行,你可以按下 Ctrl+b,然后按下 d。这样会分离(detach)当前的 tmux 会话,你的训练程序将继续在后台运行。

4. 重新连接到 tmux 会话

当你再次登录到远程服务器时,你可以使用以下命令查看当前所有的 tmux 会话:

tmux ls

你会看到类似如下的输出:

0: 1 windows (created Thu Oct 12 10:00:00 2023) [80x24]

这里的 0 是会话的 ID。要重新连接到这个会话,你可以使用:

tmux attach -t 0

你将会重新看到之前的 tmux 会话界面,并且你的训练程序仍然在运行。

5. 其他有用的 tmux 命令

  • 创建命名会话:你可以创建一个带有特定名称的 tmux 会话,以便更容易识别。

    tmux new -s mysession
    

    要重新连接到这个命名会话:

    tmux attach -t mysession
    
  • 杀死会话:如果你不再需要某个 tmux 会话,可以杀死它。

    首先列出所有会话:

    tmux ls
    

    然后杀死特定会话(例如会话 ID 为 0):

    tmux kill-session -t 0
    
  • 在会话中打开新窗口:在 tmux 会话中,你可以按下 Ctrl+b,然后按 c 来创建一个新的窗口。

  • 在会话中切换窗口:你可以按下 Ctrl+b,然后按 p 切换到上一个窗口,或者按 n 切换到下一个窗口。

使用 screen

1. 创建一个新的 screen 会话

使用 screen -S 选项可以为你的会话指定一个描述性的名称,便于后续管理。

screen -S mysession

这里的 mysession 是自定义的会话名称,可以是任何你喜欢的字符串。

2. 在 screen 会话中运行任务

进入 screen 会话后,你可以像在普通终端中一样运行任何命令。例如,运行一个 Python 脚本:

python myscript.py

3. 分离 screen 会话(放到后台)

要暂时离开 screen 会话但保持任务运行,按下 Ctrl + A,然后按 D。这会将 screen 会话分离,并返回到你的原始终端。分离后的会话会继续在后台运行。

4. 查看所有 screen 会话

使用 screen -ls 命令可以查看当前所有正在运行的 screen 会话及其状态(附加或分离)。

screen -ls

输出示例:

There are screens on:
        12345.mysession  (Detached)
        67890.anothersession  (Attached)
2 Sockets in /var/run/screen/S-username.

注意,如果有多个会话,输出将列出所有会话及其状态。

5. 重新连接到 screen 会话

要重新连接到之前分离的 screen 会话,使用 -r 选项并指定会话名称。如果名称唯一,则可以直接使用:

screen -r mysession

如果有多个同名会话,你可能需要指定会话的 PID(从 screen -ls 输出中获取):

screen -r 12345

6. 退出并终止 screen 会话

screen 会话内部,你可以通过以下方式之一来关闭并终止会话:

  • 按下 Ctrl + D:这会关闭当前 screen 会话,并终止其中运行的所有任务(如果任务在前台运行且未被捕获到后台)。
  • 运行 exit 命令:这也会关闭 screen 会话。

注意:如果 screen 会话中有多个窗口(通过 Ctrl + A 然后按 C 创建新窗口),你需要确保关闭所有窗口或切换到要关闭的窗口上,然后再执行上述操作。

完善建议

  • 会话管理:定期查看并清理不再需要的 screen 会话,以释放系统资源。
  • 日志记录:如果需要记录 screen 会话中的输出,可以将输出重定向到文件或使用 screen 的日志功能(例如,使用 -L 选项启动会话以记录日志)。
  • 安全性:虽然 screen 本身不提供会话锁定功能,但你可以通过设置密码来增强安全性(使用 screen -X 命令设置密码)。然而,请注意,这并不能完全防止未经授权的访问;更安全的做法是使用支持锁定功能的终端多路复用器(如 tmux)。
  • 持久性screen 会话是持久的,直到你显式关闭它们。如果系统重启,你可能需要采取额外步骤来恢复会话(例如,通过保存会话状态或使用类似 autostart 的配置)。然而,请注意,在某些情况下(如系统崩溃或突然断电),screen 会话可能无法恢复。因此,建议定期保存重要数据并备份会话日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.C操作符详解,深入探索操作符与字符串处理

C操作符详解,深入探索操作符与字符串处理 C语言往期系列文章目录 往期回顾: C语言是什么?编程界的‘常青树’,它的辉煌你不可不知VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦C语言入门:解锁基础…

微信小程序 最新获取用户头像以及用户名

一.在小程序改版为了安全起见 使用用户填写来获取头像以及用户名 二.代码实现 <view class"login_box"><!-- 头像 --><view class"avator_box"><button wx:if"{{ !userInfo.avatarUrl }}" class"avatorbtn" op…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17&#xff0c;本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配

Android Java 屏幕适配 参考 今日头条适配依赖配置 添加设计屏幕尺寸 设置字体大小 通过切换不同屏幕尺寸查看字体大小 设置文本宽高 通过切换不同屏幕尺寸查看文本宽高 Android Compose 屏幕适配 <

从视频帧生成点云数据、使用PointNet++模型提取特征,并将特征保存下来的完整实现。

文件地址 https://github.com/yanx27/Pointnet_Pointnet2_pytorch?spm5176.28103460.0.0.21a95d27ollfze Pointnet_Pointnet2_pytorch\log\classification\pointnet2_ssg_wo_normals文件夹改名为Pointnet_Pointnet2_pytorch\log\classification\pointnet2_cls_ssg "E:…

Websocket如何分块处理数据量超大的消息体

若我们服务端一次性最大处理的字节数是1M,而客户端发来了2M的数据&#xff0c;此时服务端的数据就要被切割成两次传输解码。Http协议中有分块传输&#xff0c;而在Websocket也可以分块处理超大的消息体。在jsr356标准中使用javax.websocket.MessageHandler.Partial可以分块处理…

论文复现_How Machine Learning Is Solving the Binary Function Similarity Problem

1. 内容概述 前言&#xff1a;此代码库支持 USENIX Security 22 论文 《How Machine Learning Is Solving the Binary Function Similarity Problem》&#xff0c;作者包括 Andrea Marcelli 等人&#xff0c;提供了相关代码、数据集和技术细节。 关键内容&#xff1a;技术报告…

【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记&#xff1a;学习空间变换的三种数学表达形式。 文章目录 1. 旋转矩阵1.1 向量运算1.2 坐标系空间变换1.3 变换矩阵与齐次坐标 2. 旋转向量和欧拉角2.1 旋转向量2.2 欧拉角 3. 四元数 1. 旋转矩阵 1.1 向量运算 对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 …

【WPF】Prism学习(六)

Prism Dependency Injection 1.依赖注入&#xff08;Dependency Injection&#xff09; 1.1. Prism与依赖注入的关系&#xff1a; Prism框架一直围绕依赖注入构建&#xff0c;这有助于构建可维护和可测试的应用程序&#xff0c;并减少或消除对静态和循环引用的依赖。 1.2. P…

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

UniAPP快速入门教程(一)

一、下载HBuilder 首先需要下载HBuilder开发工具&#xff0c;下载地址:https://www.dcloud.io/hbuilderx.htmlhttps://www.dcloud.io/hbuilder.html 选择Windows正式版.zip文件下载。下载解压后直接运行解压目录里的HBuilderX.exe就可以启动HBuilder。 UniApp的插件市场网址…

PyAEDT:Ansys Electronics Desktop API 简介

在本文中&#xff0c;我将向您介绍 PyAEDT&#xff0c;这是一个 Python 库&#xff0c;旨在增强您对 Ansys Electronics Desktop 或 AEDT 的体验。PyAEDT 通过直接与 AEDT API 交互来简化脚本编写&#xff0c;从而允许在 Ansys 的电磁、热和机械求解器套件之间无缝集成。通过利…

SpringBoot源码解析(四):解析应用参数args

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args 目录…

【Linux】指令 + 重定向操作

Linux基本指令 一.Linux基本指令1.mv&#xff08;重要&#xff09;2.cat3.more和less&#xff08;重要&#xff09;4.head和tail5.date6.cal7.find&#xff08;重要&#xff09; 二.Linux相关知识点1. Linux系统中&#xff1a;一切皆文件2. 重定向操作1. 输出重定向2. 追加重定…

【精通 Readline 库】:优化 Shell 外壳程序的艺术

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

ESP-IDF VScode 项目构建/增加组件 新手友好!!!

项目构建 1.新建文件夹&#xff0c;同时在该文件夹内新建.c和.h文件 如图所示&#xff0c;在components中新建ADC_User.c、ADC_User.h、CMakeLists.txt文件。当然这里你也可以不在components文件夹内新建文件&#xff0c;下面会说没有在components文件夹内新建文件构建项目的方…

玩转N1盒子:速刷OpenWRT软路由系统并实现公网访问管理

文章目录 前言1. 制作刷机固件U盘1.1 制作刷机U盘需要准备以下软件&#xff1a;1.2 制作步骤 2. N1盒子降级与U盘启动2.1 N1盒子降级2.2 N1盒子U盘启动设置2.3 使用U盘刷入OpenWRT2.4 OpenWRT后台IP地址修改2.5 设置旁路由&无线上网 3. 安装cpolar内网穿透3.1 下载公钥3.2 …

机器学习4

九、线性回归 1、概念 假设存在多个点&#xff0c;需要使用一条线来保障尽量拟合这些点&#xff0c;寻找这条线就叫回归。 机器学习中一种有监督学习的算法,回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系。 2、损失函数 存…

【Java EE初阶---多线程(初阶)】初识计算机

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java &#xff0c;Java数据结构 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录…

网络安全之国际主流网络安全架构模型

目前&#xff0c;国际主流的网络安全架构模型主要有&#xff1a; ● 信息技术咨询公司Gartner的ASA&#xff08;Adaptive Security Architecture自适应安全架构&#xff09; ● 美国政府资助的非营利研究机构MITRE的ATT&CK&#xff08;Adversarial Tactics Techniques &…