深度学习炼丹,当然少不了 GPU 和 Linux 系统了,部分朋友没有 GPU 的话只能租用远程服务器来训练,这样就少不了 Xshell 这样一款利器了,以下,我们就来介绍 Xshell 这款工具在深度学习的时候一些常用的功能和 Linux 命令。
深度学习中的那些效率提升利器(附资源) - 图1Xshell 工具
后台回复 Xshell 可以获取 Xshell 家庭版 / 校园版 以及 FTP 传输工具

工具

Xshell 使用

打开 Xshell 工具,点击左上角新建会话,在连接处输入远程服务器的 IP 和 端口号,然后点击用户身份验证,输入账号(一般账户名是 root)密码点击连接即可连接至远程服务器。
深度学习中的那些效率提升利器(附资源) - 图2
深度学习中的那些效率提升利器(附资源) - 图3

终端复用器 Tmux

远程进行深度学习的时候,为了确保本地的网络不会终止现有的训练,我们需要在服务器的创建一个会话,就是 XShell 软件关闭的时候,也能确保训练正常进行。

  1. # Ubuntu 或 Debian 安装
  2. sudo apt-get install tmux
  3. tmux new -s <session-name> # 新建会话 <session-name> 是会话名
  4. # Ctrl+D 可以退出会话,但是不会关闭会话,就是程序会在后台一直运行
  5. tmux ls # 查看当前所有会话
  6. tmux attach -t <session-name> # 接入会话 <session-name> 是会话名

传输工具

如果你有两台服务器,可能需要传输数据或者模型的话,可以使用 Linux 是传输功能,相关的命令如下:

  1. apt install ssh # 安装必要包
  2. # 本地传输文件到远程服务器
  3. scp -P [remote-port] filename root@ip:/dir/ # 传输 filename 文件到远程服务器的 dir 文件夹下
  4. scp -P [remote-port] -r [文件夹] root@ip:/root/code # 传输 文件夹到远程服务器的 /root/code/ 文件夹下

远程访问 tensorboard

对于深度学习炼丹师来说,可视化的使用是必不可少的,那么如何将远程服务器可视化到本地,请看以下操作的截图
需要确保 tensorflow、tensorboard、tensorboardX 的版本一致,然后在 xshell 中进行设置,设置完成以后,运行 tensorboard --logdir='logs' --port=6006 其中 logs/ 是运行日志的文件夹,并指定端口,然后在本地浏览器打开 http://localhost:6006/ 即可
深度学习中的那些效率提升利器(附资源) - 图4
深度学习中的那些效率提升利器(附资源) - 图5

命令

GPU 使用情况

一些场景下,可能需要查看 GPU 的运行状况,来调节 batchsize 大小,可以使用以下命令进行查看

  1. watch -n 10 nvidia-smi # 查看 GPU 使用情况,每 10s 刷新一次,可以设置小一点,如 0.1 可以实时刷新

深度学习中的那些效率提升利器(附资源) - 图6
以下是对上图参数的说明:

  • Fan:显示风扇转速,数值在 0 到 100% 之间,是计算机的期望转速,如果计算机不是通过风扇冷却或者风扇坏了,显示出来就是 N/A;
  • Temp:显卡内部的温度,单位是摄氏度;
  • Perf:表征性能状态,从 P0 到 P12,P0 表示最大性能,P12 表示状态最小性能;
  • Pwr:能耗表示;
  • Bus-Id:涉及 GPU 总线的相关信息;
  • Disp.A:是 Display Active 的意思,表示 GPU 的显示是否初始化;
  • Memory Usage:显存的使用率;
  • Volatile GPU-Util:浮动的 GPU 利用率;
  • Compute M:计算模式;

查看文件数目

深度学习当然少不了数据,那么有时需要对数据的情况进行简单的计数,可以使用一下命令
lsgrepwc 三者的组合可以实现多种文件数目的查看

  1. ls -l | grep "^-" | wc -l # 统计当前目录下文件的个数(不包括目录(即统计有后缀名的文件数量))
  2. ls -lR| grep "^-" | wc -l # 统计当前目录下文件的个数(包括子目录)
  3. ls -lR | grep "^d" | wc -l # 查看某目录下文件夹 (目录) 的个数(包括子目录)

