当前位置: 首页 > news >正文

使用 `screen` + `nohup` 实现高效日志记录和多环境任务管理

使用 screen + nohup 实现高效日志记录和多环境任务管理

在深度学习模型训练中,特别是在服务器上运行长时间的任务时,有效的任务管理和日志记录至关重要。我们通常需要在后台运行多个任务,同时为每个任务配置不同的 conda 环境。通过结合使用 screennohup,我们不仅可以在后台高效运行任务,还可以集中管理日志并实现环境隔离。本指南将重点介绍如何利用 screen + nohup 实现高效的日志记录和任务隔离。

一、使用 screen 配置多个 conda 环境的独立会话

当在服务器上执行多个任务时,不同任务往往依赖不同的环境。通过 screen,我们可以为每个任务创建独立的会话,在不同的 conda 环境中运行各自的任务,避免环境冲突。

步骤

  1. 创建新的 screen 会话并命名

    screen -S task_session_name
    

    这里的 task_session_name 是会话名称,可以根据任务内容自定义。此命令将开启一个新的 screen 会话。

  2. 激活特定的 conda 环境

    在新的 screen 会话中,激活任务所需的 conda 环境。例如:

    conda activate my_env
    

    这样,task_session_name 会话将运行在 my_env 环境中,后续所有命令都会在该环境下执行,实现了任务环境的独立隔离。

二、利用 nohup 后台执行任务并管理日志

激活特定 conda 环境后,为了让任务在后台持续运行,同时将输出和错误信息记录到日志文件,可以使用 nohup

nohup python train.py > task_name.log 2>&1 &

命令详解

  • nohup:使任务在终端关闭后依然继续运行。
  • python train.py:执行训练脚本 train.py
  • >:将标准输出(stdout)重定向到日志文件。
  • task_name.log:日志文件名,用于记录标准输出和错误信息。
  • 2>&1:将标准错误输出(stderr)重定向到标准输出,方便集中记录日志。
  • &:将任务置于后台执行,释放会话供其他任务使用。

查看日志

通过 nohup,所有输出都会记录在指定的日志文件中。为实时查看日志内容,通常我们会使用 tail -f 命令:

tail -f task_name.log

该命令允许我们实时监控日志的更新,非常适合单任务的日志跟踪需求。

同时查看多个日志

在多任务的情况下,我们可能需要同时查看多个日志文件。此时可以使用 multitail,它可以在同一窗口内分屏显示多个日志文件,提供一个更直观的实时日志跟踪体验。multitail 需先安装,以下是常见的安装方法:

1. 安装 multitail

  • Debian/Ubuntu 系列

    sudo apt-get install multitail
    
  • RedHat/CentOS 系列

    sudo yum install multitail
    
  • MacOS(使用 Homebrew)

    brew install multitail
    

2. 使用 multitail 查看多个日志

安装 multitail 后,可以通过以下命令在分屏中查看多个日志:

multitail task_A.log task_B.log

此命令会在一个窗口内显示 task_A.logtask_B.log 的内容更新,适用于需要同时监控多项任务的场景,如深度学习中不同模型的训练进程、同一模型在不同超参数设置下的训练日志等。

多日志查看的替代方法:并行使用 tail -f

如果不方便安装 multitail,也可以使用 tail -f 的后台运行方式同时监控多个日志文件:

tail -f task_A.log &
tail -f task_B.log &

每个 tail -f 命令会在后台运行并独立显示日志更新。这种方法虽不具备分屏效果,但在有限环境下提供了同时查看多个日志的简单替代方案。

场景示例
  • 模型训练日志监控:在实验中,我们可能同时运行多个模型或多组超参数实验。使用 multitailtail -f 同时查看日志,可以随时观察模型的训练进度、验证准确率等输出,便于发现异常情况及时调整。
  • 批处理任务监控:在批处理系统中,多个脚本任务可能同时运行,生成不同的日志文件。通过实时查看多日志文件,可以快速识别哪个任务遇到问题并进行调试。

通过这些方式,我们可以高效地监控日志,特别是在并行任务较多的深度学习训练场景下,有助于及时掌握任务状态,优化训练管理流程。

结合 screennohup 的优势

  • 后台稳定运行:任务即使在终端关闭后仍能持续运行。
  • 集中日志管理:所有输出和错误信息集中记录在日志文件中,便于后续分析与排查。
  • 多环境隔离:每个 screen 会话对应不同的 conda 环境,防止任务间环境冲突。

三、灵活使用 screen 管理不同 Conda 环境的任务

以下是利用 screennohup 实现多任务管理的完整示例。假设我们有两个不同的训练任务,各自依赖不同的 conda 环境:

