深度学习炼丹常见操作及问题(持续更新)

众所周知,炼丹需要强大的计算资源,通常都是在服务器(集群)上进行炼丹。
但是,对于新手来说,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进行处理,非常感谢!

上一篇 2020年5月18日
下一篇 2020年5月18日

相关推荐