从学校实验室白嫖了个服务器账号,记录下配置环境以及训练模型等操作的步骤。
备注:受篇幅限制,本文在使用具体命令时仅介绍其基础用法,具体可参考附录链接。
查看服务器基础信息
Linux版本信息
通过cat /etc/centos-release查看linux发行版本。
通过arch查看操作系统架构,输出 x86_64 则表示为 64 位系统,输出 i686 或 i386 则表示为 32 位系统。
由图可知,笔者使用CentOS 7.7,64位系统。
GPU信息
通过nvidia-smi可查看GPU的状态信息,执行结果如图所示。
表格部分参数解释:
- GPU: 本机中的GPU编号(有多块显卡的时候,从0开始编号)
- Perf: GPU的性能状态,从P0(最大性能)到P12(最小性能)
- Persistence-M: 持续模式的状态,持续模式虽然耗能大,但是在新的GPU应用启动时花费的时间更少,图上显示的是:off
配置conda环境
1. 下载linux安装包(.sh文件)
Anaconda官网-->Download Site-->Anaconda3-2019.03-Linux-x86_64.sh
2. 安装Anaconda3
bash Anaconda3-2019.03-Linux-x86_64.sh
3. 添加安装目录下的bin目录到当前用户环境变量文件(~/.bash_profile)中
在profile文件末尾加入一行:export PATH=/你的安装目录/anaconda3/bin:$PATH
使用source ~/.bash_profile让配置生效。
若在终端前出现了(base),即表示conda已经安装成功并进入conda中名为base的虚拟环境。
要退出conda环境,使用命令conda deactivate,则可关闭(base)提示。
使用conda env list显示所有虚拟环境
注意:执行命令时列出了一些WARNING,此处代表某些文件在新版本中被移除,这里使用
conda update -n base conda命令更新conda版本,即可解决这个问题。
5. 创新环境并配置
先创建环境conda create –n 环境名,再使用conda activate 环境名进入环境。
注意:推荐以不指定python版本的方式创建环境,如
conda create -n myenv python=3.6。只有不指定版本时,创建的环境会与主环境完全共享,使用pip安装时也只会安装在主环境。只有在成功使用conda install something后,这个环境才独立出来。参考 官方文档
配置项目环境
1. 使用ssh或sftp上传项目代码
参考链接: XShell上传文件到Linux服务器上 - Desperado_nbf - 博客园 (cnblogs.com)
2. 进入代码文件夹,配置环境
使用pip install -r requirements.txt安装项目需要的包。
也可以使用conda install --yes --file requirements.txt 来安装。
若项目中无requirements.txt文件,可边运行项目边检查错误信息,逐步安装依赖文件。
【可选】在使用pip安装项目依赖时,可先升级并更改pip源
# 升级pip版本(可选)
python -m pip install --upgrade pip
# ===> 或使用 sudo pip install --upgrade pip
# 更改pip源为清华源(可选)
mkdir ~/.pip
vi ~/.pip/pip.conf
# ===> 添加下面的内容
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
# ===> 然后保存并退出,以后使用pip install时,就可以享受正常网速了
3. 使用VSCode远程编辑服务器代码【可选】
参考链接:VsCode连接服务器并编辑服务器端代码_追公车的少年的博客-CSDN博客
4. 配置Jupyter Notebook【可选】
运行项目
1. 测试项目是否正常运行
在运行项目时,笔者遇到了这样一个问题
File "~/MyCode/RecursiveSeparation/uPIT_2spk/trainer.py", line 16, in <module>
import matplotlib.pyplot as plt
File "~/anaconda3/lib/python3.7/site-packages/matplotlib/pyplot.py", line 32, in <module>
import matplotlib.colorbar
ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ~/anaconda3/lib/python3.7/site-packages/matplotlib/_path.cpython-37m-x86_64-linux-gnu.so)
最简单的解决办法如下
$ vim ~/.bash_profile # 将下面两行命令写进文件
LD_LIBRARY_PATH=~/anaconda3/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
$ source ~/.bash_profile
2. 启用守护进程
要将一个程序放到后台执行,我们一般使用nohup。
在使用xshell这种终端工具在退出的时候,会向我们在当前shell下启动的进程发送一个SIGHUP信号,这个信号默认操作是终止进程,导致一旦关闭连接,先前启动的程序也关闭了。
通过命令nohup python train.py(进程名) &可以将train.py设为守护命令运行。
nohup命令对train.py进程做了三件事:
- 阻止
SIGHUP信号发到这个进程; - 关闭标准输入。该进程不再能够接收任何输入,即使运行在前台;
- 重定向标准输出和标准错误到当前目录下的
nohup.out文件。
也就是说,nohup命令实际上将子进程与它所在的 session 分离了。
若想设置输出文件nohup.out的路径,并同时也将错误信息重定向到nohup.out中,使用nohup python -u train.py >train.log 2>&1 &。其中>是重定向符,第一个>表示将标准输出重定向到train.log,第二个>表示错误信息也重定向到标准输出,这两个>的位置不可换。-u确保输出可以及时地存入文件中。
注意,
nohup命令不会自动把进程变为"后台任务",所以必须加上&符号。
3. 检测进程运行情况
ps命令用来查看系统中进程的情况。
一般使用ps -ef | gerp train.py(进程名)来显示train.py进程的情况。
ps命令的部分参数:
- -e 显示所有进程
- -f 显示所有信息(全格式)
| gerp train.py 作用
- “|”是管道命令,指ps命令与grep命令同时执行
- grep表示查找,使用正则表达式搜索文本,并将匹配的行打印出来。
执行结果
UID PID PPID C STIME TTY TIME CMD
各字段的含义:
- UID :进程的所有者
- PID :进程的 ID
- PPID :其父进程的 ID
- C :CPU 使用的资源百分比
- STIME :系统启动时间
- TTY :登入者的终端机位置
- TIME :已使用 CPU 时间
- CMD :所下达的指令
图中圈出来的正是笔者之前使用nohup创建的守护进程,可以看到,其PPID是1,即init进程,符合守护进程的特性。并且看到C字段的值为99,代表这个进程占用了99%的CPU资源。
如果我们想杀死这个进程,可以使用kill命令 + -s KILL(要发送的信号) + PID号,发送KILL信号到PID指定的进程(Linux通过PID号唯一确定进程)。如kill -s KILL 9979。
简便地,也可用kill %9979命令,两者是同样的效果。
此时再通过ps -ef | gerp train.py查看train.py进程,会发现进程已经被杀掉。
至此,本篇博文结束。这是我在掘金的第一篇博客,如有纰漏欢迎评论区交流。
Reference
linux查看操作系统版本信息 - vaelailai - 博客园 (cnblogs.com)
查看Linux系统架构类型的5条常用命令 | 《Linux就该这么学》 (linuxprobe.com)
GPU之nvidia-smi命令详解 - 简书 (jianshu.com)
Linux 软件安装到哪里合适,目录详解_勿忘初心-CSDN博客
Centos7 安装 Anaconda3 及 常用的conda命令 - 极客分享 (geek-share.com)
如何更新pip源 - 云+社区 - 腾讯云 (tencent.com)
有requirements.txt文件后,如何创建对应的conda虚拟环境?可以使用pip命令来安装吗?
使用conda安装requirement.txt指定的依赖包 - Gelthin - 博客园 (cnblogs.com)
VsCode连接服务器并编辑服务器端代码_追公车的少年的博客-CSDN博客_vscode 编辑服务器代码
ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found - 简书 (jianshu.com)
如何更新pip源 - 云+社区 - 腾讯云 (tencent.com)
Linux 守护进程的启动方法 - 阮一峰的网络日志 (ruanyifeng.com)