示例 1:任务 A

# 创建并进入名为 task_A 的 screen 会话
screen -S task_A# 激活 A 任务所需的 conda 环境
conda activate env_A# 后台运行任务并记录日志
nohup python train_A.py > task_A-参数1=xxx.log 2>&1 &
nohup python train_A.py > task_A-参数1=yyy.log 2>&1 &

示例 2:任务 B

# 创建并进入名为 task_B 的 screen 会话
screen -S task_B# 激活 B 任务所需的 conda 环境
conda activate env_B# 后台运行任务并记录日志
nohup python train_B.py > task_B-参数1=xxx..log 2>&1 &
nohup python train_B.py > task_B-参数2=xxx..log 2>&1 &

通过这种方法,我们可以为每个任务配置独立的 conda 环境,分别记录日志文件,避免任务冲突且便于追踪任务进度。

除了 nohup 日志记录,screen 也自带日志功能,便于获取会话的实时输出。

可以在 screen 会话中执行快捷键 Ctrl + A + H,这会将会话输出记录到 screenlog.0 文件中,适合在 无需分开记录 每个命令日志的简单场景下使用。

四、清理 screen 会话以维护系统整洁

对于习惯使用 screen 的用户,系统中可能积累了许多 Detached(挂起)状态的 screen 会话。为了系统资源的清理和便于管理,我们可以批量退出这些无用的 screen 会话。

1. 清理所有 Detached 状态的 screen 会话

使用以下命令可以批量退出所有挂起的 screen 会话:

screen -ls | grep Detached | awk '{print $1}' | xargs -I {} screen -X -S {} quit
解释
  • screen -ls:列出所有当前存在的 screen 会话。
  • grep Detached:筛选出所有处于 Detached 状态的会话(即后台挂起)。
  • awk '{print $1}':提取会话 ID。
  • xargs -I {} screen -X -S {} quit:对每个会话执行 quit 命令。

这样便能清理掉所有不再使用的 screen 会话,避免了无用会话堆积带来的管理难度。

2. 直接清理 Dead(失效)的 screen 会话

对于已经 Dead 的 screen 会话(通常是因异常退出或崩溃引起的失效会话),可以使用以下命令直接清理:

screen -wipe

该命令会自动清理标记为 Dead 的会话,保持系统整洁并减少资源占用。

五、总结

借助 nohup 和日志文件,我们可以有效地简化深度学习训练任务的管理过程,避免频繁启动 screen 会话带来的复杂性。同时,灵活结合 screen 和不同的 Conda 环境,可以让我们对多个任务及其环境配置进行更高效的管理。

  • 只需一次 Conda 环境激活,所有训练任务均可在后台高效执行。
  • 日志集中管理:通过 nohup 重定向输出,将所有信息记录到日志文件中,方便查看任务进度和排查错误。
  • 便于管理多个环境和参数配置:使用 screen 为不同任务配置独立的 Conda 环境和参数,所有日志记录清晰明了。
  • 及时清理无用的 screen 会话:确保系统整洁并减少资源浪费。

希望这篇指南能帮助大家优化训练任务管理流程,提升工作效率。

相关文章:

使用 `screen` + `nohup` 实现高效日志记录和多环境任务管理

使用 screen nohup 实现高效日志记录和多环境任务管理 在深度学习模型训练中,特别是在服务器上运行长时间的任务时,有效的任务管理和日志记录至关重要。我们通常需要在后台运行多个任务,同时为每个任务配置不同的 conda 环境。通过结合使用…...

【探索数字孪生,引领未来技术】

在数字化浪潮的推动下,数字孪生技术正成为连接虚拟与现实的桥梁,它不仅是工业互联网的基石,更是智慧城市、智慧园区、智慧楼宇以及元宇宙构建的核心。为了帮助更多专业人士掌握这一前沿技术,我们荣幸地宣布,“新质技术…...

Tcp_Sever(线程池版本的 TCP 服务器)

