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 ...
编译安装 GPU 版 ffmpeg
ffmpeg 是适用于 Linux 和类 Unix 系统的免费开源视频转换软件。视频图片处理使用 GPU 能明显提高速度,缩减运行时间。本篇介绍如何编译安装 GPU 版 ffmpeg 及使用方法。以 Ubuntu 18.04 为例。
Nvidia 驱动和 GPU 加速库安装想使用 GPU 加速计算,就需要 GPU 驱动和加速库。请参考我的另一篇博文安装: 深度学习的 GPU 环境的配置
实践中,我首先配置的 NVIDIA 驱动版本是:NVIDIA-Linux-x86_64-470.129.06.run,CUDA 加速框架是:cuda_11.1.0_455.23.05_linux.run,深度学习加速库是: cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz,编译安装 FFMPEG 后出现:Driver does not support the required nvenc API version. Required: 12.0 Found: 11.1,然后重新安装 NVIDIA 驱动版本:NVIDIA-Linux-x86_64-52 ...
结合 aria2 和 AriaNg 打造简单易用的 web 界面的文件下载工具
d7420555dbd47e034be0c72be203a7e36d3e813088b6c9fcd2ce16fa36ffa6676c61aa58c99c5a3c528f049f556628b1c6bd0a497abc06801c77972eda5e12868cffd5a93c2a7430a0bb312e226eb87a5b415a91131ace98f68e8f1e7b4fa36ccf3a3c383a999d2cd1d247294ac9b4003c0fa9e236fad7f9e47e786c6aec02556a6c1638cea9f8f71309e8f29f50157db883016b5e2587c1cf279f17f9f0de62084ddde50ab03c9bbe466d2160832bc0e413805d887df24061153e41082bd8940c6a77e9ed52d96a58948d9ca678bd1226323b2068ee8ae6c7ef639bf7e256d4e2ccf21b45ae77ac5cfba55f1e794a36343be82f319849af8 ...
Linux 的 at 命令定时执行任务
在 Linux 中循环执行命令或任务常用 crontab 开进行,定时执行一次命令或任务常用 at 命令进行。
安装 atDebian or Ubuntu
12sudo apt updatesudo apt install at
CentOS or redhat
1sudo yum install at
at 的守护进程是 atd,使用 at 命令时一定要保证守护进程开启。
123456# 开启守护进程sudo systemctl start atd.service# 开机自启守护进程sudo systemctl enable atd.service# 查看守护进程是否运行sudo systemctl status atd.service
at 定时任务at 定时任务的设置一般格式如下:
1at [option] runtime
添加定时命令方法一在上午10:00执行任务:
1234567at 10:00warning: commands will be executed using /bin/sh# 添加需要定时执行的命令at> date > hello.tx ...
linux 命令行历史 history
Linux 终端历史能够方便我们查看历史执行命令,也可以帮助重新执行历史中执行的命令。下面介绍常用的操作历史的方法。
历史命令时间戳一般情况下,我们直接在终端中输入命令 history 就可以查看历史命令,以序号展示:
1history
12341 history2 ls3 who4 history
可以通过如下设置,将历史命令的时间打印出来:
12export HISTTIMEFORMAT='%F %T 'history
123451 2022-12-16 05:22:25 history2 2022-12-16 05:22:26 ls3 2022-12-16 05:22:27 w4 2022-12-16 05:22:43 export HISTTIMEFORMAT='%F %T '5 2022-12-16 05:22:46 history
清空历史记录清空历史记录方法如下:
1history -c
清空某条历史记录清空某一条历史记录,需要知道该历史记录的序号,如序号1,然后使用下面命令清除:
1history -d ...
测试 Linux 某个端口是否打开
在使用 docker 映射端口时,宿主机已经使用 ufw 命令关闭了映射的端口,但是,外部还是能够访问宿主机的端口来访问 docker 容器,想通过命令行测试端口是否真的能够联通,本篇介绍命令行测试某台 linux 主机的某个端口是否打开。
telnettelnet 命令最初是用于远程登陆服务器的,但因为数据是明文传送的,因此现在都采用 SSH,但用 telnet 测试远程端口还是很方便的。
服务器端 telnet 默认端口是 23,SSH 默认端口是 22. 这些都可以根据需要更改,建议改端口号范围是 [1024, 65535] 之间。Linux 端口号的范围从 0 到 65535。但是,位于 0 到 1023 这个较低范围内的端口号通常由操作系统使用。
安装 telnet12sudo apt updatesudo apt install telnet
使用使用方法:
12Usage: telnet [-4] [-6] [-8] [-E] [-L] [-a] [-d] [-e char] [-l user] [-n tracefile] [ -b addr ] [- ...
Python 中命令行解析模块 argparse 的使用
熟悉 Linux 命令行的用户享受着对于不同命令指定不同参数的遍历,如 ls,表示打印当前目录下内容,而使用 ls /home 能够打印目录 /home 下的内容。这增加了 Linux 命令的使用范围,提高了用户体验。同样,在 Python 中也有类似的功能模块,那就是内置模块argparse, 其不仅能够自定义解析命令行参数(从 sys.argv 中解析这些参数),还能够解析 JSON 文件。本篇所有命令都是在 jupyter 中演示。
基本步骤使用 argparse 常用步骤:
import argparse # 导入模块;
parser = argparse.ArgumentParser(prog="工程名", description="自定义描述信息") # 实例化一个解析器,在 jupyter 中使用 argparse.ArgumentParser? 可查看更详细的参数内容;
parser.add_argument("-x", "--var_x", type=int, help=&qu ...