Linux 终端复用器 tmux 提高通过 SSH 运行的程序稳定性
在使用 SSH 远程连接服务器后,在终端上运行长时间占用终端的程序(如 pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu113/torch_stable.html 等大文件下载)容易受到网络中断等情况导致的 SSH 连接断开的影响。这是因为 SSH 终端窗口和会话是绑定的,当终端窗口断开时,会话也关闭,会话中的进程也随之关闭。使用 tmux 可以将会话与终端窗口“解绑”。这样,终端窗口关闭或异常断开时,不影响当前会话中运行的程序。
tmux 是一个终端复用器(terminal multiplexer),可以将会话与窗口“解绑”,窗口关闭时,会话不会终止,而是继续在后台运行,当重新把会话绑定到其他窗口时,里面运行的进程还在。tmux 有如下特点:
运行在单个窗口中同时访问多个会话;
新窗口可以接入已经存在的会话;
运行一个会话同时连接到多个窗口,实现多用户实时共享会话;
支持窗口在垂直和水平方向上任意拆 ...
MMDetection 目标检测使用
OpenMMLab 是香港中文大学-商汤科技联合实验室 MMLab 自 2018 年 10 月开源的一个计算机视觉领域的 AI 算法框架。其包含了众多计算机视觉多个方向的算法框架,本篇介绍 MMDetection 库,运行服务器 Ubuntu 18.04。本篇以 mmdet 2.x 版本为例,可能有些模块、类、函数在最新版中会有改变。请访问官网 docs 查看更新。
安装MMDetection 的安装需要在一些基础库之上进行,如 PyTorch,mmcv 等。假设显卡驱动、cuda、cudnn 等均已安装配置好,接下来就是安装 python 和一些包。我们这里采用 miniconda 来进行 python 安装和环境配置。
123456789101112131415161718192021222324252627282930313233# 安装 minicondawget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.shchmod +x miniconda.sh ...
MMClassification 图像分类使用
OpenMMLab 是香港中文大学-商汤科技联合实验室 MMLab 自 2018 年 10 月开源的一个计算机视觉领域的 AI 算法框架。其包含了众多计算机视觉多个方向的算法框架,本篇介绍 MMClassification 库,运行服务器 Ubuntu 18.04。
安装MMClassification 的安装需要在一些基础库之上进行,如 pytorch,mmcv 等。假设显卡驱动、cuda、cudnn 等均已安装配置好,接下来就是安装 python 和一些包。我们这里采用 miniconda 来进行 python 安装和环境配置。
123456789101112131415161718192021222324# 安装 minicondawget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.shchmod +x miniconda.shbash ./miniconda.sh -b -p /opt/miniconda# 配置 miniconda 环境echo &q ...
linux 上使用 samba 共享文件夹给 windows
想要在 Windows 客户端上像访问本地文件一样来访问 Linux 服务器上的文件,除了 rsync、sftp 等工具外能近似满足该需求,最经典、最方便的方式还是使用 Samba。本篇介绍如何使用 Samba 共享 Linux 文件给 Windows。
简介Samba 是 Linux 和 Unix 系统上实现 smb 协议的一个软件,分为服务端和客户端。smb 是一种在局域网上共享文件和打印机的一种通信协议,为局域网内的不同计算机之间提供文件和打印机等资源的共享服务。
Samba 监听端口有 TCP 139、445,UDP 137、138,其中 TCP 端口对应的服务是 smbd 服务,提供对服务器中文件、打印资源的共享访问;UDP 端口对应的服务是 nmbd 服务,提供基于 NetBIOS 主机名称的解析。
Samba 的使用用户都是系统用户,在 /etc/passwd 中,密码通过如下命令设置:
123456# username 取值 /etc/passwd,设置的密码可以与系统用户密码不同smbpasswd -a username# -a 表示添加系统用户为 Samba 用 ...
linux 中 screen 的使用
通过终端在远程服务器上执行长时间运行的任务时,因为突然的断开导致 SSH 会话终止,使得程序运行失败!使用 screen 能够避免上面情况的发生。同时,让我们在一个终端上可以运行多个终端程序,并可以自由切换这些终端。
Screen 或 GNU Screen 是一个终端多路复用器。换句话说,这意味着您可以启动一个屏幕会话,然后在该会话中打开任意数量的窗口(虚拟终端)。在 Screen 中运行的进程在它们的窗口不可见时将继续运行,即使您断开连接也是如此。
安装 screenDebian or Ubuntu 操作系统安装方法如下:
12sudo apt updatesudo apt install screen -y
RedHat or CentOS or Fedora 操作系统安装方法如下:
1sudo yum install screen
使用 screen123456789101112131415161718192021222324252627282930313233343536373839# 创建一个名字为 main 的 screen 终端screen -S main# 查看 ...
linux 下使用 rz 和 sz 传输文件
与 Linux 服务器互相传输文件方法很多,有 scp,sftp,rsync 等等。sz (从服务器发送下载文件) 和 rz (从本地发送上传文件) 是比较有交互性和方便的小文件传输方式。
rz\sz 使用 ZMODEM 协议,因此终端需要支持该协议才能使用该命令。常见的软件 windterm\xshell\securecrt\le putty 等支持。
安装12sudo apt updatesudo apt install lrzsz
rz 上传文件到服务器直接把文件拖动到终端上即可。或者使用命令方式:
123rz# orrz -be
会弹出一个交互界面,选择需要上传的文件(可多选)进行上传。常见选项有:
123456789101112131415161718192021222324252627282930-+, --append 将文件内容追加到已存在的同名文件-a, --ascii 以文本方式传输-b, --binary 以二进制方式传输,推荐使用--delay-startup N 等待 N 秒-e, --escape 对所有控制字符转义,建议使用-E, --re ...
putty 的 ppk 和 openssh 的 rsa 密钥互转
putty 密钥格式是 ppk,它无法被 openssh 直接使用。反过来,openssh 的密钥 id_rsa 也无法被 putty 所使用。如果想要在不同软件下使用,需要进行密钥格式转换。
ppk 转 id_rsa如果有 putty 软件,那么可以在软件上直接操作。我们这里使用命令行操作方式。首先按照命令:
12sudo apt updatesudo apt install putty-tools -y
转换方法如下:
1234# ppk 转换为 id_rsaputtygen test.ppk -O private-openssh -o id_rsa# ppk 转换为 id_rsa.pubputtygen test.ppk -O public-openssh -o id_rsa.pub
id_rsa 转 ppk1puttygen id_rsa -o test.ppk
参考文献
PuTTY的ppk密钥与OpenSSH密钥之间的相互转换
开启 JupyterLab 代码自动提示功能
JupyterLab 不仅能够书写代码而且也非常方便书写说明内容以及 $\LaTeX{}$ 代码,另外,它支持多种编程语言。在 Pycharm 中集成了自动代码提示,文件跳转等,在 JupyterLab 中也可以实现。本篇对其进行介绍。
安装基本包1234pip install jupyterlab-lsppip install 'python-lsp-server[all]'# 也可采用方法:进入 JupyterLab,点击扩展,搜索 @krassowski/jupyterlab-lsp 点击安装即可。jupyter labextension install @krassowski/jupyterlab-lsp
重启 jupyterlab12# 我这里是 jupyterhubsudo systemctl restart jupyterhub.service
重启后已经可以使用代码提示了。但需要注意两点:
代码提示需要 tab 键配合。后面设置如何自动提示;
代码跳转个人编写的包正常,conda 和 pip 安装的包不能成功。后面进行配置。
代码自动提示 ...
ubuntu upgrade 不升级某些包
使用 ubuntu 的更新命令 sudo apt upgrade -y 时总是会升级所有的包,但是有些包是不能或不便升级的,如 GPU 驱动程序等,升级后可能会导致无法使用。有时升级某些软件后会导致系统重启失败等。本篇介绍如何抑制某些包不升级。
update & upgrade当使用一段时间后,或需要更新某个软件包时,总会运行如下的命令,检查更新:
1sudo apt update
当运行上面的命令后,会提示我们有多少包需要更新,使用如下命令,可以查看详细信息:
1sudo apt list --upgradable
当我们想要升级罗列的所有软件包时,我们可以使用如下命令:
1sudo apt upgrade -y
当我们想要只升级某一个软件包时,我们可以使用如下命令:
123sudo apt install --only-upgrade [packagename]# orsudo apt install [packagename]
但是,如果我们需要升级的软件比较多,但又不是所有软件都想要升级,那么我们不能够使用 sudo apt upgrade,但使用 sudo apt ...
pytorch 分布式训练
如何利用多 GPU、多服务器分布式训练深度学习模型,本篇介绍 pytorch 分布式训练相关。
一些概念
node 物理节点,即服务器、机器。注意每一个节点可以有多个 GPU,即一机多卡
rank 进程序号,常用于进程通信。每个进程对应一个 rank
local_rank 相对于 rank (整个分布式集群而言),local_rank 表示一台机器内部的相对进程序号。rank 和 locak_rank 独立,当是单机多卡时,rank 等同于 local_rank
nnodes 物理节点个数
node_rank 物理节点序号
nproc_per_node 每个物理节点上面运行的进程数,常对应想要运行的 GPU 个数,因此取值小于物理节点上 GPU 个数。
group 进程组,默认只有一个组
world size 全局并行数,即一个分布式任务中,全局 rank 的数量。
例子:每个 node 包含 8 个 GPU,且 nproc_per_node=4, nnodes=5,机器的 node_rank=10,请问 world_size 是多少?全局并行数 w ...
python 日志管理
程序运行的日志能够有效的帮助我们查看程序运行的情况。python 内置的日志模块是 logging,通过它能够有效的记录 python 程序运行的情况。
日志例子编写一个日志的例子,保存到 /workspace/proj-pf/common-scripts/monitor.py
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768import loggingimport timefrom datetime import datetimefrom logging import handlersclass MyLogger(object): # 5个日志级别 levels = { "debug": logging.DEBUG, "info": logging.INFO, "w ...