Tcp_Sever(线程池版本的 TCP 服务器) 前言1. 功能介绍及展示1.1 服务端连接1.2 客户端连接(可多个用户同时在线连接服务端)1.3 功能服务1.3.1 defaultService(默认服务)1.3.2 transform(大小写转…...

第十一章 Vue生命周期及生命周期的四个阶段

目录 一、引言 1.1. Vue生命周期的具体阶段 1.2. 每个阶段的具体作用和常用场景 1.3. 生命周期钩子函数 ​二、代码示例 三、运行效果 一、引言 Vue生命周期是指Vue组件实例从创建到销毁的整个过程。在这个过程中,组件经历了一系列的阶段,每个阶段…...

展厅展会客流显示屏的客流统计功能如何实现

随着科技的发展,展厅和展会的管理越来越智能化。客流显示屏作为一种高效的管理工具,能够实时显示参观人数,帮助主办方更好地了解客流情况,优化资源配置。本文将详细介绍展厅展会客流显示屏的客流统计功能如何实现,分为…...

golang正则表达式的使用及举例

正则表达式很强大,在一些场合如抓包,爬虫等方面很有用。在 Go语言中,正则表达式通过标准库 regexp 提供支持。使用正则表达式可以进行字符串匹配、替换和分割等操作。 以下是正则表达式的基本使用方法及示例: 1. 导入 regexp 包 …...

Flutter杂学: iOS 上启用自动填充和关联域

下面是详细的配置和代码,以确保在 iOS 上启用自动填充和关联域(Associated Domains)功能。 配置步骤 1. 在 Apple Developer 控制台中启用 Associated Domains 登录 Apple Developer。导航至您的 App ID 设置页面。找到您要配置的 App ID&…...

接口自动化-框架搭建(Python+request+pytest+allure)

使用代码如何开展接口自动化测试。 一 选择自动化测试用例 业务流程优先,单接口靠后,功能稳定优先,变更频繁不选。 二 搭建自动化测试环境 (1)安装python编译器3.7版本以上--自行安装 (2)安…...

[论文阅读]Constrained Decision Transformer for Offline Safe Reinforcement Learning

Constrained Decision Transformer for Offline Safe Reinforcement Learning Proceedings of the 40th International Conference on Machine Learning (ICML), July 23-29, 2023 https://arxiv.org/abs/2302.07351 泛读只需要了解其核心思想即可。 安全强化学习(Safe Rei…...

工具_Nginx

文章目录 location语法介绍跨域配置https配置http重定向到https配置反向代理配置负载均衡配置upstream配置负载均衡算法(1)rr轮询(默认)(2)wrr加权轮询(weight)(3&#x…...

web开发Model1

WEB开发模式–Model 1 Model1是指基于JSPJavaBean的开发模式,JSP负责web的相关部分,包括数据的展示,请求逻辑的控制等,JavaBean负责业务的逻辑部分,包括数据的存取,业务的实现。 这是我写的一个小项目&…...

ImportError: cannot import name ‘Sequential‘ from ‘keras.models‘

报错信息 ImportError: cannot import name Sequential from keras.models错误代码示例 import tensorflow as tf from keras.models import Sequential # 报错行model Sequential()错误分析 这个错误通常发生在 TensorFlow 和 Keras 的版本不兼容时。TensorFlow 2.x 版本…...

python实战(二)——房屋价格回归建模

一、任务背景 本章将使用一个经典的Kaggle数据集——House Prices - Advanced Regression Techniques进行回归建模的讲解。这是一个房价数据集,与我们熟知的波士顿房价数据集类似,但是特征数量要更多,数据也要更为复杂一些。下面,…...

UHF机械高频头的知识和待学习的疑问

电路图如上所示: 实物开盖清晰图如下: 待学习和弄懂的知识: 这是一个四腔的短路线谐振。分别是输入调谐,放大调谐,变频调谐和本振 第一个原理图输入为75欧(应该是面向有同轴线的天线了)如下图…...

深入理解 SQL 中的 WITH AS 语法

在日常数据库操作中,SQL 语句的复杂性往往会影响到查询的可读性和维护性。为了解决这个问题,Oracle 提供了 WITH AS 语法,这一功能可以极大地简化复杂查询,提升代码的清晰度。本文将详细介绍 WITH AS 的基本用法、优势以及一些实际…...

同三维T80005JEHA-4K60 4K60超高清HDMI/AV解码器

1路HDMI1路CVBS1路3.5音频输出,HDMI支持4K60,支持1路4K60解码,1路高清转码 产品简介: T80005JEHA-4K60是一款4K60超高清解码器,支持1路HDMI/CVBS解码输出,HDMI支持4K60,适用于各种音视频解决方…...

深信服秋季新品重磅发布:安全GPT4.0数据安全大模型与分布式存储EDS新版本520,助力数字化更简单、更安全

10月23日,深信服举办2024秋季新品发布会。发布会上,深信服正式推出了最新的创新成果:实现动静态数据分类分级和数据风险自动研判分析的安全GPT4.0、具备卓越可靠性和AI勒索防护能力的分布式存储EDS新版本520。通过这些新品和能力,…...

Flutter图片控件(七)

1、加载图片 import package:flutter/material.dart;void main() {runApp(const MaterialApp(home: MyHomePage(),)); }class MyHomePage extends StatelessWidget {const MyHomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(appBar: AppB…...

JavaEE初阶---文件IO总结

文章目录 1.文件初识2.java针对于文件的操作2.1文件系统的操作---file类2.2文件内容的操作---流对象的分类2.4字符流的操作》文本文件2.4.1异常的说明2.4.2第一种文件内容的读取方式2.4.3第二种读取方式2.4.4close的方法的介绍2.4.5close的使用优化操作2.4.6内容的写入 2.3字节…...

10.28Python_pandas_csv

三、读取CSV文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本); CSV 是一…...

从Awesome List到实战:构建你的AI编程工作流与Vibe Coding环境

1. 从“Awesome List”到“Vibe Coding”实战指南:如何构建你的AI编程工作流如果你最近在GitHub上逛过,或者关注AI编程工具的圈子,大概率会刷到一个叫“Awesome Vibe Coding”的仓库。乍一看,它像是一个又一个AI工具和项目的简单罗…...

基于MCP的AI智能体:自动化与优化亚马逊DSP广告实战指南

1. 项目概述:用AI智能体管理亚马逊DSP广告如果你正在寻找一种更高效、更智能的方式来管理亚马逊需求方平台(Amazon DSP)的广告活动,那么这个项目可能就是为你准备的。作为一个在程序化广告领域摸爬滚打了十多年的从业者&#xff0…...

团队知识管理的失效:人员流动如何不导致知识流失

一、软件测试团队知识管理的特殊价值与脆弱性在软件测试领域,知识是保障产品质量的核心资产。不同于开发环节的代码沉淀,测试知识兼具显性与隐性双重属性:显性知识体现在测试用例、缺陷报告、自动化脚本等文档中,而隐性知识则蕴含…...

【研报 A110】物理AI时代的具身数据采集需求研究:国家级训练场落地,开源生态加速建设

摘要:物理AI时代,具身智能与世界模型的发展,推动具身数据采集成为下一代数据基建的核心浪潮。具身大模型对数据有着EB级的海量需求,同时对多模态、异构性与质量要求极高,当前数据缺口成为制约具身智能发展的核心瓶颈&a…...

AI代理工具化新范式:基于MCP协议的模块化连接器实践

1. 项目概述:一个面向AI代理的模块化连接器最近在折腾AI应用开发,特别是围绕AI Agent(智能体)的生态构建时,发现一个挺普遍的问题:如何让这些Agent高效、安全地连接和使用外部工具与服务?无论是…...

NCCL watchdog timeout 先别只会加 timeout:PyTorch 新出的 Flight Recorder,真正值钱的是能把第一处 collective 分歧揪出来

NCCL watchdog timeout 先别只会加 timeout:PyTorch 新出的 Flight Recorder,真正值钱的是能把第一处 collective 分歧揪出来 很多人第一次遇到 NCCL watchdog timeout,第一反应都是三件事:查网络、调大 timeout、怀疑 NCCL 又炸了。这个顺序经常不够用。因为在很多真实训…...

鸿蒙数据持久化三板斧:Preferences、RDB、分布式数据一文搞定,告别数据丢失

📖 鸿蒙NEXT开发实战系列 | 第21篇 | 数据篇 🎯 适合人群:有鸿蒙基础的开发者 ⏰ 阅读时间:约15分钟 | 💻 开发环境:DevEco Studio 5.0 ⬅️ 上一篇:20-网络篇-网络请求与数据加载 ➡️ 下一篇&…...

Linux桌面便签终极方案:Sticky让你的灵感永不丢失

Linux桌面便签终极方案:Sticky让你的灵感永不丢失 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 在Linux桌面上高效管理零散信息一直是许多用户的痛点。Sticky作为一款专为Linux…...

FPGA上做图像压缩,别从零造轮子!聊聊DCT那些开源IP核与设计技巧

FPGA图像压缩实战:DCT开源IP核选型与架构优化指南 在嵌入式视觉系统开发中,JPEG图像压缩是FPGA工程师经常遇到的需求场景。当项目周期紧张且资源有限时,明智的开发者会优先考虑利用经过验证的开源IP核,而非从零开始实现离散余弦变…...

Temu 批量视频更新效率:10 分钟搞定全店素材,抢占内容流量高地

2026 年 Temu 平台内容化流量分配机制全面落地,商品视频权重持续攀升,成为决定搜索排名与转化效果的核心变量。但多数卖家仍受困于手动逐个上传视频的低效模式,错失流量红利。凌风工具箱基于 Temu 官方 API 开发的批量视频更新功能&#xff0…...