众所周知,炼丹需要强大的计算资源,通常都是在服务器(集群)上进行炼丹。
但是,对于新手来说,Linux命令不熟悉,远程登录软件不会用,python环境不会管理等等,分分钟劝退。曾经的我就是这样一个小小白,跳了许多坑,慢慢摸索着才上了道。
所以就写一篇博客,随手记录一下常见的一些操作,会一直更新,免得自己忘记。这些是我个人使用的一些操作或者解决方案,不是放之四海而皆准的,请酌情参考哈!
我的基本环境是:
- CentOS
- VSCode
- Anaconda(python3.6.2)
文章目录
-
- 配置远程登录
- 服务器基本操作
-
-
-
- 服务器结点间跳转
- 查看服务器GPU使用情况
- 查看CUDA版本
- 打包文件
- 删除文件
- 统计文件个数
- 将程序放到后台运行
- 查看程序运行时间
-
-
- Python及框架使用
-
-
-
- 指定GPU训练模型
- 统计程序每个函数运行时间
- conda安装第三方库
- conda管理虚拟环境
- pytorch需要注意的坑
-
-
- 常见 错
配置远程登录
远程我使用的是VSCode+Remote SSH拓展+OpenSSH
VSCode远程登录服务器
服务器基本操作
服务器结点间跳转
查看服务器GPU使用情况
在终端输入以下命令
查看CUDA版本
打包文件
1、简单打包
解包
2、打包除指定文件外的文件夹
3、去除绝对路径打包
默认情况下打包可能会将文件的绝对路径打包进去,这样解压出来的文件就会有一长串的路径,可以使用-C选项去除绝对路径
选项意义
选项 | 意义 |
---|---|
-c | 创建打包文件 |
-t | 查看打包文件内有哪些文件 |
-z | 通过gzip进行压缩或解压,文件明最好为*.tar.gz |
-j | 通过bzip2进行压缩或者解压,文件名最好为*.tar.bz2 |
-v | 在压缩解压过程中显示处理的文件名 |
-f filename | 压缩或者解压的包的路径,-f必须放在选项组合的最后 |
-C | 将文件解压到指定目录 |
-p | 保留文件的原本权限和属性,用于备份数据 |
–exclude=FILE | 压缩时排除指定文件或者文件夹 |
删除文件
Linux下删除文件
rm [-选项] 文件或目录
-f:不做确认提示,忽略不存在的文件,不会出现任何警告
-i:进行确认提示,删除前询问是否确认删除
-r:递归删除,可以删除目录
-v:在删除文件之前打印文件名称
删除目录
删除特定开头的文件,只需要在特定开头后面加上*
统计文件个数
将程序放到后台运行
这里有两种方法:1、使用nohup命令将程序放入后台运行。 2、使用tmux将窗口与会话进行分离,这样退出终端时程序依然能在后台运行。
1、nohup
将train.py运行输出的内容重定向到train.log中,最后一个&表示将程序放入后台运行。
2、使用tmux将会话与窗口分离。
比如,我要将一个python程序放到后台运行,大致步骤如下:
- 新建一个tmux会话: tmux new -s name 这样就新建了一个名为name的tmux会话。
- 在tmux会话中运行程序: python example.py 。
- 然后在tmux中输入: ctrl+b 然后摁下 d 或者输入 tmux detach 将会话与窗口分离,这样程序就能在后台运行了。
- 如果中途想要查看程序运行的状态,需要重新连接到刚刚新建的tmux会话中,使用 tmux a -s name 这里的name时刚刚新建的tmux会话的名称。
- 最后程序运行完后,不再需要该tmux会话,那么使用 tmux kill-session name结束该会话。
更多tmux操作,see tmux操作
查看程序运行时间
先通过nvidia-smi或者top指令找到想查看的程序的pid 。
使用ps指令,按指定格式输出想要查看的信息。
其中-eo与|之间的内容表示希望输出的格式,pid表示这个进程的pid ,tty表示终端机连接标准输入设备的文件名称,user表示这个程序属于哪个用户,lstart表示程序开始时间,etime表示程序运行时间,25542表示想要查询的程序的pid。
Python及框架使用
指定GPU训练模型
在你的训练的python文件中加入,指定使用序 为2的GPU
统计程序每个函数运行时间
结果如下
其中参数意义为:
ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
percall:(第一个percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;
conda安装第三方库
安装指定较老版本的pytorch和torchvision,GPU版。
安装最新的pytorch可以到pytorch官 直接安装。
对于安装cv2,conda好像没有/p>
说明opencv这个包和cv2是不同的包。
然后我用
发现在conda的channels里面没有找到这个包。
最后,使用pip安装opencv-python成功,能够使用cv2库。
所以安装cv2推荐使用pip:
conda管理虚拟环境
创建一个名为pytorch10,python版本为3.6的新环境
查看你创建了多少个虚拟环境
激活你创建的环境,这样就可以使用你新建的环境了,可以正常滴安装需要的库。
退出虚拟环境
删除不想要的虚拟环境
安装指定版本pytorch,GPU版本的pytorch要和CUDA版本对应。
pytorch需要注意的坑
torchvision.transforms.ToTensor()
在加载数据的时候,经常需要用到这个类。其输入可以是PIL Image或者np.ndarray格式(包括cv2)。它会先将图像由HWC格式转换成CHW格式。
对于ndarray,如果输入的数据类型是int型,那么ToTensor之后输出的将会是[0,1]归一化的结果。如果输入的数据类型是 float的,其输出数据范围为[0,255]。很多时候我们的模型输入是归一化的,如果不注意这一点,有可能会使模型loss很大,甚至出现nan。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!