下面是 lsgrepwc 参数的具体说明

  • ls

    1. -a 显示所有文件及目录 (ls 内定将文件名或目录名称开头为 "." 的视为隐藏档,不会列出)
    2. -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
    3. -r 将文件以相反次序显示 (原定依英文字母次序)
    4. -t 将文件依建立时间之先后次序列出
    5. -A -a ,但不列出 "." (目前目录) ".." (父目录)
    6. -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
    7. -R 若目录下有文件,则以下之文件亦皆依序列出
  • grep:用于查找文件里符合条件的字符串。

    1. -a --text : 不要忽略二进制的数据。
    2. -A <显示行数> --after-context=< 显示行数 > : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
    3. -b --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
    4. -B <显示行数> --before-context=< 显示行数 > : 除了显示符合样式的那一行之外,并显示该行之前的内容。
    5. -c --count : 计算符合样式的列数。
    6. -C <显示行数> --context=< 显示行数 > -< 显示行数 > : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
    7. -d <动作> --directories=< 动作 > : 当指定要查找的是目录而非文件时,必须使用这项参数,否则 grep 指令将回报信息并停止动作。
    8. -e <范本样式> --regexp=< 范本样式 > : 指定字符串做为查找文件内容的样式。
    9. -E --extended-regexp : 将样式为延伸的正则表达式来使用。
    10. -f <规则文件> --file=< 规则文件 > : 指定规则文件,其内容含有一个或多个规则样式,让 grep 查找符合规则条件的文件内容,格式为每行一个规则样式。
    11. -F --fixed-regexp : 将样式视为固定字符串的列表。
    12. -G --basic-regexp : 将样式视为普通的表示法来使用。
    13. -h --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
    14. -H --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
    15. -i --ignore-case : 忽略字符大小写的差别。
    16. -l --file-with-matches : 列出文件内容符合指定的样式的文件名称。
    17. -L --files-without-match : 列出文件内容不符合指定的样式的文件名称。
    18. -n --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
    19. -o --only-matching : 只显示匹配 PATTERN 部分。
    20. -q --quiet --silent : 不显示任何信息。
    21. -r --recursive : 此参数的效果和指定 "-d recurse" 参数相同。
    22. -s --no-messages : 不显示错误信息。
    23. -v --revert-match : 显示不包含匹配文本的所有行。
    24. -V --version : 显示版本信息。
    25. -w --word-regexp : 只显示全字符合的列。
    26. -x --line-regexp : 只显示全列符合的列。
    27. -y : 此参数的效果和指定 "-i" 参数相同。
  • wc

    1. -c --bytes --chars 只显示 Bytes 数。
    2. -l --lines 只显示行数。
    3. -w --words 只显示字数。
    4. --help 在线帮助。
    5. --version 显示版本信息。

查看文件大小(bit、GB 等)

  1. du -b [filename or path] # 计算文件夹或者文件的字节数
  2. du -h [filename or path] # 计算文件夹或者文件的大小(以MB、GB 形式展示、符合人的直觉)

深度学习中的那些效率提升利器(附资源) - 图7
如果有需要对不同单位的数据进行转换的话,可以使用:字节、GB 转换计算器,看文后参考链接
深度学习中的那些效率提升利器(附资源) - 图8

解压缩

一般上传数据是使用压缩包的方式,那么到远程服务器就无法使用可视化操作进行,这时候需要使用命令对压缩包进行解压了,针对不同压缩的格式,下面给出解压缩的命令:

  • .zip 文件

    1. apt install zip
    2. # 解压
    3. unzip -o test.zip -d tmp/ # 解压 test.zip 文件到 tmp/ 下
    4. # 压缩
    5. /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
    6. zip -q -r html.zip /home/html
  • tar.gz 格式

    1. tar -zxvf ×××.tar.gz
  • .7z 文件

    1. sudo apt-get install p7zip-full
    2. # 压缩
    3. 7za a 压缩包.7z 被压缩文件或目录
    4. # 解压
    5. #将压缩包解压到指定目录,注意:指定目录参数-o后面不要有空格
    6. 7za x 压缩包.7z -o解压目录
    7. #将压缩包解压到当前目录
    8. 7za x 压缩包.7z

测试网速

杠杠的网络不管对数据的传输,还是从互联网上下载模型,都是很关键的,所以有必要对远程服务器的网速进行测试一番。

  1. curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python

深度学习中的那些效率提升利器(附资源) - 图9网速测试

ping

有时候模型无法下载?数据下载太慢?可能不是你的问题,而是墙的问题,这时候,你就需要对网络 ping 一下

  1. apt install ping # 安装包,会出现以下信息
  2. """
  3. Package ping is a virtual package provided by:
  4. iputils-ping 3:20161105-1 # 仅在 Linux 系统上使用
  5. inetutils-ping 2:1.9.4-2+b1 # 有更多的功能,可以在非 Linux 系统上使用
  6. You should explicitly select one to install.
  7. """
  8. ping bing.com

ping google.com
深度学习中的那些效率提升利器(附资源) - 图10
ping bing.com
深度学习中的那些效率提升利器(附资源) - 图11

参考: