目前使用的是Xshell + winSCP(连接+传输) , MobaXterm也可用于ssh连接的备用软件。
MobaXterm(https://mobaxterm.mobatek.net/):功能很全,免费,有免安装版,支持多标签,同时自带文件传输系统,唯一的不足是对Z-moderm支持较差。
linux后台执行命令:&和nohup
在用本机Xshell连接服务器跑实验时,如果关闭本机电脑,Xshell不再运行时,那么linux终端会话就会关闭,跑的实验就会终止。有时候更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。
&使用
在执行文件的时候,可以在命令后面加上&
,这样可以实现将进程挂到后台运行。例如: python main.py &
在使用&之后,系统会返回一个进程号PID,需要记下此进程的PID
nohup使用
1 | nohup python main.py & |
这样执行的时候会将代码放在服务器后台执行,你的终端是看不到运行过程的,期间运行的结果(代码运行过程中打印出来的)会在一个生成的nohup.out文件
中保存。
1 | nohup python main.py >test.log 2>&1 & |
可以实现运行main.py ,并将输出结果打印到test.log文件
中(如果这个文件不存在, 那就创建, 否则就覆盖)
要想使ssh连接断掉也可以继续后台运行,需要用exit命令
断开,否则其它关闭行为视为断开异常(如直接关掉xsheel软件),不会后台运行
nohup与session的关系
如果我们在 session 中执行了 nohup 等类似的命令,当 session 消亡时,相关的进程并不会随着 session 结束,原因是这些进程不再受 SIGHUP 信号的影响。
比如我们执行下面的命令:
1 | $ nohup sleep 1000 >/dev/null 2>&1 & |
此时 sleep 进程的 sid 和其它进程是相同的,还可以通过 pstree 命令看到进程间的父子关系:
如果我们退出当前 session 的领头进程(bash),sleep 进程并不会退出,这样我们就可以放心的等待该进程运行结果了。
nohup 并不改变进程的 sid,同时也说明在这种情况中,虽然 session 的领头进程退出了,但是 session 依然没有被销毁(至少 sid 还在被引用)。重新建立连接,通过下面的命令查看 sleep 进程的信息,发现进程的 sid 依然是 7837:
但是此时的 sleep 已经被系统的 1 号进程 systemd 收养了
:
参考
https://www.cnblogs.com/sparkdev/p/12146305.html
忘记进程
1 | ps -ef | grep main.py #其中main.py是要查找的关键字 |
1 | ps命令将某个进程显示出来 |
这里是两个shell命令通过管道进行了结合,第一个ps能够列出当前系统所有活跃的进程,然后通过grep 关键字查找就能找到带有关键字的进程。找到PID
(PID是输出的第二列那个数字)再杀掉。
关闭进程
kill -9 PID
. 用普通的ctrl+C是关不掉的
疑问:
在根指令行可以进行nohup,但是我用tmux建立会话之后,在tmux中是不可以运用notop,会弹出 exit 1
的错误指令????
一种方法就是在后台运行之后,再进入tmux操作
htop使用
功能介绍
监视内存,线程,CPU运行状态
htop是Linux系统下一个基本文本模式的、交互式的进程查看器,主要用于控制台或shell中,可以替代top,或者说是top的高级版。
安装htop
Ubuntu sudo apt-get install htop
使用htop
界面概述
安装完成后,命令行中直接敲击 htop 命令,即可进入 htop 的界面
各项从上至下分别说明如下:
左边部分从上至下,分别为,cpu、内存、交换分区的使用情况,右边部分为:Tasks 为进程总数,当前运行的进程数、Load average 为系统 1 分钟,5 分钟,10 分钟的平均负载情况、Uptime 为系统运行的时间。
以上各项分别为:
- PID:进程的标识号
- USER:运行此进程的用户
- PRI:进程的优先级
- NI:进程的优先级别值,默认的为 0,可以进行调整
- VIRT:进程占用的虚拟内存值
- RES:进程占用的物理内存值
- SHR:进程占用的共享内存值
- S:进程的运行状况,R 表示正在运行、S 表示休眠,等待唤醒、Z 表示僵死状态
- %CPU:该进程占用的CPU使用率
- %MEM:该进程占用的物理内存和总内存的百分比
- TIME+:该进程启动后占用的总的 CPU 时间
- COMMAND:进程启动的启动命令名称
操作说明
htop
界面底部给出了 F1 ~ F10 按键的简单说明。
标注进程条目
在系统中运行着的实时进程视图中,要追踪某个进程是个大问题。因为整个列表在不停的刷新着,进程的排列顺序也在变动着。为了这个问题, htop
提供了一个很简单的解决方案:颜色标注。是的,你可以标注一个进程条目,它会以不同的颜色显示,因此要追踪它就变得容易了。
要标注某个进程条目,需要做的就是选中此条目,然后按下空格
键。例如,在下面的截图示例中,我已经颜色标注了两个进程条目(黄色高亮显示的两行):
命令行选项
除了上面介绍的一些热键,htop
还提供了很有用的命令行选项。下面是其中一部分:
-s 选项
: 按指定的列排序。例如,htop -s PID
命令会按 PID 列的大小排序来显示。-u 选项
: 显示指定的用户的进程信息列表。例如,htop -u vagrant
命令会只显示出用户名为 vagrant 的相关进程。-d 选项
: 设置刷新的延迟时间。例如,htop -d 100
命令会使输出在 1 秒后才会刷新(参数 -d 的单位是 10 微秒)。-p 选项
:只显示给定的PIDs。例如,htop -p PID
常用命令
shift + m : 按照内存大小排序。 shift + h : 收缩线程。 q : 退出
上下键 或 PgUP,PgDn : 选定想要的进程, 左右键 或 Home,End : 移动字段,当然也可以直接用鼠标选定进程; Space 标记/取消标记一个进程(类似 windows 按着 Ctrl 多选一样 )。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
参考
https://blog.xiewenlong.com/2018/12/htop/
nvidia-smi使用
nvidia-smi
显示出当前GPU的所有基础信息,监控GPU状态和使用情况。命令判断哪几块GPU空闲
解释相关参数含义
GPU:本机中的GPU编号
Name:GPU 类型
Persistence-M:
Fan:风扇转速
Temp:温度,单位摄氏度
Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能
Pwr:Usage/Cap:能耗表示
Bus-Id:涉及GPU总线的相关信息;
Disp.A:Display Active,表示GPU的显示是否初始化
Memory-Usage:显存使用率
Volatile GPU-Util:浮动的GPU利用率
Uncorr. ECC:关于ECC的东西
Compute M.:计算模式
Processes 显示每块GPU上每个进程所使用的显存情况
Tmux使用
安装tmux -linux
sudo apt-get install tmux
基本概念
tmux采用C/S模型构建,输入tmux命令就相当于开启了一个服务器
,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。会话、窗口、面板之间的联系如下:
一个tmux session
(会话)可以包含多个window
(窗口),窗口默认充满会话界面,因此这些窗口中可以运行相关性不大的任务。
一个window
又可以包含多个pane
(面板),窗口下的面板,都处于同一界面下,这些面板适合运行相关性高的任务,以便同时观察到它们的运行情况。
一般在一个session
里进行新建windows
和pane
操作即可
一个session显示如图
会话
新建会话
1 | tmux # 新建一个无名称的会话 |
断开当前会话
暂时断开会话,可以进入到原始命令行界面进行操作。也可以Ctrl+B +d
进行断开
操作如 tmux new -s demo
1 | tmux detach # 断开当前会话,会话在后台运行 |
进入之前的会话
断开会话后,想要接着上次留下的现场继续工作,就要使用到tmux的attach命令了,语法为tmux attach-session -t session-name
,可简写为tmux a -t session-name
或 tmux a
。通常我们使用如下两种方式之一即可:
1 | tmux a # 默认进入第一个会话dd |
关闭会话
会话的使命完成后,一定是要关闭的。我们可以使用tmux的kill命令
1 | tmux kill-session -t demo # 关闭demo会话 |
查看所有会话
1 | tmux ls # 查看所有会话,显示会话列表 |
重命名会话S1为S2
1 | tmux rename -t s1 s2 |
Tmux快捷指令
tmux的所有指令,都包含同一个前缀,默认为Ctrl+b
,输入完前缀过后,控制台激活,命令按键才能生效。
表一:常用指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
s |
显示会话列表用于选择并切换 (上下键选择+回车) |
Ctrl+b |
d |
断开当前会话 |
=== | ||
Ctrl+b |
c |
新建窗口(windows) |
Ctrl+b |
& |
关闭当前窗口(关闭前需输入y or n 确认) |
Ctrl+b |
w |
打开窗口列表,用于且切换窗口 |
Ctrl+b |
, |
重命名当前窗口 |
=== | ||
Ctrl+b |
" |
当前面板上下一分为二,下侧新建面板 |
Ctrl+b |
% |
当前面板左右一分为二,右侧新建面板 |
Ctrl+b |
x |
关闭当前面板(关闭前需输入y or n 确认) |
Ctrl+b |
z |
最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增) |
Ctrl+b |
方向键 |
移动光标切换面板 |
Ctrl+b |
Ctrl+o |
顺时针旋转当前窗口中的所有面板 |
Ctrl+b |
t |
显示时钟 |
表二:系统指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
? |
显示快捷键帮助文档 |
Ctrl+b |
d |
断开当前会话 |
Ctrl+b |
D |
选择要断开的会话 |
Ctrl+b |
Ctrl+z |
挂起当前会话 |
Ctrl+b |
r |
强制重载当前会话 |
Ctrl+b |
s |
显示会话列表用于选择并切换 |
Ctrl+b |
: |
进入命令行模式,此时可直接输入ls 等命令 |
Ctrl+b |
[ |
进入复制模式,按q 退出 |
Ctrl+b |
] |
粘贴复制模式中复制的文本 |
Ctrl+b |
~ |
列出提示信息缓存 |
表三:窗口(window)指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
c |
新建窗口 |
Ctrl+b |
& |
关闭当前窗口(关闭前需输入y or n 确认) |
Ctrl+b |
0~9 |
切换到指定窗口 |
Ctrl+b |
p |
切换到上一窗口 |
Ctrl+b |
n |
切换到下一窗口 |
Ctrl+b |
w |
打开窗口列表,用于且切换窗口 |
Ctrl+b |
, |
重命名当前窗口 |
Ctrl+b |
. |
修改当前窗口编号(适用于窗口重新排序) |
Ctrl+b |
f |
快速定位到窗口(输入关键字匹配窗口名称) |
表四:面板(pane)指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
" |
当前面板上下一分为二,下侧新建面板 |
Ctrl+b |
% |
当前面板左右一分为二,右侧新建面板 |
Ctrl+b |
x |
关闭当前面板(关闭前需输入y or n 确认) |
Ctrl+b |
z |
最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增) |
Ctrl+b |
! |
将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效) |
Ctrl+b |
; |
切换到最后一次使用的面板 |
Ctrl+b |
q |
显示面板编号,在编号消失前输入对应的数字可切换到相应的面板 |
Ctrl+b |
{ |
向前置换当前面板 |
Ctrl+b |
} |
向后置换当前面板 |
Ctrl+b |
Ctrl+o |
顺时针旋转当前窗口中的所有面板 |
Ctrl+b |
方向键 |
移动光标切换面板 |
Ctrl+b |
o |
选择下一面板 |
Ctrl+b |
空格键 |
在自带的面板布局中循环切换 |
Ctrl+b |
Alt+方向键 |
以5个单元格为单位调整当前面板边缘 |
Ctrl+b |
Ctrl+方向键 |
以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖) |
Ctrl+b |
t |
显示时钟 |
tmux用于代码后台运行
要想使代码后台运行,我用nohup训练模型时重定向到log文件发现日志显示不全,影响实验结果的呈现,而tmux可以解决这个问题。
在进入tmux,新建一个session的时候,实际上tmux在服务器创建了虚拟终端自己连自己。所以用ctrl+B +D退出tmux,并且断掉ssh连接时后台实验是一直在运行的。下次连接ssh后,再打开tmux的session即可,session不会断掉。并且不需要重定向,结果直接显示在屏幕上。
tmux的个性化设置 -- 待完成
比如通过写脚本,在新建session的时候就自动建多个pane,并运行命令
参考
http://louiszhai.github.io/2017/09/30/tmux/
https://harttle.land/2015/11/06/tmux-startup.html
查看CUDA版本
1 | nvcc --version |
zsh
安装
1 | sudo apt install git-core zsh |
杂
在使用xshell 连接的时候,如果网络断开,那么xshell就会出现中断,出现上面的情况。
屏蔽OMP无用信息
在用tensorflow跑实验的时候,后台会输出OMP的输出,实际上是一些无用信息,如果要系统不显示这些信息,可以如下操作:
1.如果禁用OpenMP警告并将环境变量 KMP_WARNINGS 设置为 off ,这些消息应该消失了或 0 。在运行程序的时候可以选择禁用
1 | KMP_WARNINGS = off python train.py |
2.或者从Python本身,在初始化OpenMP之前:
1 | import os |
wget 下载数据集
有时候数据集会很大,在电脑端下载很占用时间而且容易断连,在传输到服务器上也会很慢。使用wget可以实现断点续传直接在linux服务器上下载数据集,比如: 我想下载Wikipedia数据集
用于训练我的网络模型,那么:
1 | wget -c https://textae.blob.core.windows.net/optimus/data/datasets/wikipedia_json_64_filtered.zip [目标路径] |
即可让服务器自己慢慢下载了
具体操作可参考:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/wget.html