关注“哪儿趣”,不定时更新,选择“星标”或“置顶”,
第一时间获取原创质量文章。
本文大约21000字,预计阅读时间50分钟。
本文链接
Github:https://github.com/kangzhiheng/GitLocalDoc
个人网站:https://kangzhiheng.top/post/10-服务器环境搭建、配置及使用
系列文章导读:本系列文章 《深度学习环境搭建、配置及使用》 主要介绍了自己使用服务器进行管理和科研的一点心得,即:如何搭建和配置深度学习环境,普通用户可以自由切换多版本CUDA、cuDNN版本,自由组合创建不同版本的Tensorflow、PyTorch等深度学习环境。
本文摘要:本文是系列文章《深度学习环境搭建、配置及使用》的第三部分,主要讲解如何搭建深度学习环境,包括不同版本的CUDA、cuDNN在同一用户环境下的共存和切换,以满足不同Tensorflow、PyTorch版本的需求;如何创建不同版本GPU版本的Tensorflow、PyTorch环境;如何使用NVim/Vim和Tmux来提高炼丹效率。
关键词:SSH;CUDA;cuDNN;Tensorflow;PyTorch;NVim/Vim;Tmux;
本部分所有指令,建议在bash
环境下运行,使用zsh
的shell请切换为bash
,避免不必要的麻烦。
注意:标题右上角带有"*"标记的,意为这一部分内容需要管理员操作。
SSH远程登录和文件传输SSH和FileZilla都必须安装在本地计算机系统中。
SSH安装SSH[1](Secure Shell)由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
在本地计算机系统中,UNIX
、Window
以及Mac
系统都可运行SSH,安装方法如下:
需要普通管理员权限(sudo),用快捷键ctrl
+alt
+t
打开终端Terminal窗口,运行:
sudo yum install openssh-server
然后回车,输入y
,即可安装完成。
下载openssh for windows[2],进行默认安装即可。
由于Mac本身安装了ssh服务,默认情况下不会开机自启,所以打开终端,输入命令启动sshd服务
:
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
输入Mac密码后即可开启。
SSH登录在任一平台上打开终端(Windows上推荐**Xshell**[3]、**FinalShell**[4],Linux系统和Mac直接打开终端即可),输入命令
ssh username@IPaddress -p PORT
其中, username
为服务器的用户名 IPaddress
为服务器的IP地址 PORT
为服务器端口号,默认为22,已禁止。已设置实验室专用端口,请联系管理员
输入密码后即可进入自己账户的主目录(普通用户,无root权限)
修改账户密码登录到服务器之后,修改原始密码保证账户安全,直接输入
passwd
username
为您在服务器上的用户名,根据提示修改新的密码。
至此,您已经安全登录到服务器上。
FileZilla在Windows和Linux下互传文件FileZilla 客户端是一个快速可靠的、跨平台的FTP,FTPS和SFTP客户端。具有图形用户界面(GUI)和很多有用的特性,比如支持FTP, FTP并支持SSL/TLS (FTPS)协议,支持SSH文件传输协议(SFTP)等。
以windows 10为例,下载FileZilla[5],选择安装位置,正常安装即可。
FileZilla连接服务器打开FileZilla软件,
以window 10为例,利用FileZilla登录到服务器后,可以看到左边是本地站点,右边是远程站点(服务器上的目录),如下图所示,直接将本地文件test.py
用鼠标拖拽到服务器上的指定目录即可(上传过程),这个过程是可逆的(下载过程),非常方便。
利用FileZilla软件配合SSH协议,即可完成文件传输及程序运行等必要工作。
CUDA、cuDNN多版本切换之:修改符号链接和覆盖cuDNN 文件*CUDA切换在安装CUDA[6]这一小节介绍了多种CUDA文件的安装,这些CUDA版本统一被安装到/usr/local
文件夹下,使用命令
ll /usr/local
输出
系统是通过/usr/local/
下的cuda
符号链接来识别CUDA当前指定的CUDA版本,比如现在符号链接**cuda**
指向cuda-9.0,如果要指向其它CUDA版本,修改符号链接即可,比如切换到CUDA-10.0版本:
cd /usr/local/
# 删除符号链接
sudo rm cuda
# 新建符号链接
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda
查看当前cuda
指向
ll
或者
stat cuda
查看CUDA版本
nvcc --version
cuDNN切换
在Tensorflow不同版本的GPU环境配置中,CUDA的切换,往往伴随着cuDNN的切换,cuDNN是由头文件和动态链接库组成的,所以下载对应的cuDNN,按照cuDNN的安装方法[7]进行文件替换即可。
总结这种方法的CUDA和cuDNN版本切换,适用于管理员整体切换和个人使用者,不适合服务器环境下的普通用户,有一种好的解决方法是配合Environment Modules[8]来进行环境管理,后续可以进行深入探索,推荐使用Anaconda来进行CUDA、cuDNN版本的管理。
(推荐)CUDA、cuDNN多版本切换之:Anaconda下安装不同版本的CUDA、cuDNN虚拟环境的重要性:无它,唯方便尔。
因为独立的环境利于管理,不激活不会对系统环境造成不必要的影响,若虚拟环境遇到了无法期望的错误,即可删除环境并重新创建即可,不需要重装系统;创建独立的虚拟环境,各个虚拟环境相互独立,互不影响,不同应用可以使用不同的版本,环境内的包升级不影响其他应用。
虚拟环境的创建有很多方法:Anaconda、virtualenv、docker等,但是就深度学习环境来说,Anaconda方便管理和使用,在此推荐Anaconda。
考虑到这么一个场景:苦于科研无想法,于是在github上逛gai碰碰运气,终于看到一个不错的项目,一顿操作,clone这个repo之后,从anaconda创建一个虚拟环境来尝试运行,仔细阅读README,发现要求特定版本的一些依赖库,其它的库都还好说,如果要求特定版本的CUDN和cuDNN,如果重新下载安装配置就比较麻烦,何况非管理员用户没有安装和配置权限。这时候考虑Anaconda。
Anaconda生态比较完整,只要系统里正确安装了NVIDIA驱动[9],就可以在Anaconda下的虚拟环境中,安装特定版本的cuda和cudnn,而不必全局进行安装。
需要注意的是:
Anaconda的 cudatoolkit 不包含完整安装cuda的全部文件,只是包含了用于 tensorflow,PyTorch,xgboost 和 Cupy 等所需要的共享库文件,cuDNN亦是如此。
如果系统已经全局安装了CUDA和cuDNN,在虚拟环境中又安装了其它版本的CUDA和cuDNN,互不影响,且首先调用虚拟环境中的版本。
确定系统安装了Anaconda3[10],假设此时要搭建一个Tensorflow 1.6的GPU环境,查表[11]可知,需求CUDA 9、cuDNN 7版本,python版本指定为3.6。
创建虚拟环境
在终端输入:
conda create -n tensorflow16-gpu pip python=3.6
创建完成后,在 ~/anaconda3/env 文件夹下出现名为为 tensorflow16-gpu 的虚拟环境
查看当前系统的Anaconda环境
conda env list
激活虚拟环境
不建议使用系统建议的激活方式:conda activate tensorflow16-gpu
,推荐使用:
source activate tensorflow16-gpu
若要退出当前环境,输入
source deactivate tensorflow16-gpu
究竟使用哪种激活方式,看Anaconda发展和个人喜好。
查询Anaconda库里的CUDA版本:
conda search cuda
截止2020年4月11日,Anaconda官方CUDA版本[12]包含:9.0[13]、9.2[14]、10.0[15]、10.1(update1[16]和update2[17])、10.2[18],Anaconda CUDA版本[19]紧跟NVIDIA官方CUDA[20]更新速度,满足绝大部分深度学习环境的要求。
注意:不同的Anaconda源里的版本不一样,但是channel是pkgs/main
的比较权威的,推荐使用pkgs/main
里的版本。
Tensorflow 1.6 GPU版本需求CUDA 9.0:
conda install cudatoolkit==9.0
安装完成
查询Anaconda库里的CUDA版本:
conda search cudnn
截止2020年4月11日,Anaconda官方cuDNN版本[21]如下,根据需求进行安装,也满足绝大部分深度学习环境的要求。
Tensorflow 1.6 GPU版本需求cuDNN 7。
选择cuDNN 7.0.5:
conda install cudnn==7.0.5
出现错误
Collecting package metadata (current_repodata.json): doneSolving environment: failed with initial frozen solve. Retrying with flexible solve.Collecting package metadata (repodata.json): doneSolving environment: failed with initial frozen solve. Retrying with flexible solve.Solving environment: - Found conflicts! Looking for incompatible packages. failed UnsatisfiableError:
这是怎么回事呢?打开cuDNN官网[22],注意到,同一个版本的cuDNN,可能对应不同的CUDA版本,比如cuDNN 7.0.5可以对应CUDA 8.0、CUDA 9.0和CUDA 9.1,所以查看Anaconda官方里的cuDNN 7.0.5对应哪个CUDA版本。
打开cuDNN的Anaconda仓库[23],查询到Anaconda仓库里的cuDNN 7.0.5对应的是CUDA 8.0),因此选择CUDA 9.0对应的cuDNN 7.1.2,所以在安装前,使用
conda search cudnn
查询cuDNN与CUDA的对应关系。
安装cuDNN 7.1.2:
conda install cudnn==7.1.2
这种方法安装CUDA和cuDNN,没有单独形成文件夹,都是统一存放在虚拟环境中的lib
、include
文件夹下,查看CUDA 9.0
和cuDNN 7.1.2
是否被安装到虚拟环境tensorflow16-gpu
中:
ls ~/anaconda3/envs/tensorflow16-gpu/lib/
输出
或者使用以下命令查看CUDA共享库的安装:
ls ~/anaconda3/envs/tensorflow16-gpu/lib/ | grep cuda
输出
libcudart.solibcudart.so.9.0libcudart.so.9.0.176
使用以下命令查看cuDNN共享库的安装:
ls ~/anaconda3/envs/tensorflow16-gpu/lib/ | grep cudnn
输出
libcudnn.solibcudnn.so.7libcudnn.so.7.1.2libcudnn_static.a
使用以下命令查看cuDNN头文件的安装:
ls ~/anaconda3/envs/tensorflow16-gpu/include/ | grep cudnn
输出
cudnn.h
可以看到相关CUDA、cuDNN的共享库,
安装完CUDA 9.0和cuDNN 7.1.2之后,在激活的环境中输入
pip install tensorflow-gpu==1.6.0
是否正确安装,请参照章节 测试tensorflow-gpu版本的正确性 里的方法验证。
版本检测及GPU是否安装成功检测Tensorflow GPU版本的正确性验证在激活的环境中,输入python
,进入到python3.6环境中,依次输入命令
>>> import tensorflow as tf>>> tf.test.is_gpu_available()
若输出类似的内容,且最后一行为True
,则表示tensorflow-gpu 1.6 版本安装成功!
2018-11-10 01:32:45.539907: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-11-10 01:32:46.425789: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1212] Found device 0 with properties:
name: GeForce GTX 1080 major: 6 minor: 1 memoryClockRate(GHz): 1.7715
pciBusID: 0000:04:00.0
totalMemory: 7.93GiB freeMemory: 7.81GiB
2018-11-10 01:32:46.425831: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1312] Adding visible gpu devices: 0
2018-11-10 01:32:46.794084: I tensorflow/core/common_runtime/gpu/gpu_device.cc:993] Creating TensorFlow device (/device:GPU:0 with 7545 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080, pci bus id: 0000:04:00.0, compute capability: 6.1)
True
查看tensorflow的版本的命令为
>>> import tensorflow as tf>>> tf.__version__
注意,__
为两个_
组合而成。
在激活的环境中,输入python
,进入到python3.6环境中,依次输入命令
>>> import torch>>> torch.cuda.is_available()
若输出True
,则表示PyTorch GPU版本安装成功!
查看PyTorch 的版本的命令为
>>> import torch>>> torch.__version__
注意,__
为两个_
组合而成。
根据Tensorflow官网[24],在Anaconda环境下安装Tensorflow 1.6.0、1.11.1和2.1.0三个典型的GPU版本。使用conda search cudnn
命令查询cuDNN与CUDA的对应关系。
系统默认GCC为4.8.5,在正常的终端中输入
conda create -n tensorflow16-gpu pip python=3.6
source activate tensorflow16-gpu
在激活的环境中输入:
## 安装CUDA 9.0和cuDNN 7.1.2
conda install cudatoolkit==9.0
conda install cudnn==7.1.2
pip install tensorflow-gpu==1.6.0
Tensorflow 1.11.0
系统默认GCC为4.8.5,在正常的终端中输入
conda create -n tensorflow111-gpu pip python=3.6
source activate tensorflow111-gpu
在激活的环境中输入:
## 安装CUDA 9.2和cuDNN 7.2.1
conda install cudatoolkit==9.2
conda install cudnn==7.2.1
pip install tensorflow-gpu==1.11.0
Tensorflow 2.1.0
切换GCC版本至7.3.1
scl enable devtoolset-7 bash
仅本shell本次登录有效,若使全局生效,查看方法[25]。
在正常的终端中输入
conda create -n tensorflow21-gpu pip python=3.6
source activate tensorflow12-gpu
在激活的环境中输入:
## 安装CUDA 10.1.243和cuDNN 7.6.5
conda install cudatoolkit==10.1.243
conda install cudnn==7.6.5
pip install tensorflow-gpu==2.1.0
Anaconda下安装PyTorch的GPU各个版本(从0.4到1.4)
数据来源于官网[26],截止2020年4月11号,PyTorch 1.4
版本需要配合CUDA 10.1
或CUDA9.2
配合使用。
conda create -n pytorch041 pip python=3.6
source activate pytorch041
在虚拟环境中
conda install cudatoolkit==9.0
conda install pytorch=0.4.1 cuda90 -c pytorch
PyTorch 1.1.0
conda create -n pytorch110 pip python=3.6
source activate pytorch110
在虚拟环境中
conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=9.0 -c pytorch
PyTorch 1.4
conda create -n pytorch14 pip python=3.6
source activate pytorch14
在虚拟环境中
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
总结
如果在安装过程中出现类似的错误
CondaHTTPError: HTTP 000 CONNECTION FAILED for url
Elapsed: -
An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
可能因为网络原因导致安装中断,不断尝试安装命令即可。
安装完成后,请根据小节《PyTorch GPU版本的正确性验证》进行版本验证。
NVim/Vim简单使用本小节内容节选自我的另一篇文章《Linux之打造vim实用配置方案》[27]。
什么是Vim?Vim[28]- the ubiquitous text editor,一种无处不在的文本编辑器,维基百科是这么介绍vim的:
Vim是从vi[29]发展出来的一个文本编辑器[30]。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs[31]并列成为类Unix系统[32]用户最喜欢的编辑器。
Vim的第一个版本由布莱姆·米勒[33]在1991年发布。最初的简称是Vi IMitation,随着功能的不断增加,正式名称改成了Vi IMproved。现在是在开放源代码[34]方式下发行的自由软件[35]。
文件的增删查改——熟悉Windows的朋友可能对文件增删查改习以为常,在此不做讨论。对于一名程序工作者,可能经常在Linux下进行程序的增删查改,很多人可能有这么一套方法:我在Windows环境下编写好了程序,然后通过Xftp、FileZilla等类似的工具将其丢到服务器上,一顿操作下来,发现程序报错了,怎么办?然后在Windows下修改,再丢到服务器上双十合十祈求老天保佑……当然像PyCharm这种强大的IDE,会提供远程接入服务器进行同步文件及程序运行等功能,这种也挺好,就是可能需要鼠标点来点去,也有一定的学习成本。现在有这么一个问题,PyCharm明天到期了……社区版?不好意思所有社区版鄙人都不会去尝试,别问为啥,问就是不喜欢。
配置文件——配置文件和工作效率有着紧密的联系。对于算法工程师或者后端工程师,在Github逛gai的时候终于发现了一个好用的模型,一顿git clone repoyoulike
,然后按照配置文档进行修改,什么tf要升级啦,gcc/g++要降级啦,这个文档要修改路径,那个文档要改参数,都离不开Vim,如果是带桌面的Linux系统,可能会使用gedit
来打开文件进行编辑,但是这样效率很低,尤其是大型程序修改起来特别费劲。对于大多数情况,可能用ssh连接远程服务器,这个时候,怎么也绕不开Vim,尤其是那些只能在服务器上运行的程序。
知其然知其所以然——使用Vim来处理程序方面的设定问题,不但可以让自己比较熟悉Linux的运行状况,也更加能保证你的修改可以在Linux下正确运行。
Vim适用于各种操作系统上,比如类Unix(种Linux发行版本、Mac 用户)以及Windwos系统。Unix可以使用包管理器安装 Vim;对于 Windows 用户,可以从官网[36]下载。
Vim哲学简单概括:摆脱鼠标,一键到达。
即为全命令操作,能用键盘做到的事情,绝不用鼠标,在Vim下,键盘可以满足你的一切需求,效率是第一生产力。
升级支持python3的Vim8*在众多Linux发行版中,比如CentOS或者Ubuntu等,默认安装的是vi编辑器,Vim兼容vi。Vim已经存在20年了,时代在进步,Vim8[37]在NeoVim[38]的步步紧逼下,扩展了一些新的特征,比如支持时钟、异步操作、支持终端窗口terminal,尤其是支持terminal非常关键。本文最开始在Vim7下进行操作的,但是有些插件需要Vim8版本,尤其是代码补全插件YouCompleteMe[39],在升级了支持Python3的Vim8后(在Vim版本中,不能同时支持Python2和Python3),依然有些瑕疵,比如对Python3的第三方库的扩展不是很友好,对C/C++支持得还不错,不知道是不是我的插件安装有问题还是什么原因,折腾了两三天后,果断把Vim换成了NeoVim[40],YouCompleteMe[41]换了另一个代码补全插件coc-vim[42],香得不行。在这一小节,介绍怎么编译支持Python3的Vim8版本,前提是系统了安装Python3,Python3的安装不做讨论。
参考YouCompleteMe[43]里给出的方法,略作调整。
首先检查系统里的Vim是否已经安装,在终端输入命令
rpm -qa | grep vim
如果有显示且没有提示任何缺包或者错误,则表示Vim已经被安装,如果没有安装,直接从第3步(下载Vim最新版源代码)开始阅读。
一般情况下,运行下列命令安装Vim
sudo yum -y install yum* // CentOS7.6系统
查看vim版本
vim --version
可以看到,Vim版本一般是7.4,而现在Vim发行版已经发行到了第八代,包括很多新的功能,为了打造属于自己的IDE,必须升级Vim到最新版本。
如果是Vim版本,查看Vim是否支持Python3
vim --version | grep python
如果结果显示python3前面是+
号,则这一小节可以跳过,如果是-
号,则需要自己编译Vim,需执行以下步骤。
在编译之前,需要卸载系统上的Vim版本
如果Vim源代码已经删除,则需要重新[下载Vim源码](git clone https://github.com/vim/vim.git "下载Vim源码"),然后cd vim
,再执行上述语句。
如果是Ubuntu系统,卸载起来就比较方便
sudo apt install checkinstall
cd ~/vim // vim是Vim源代码文件夹
sudo checkinstall
yum install vim*
命令安装的Vim,卸载Vim时执行
yum remove vim
make
编译过的,在CentOS7.6系统下,进入到Vim源代码目录,执行
sudo make uninstall
cd ~ // 进入到当前用户的根目录下
git clone https://github.com/vim/vim.git // 下载Vim源代码
cd vim // 进入到Vim源代码文件
./configure --with-features=huge \ --enable-multibyte \ --enable-rubyinterp=yes \ --enable-python3interp=yes \ --with-python3-config-dir=$(python3-config --configdir) \ --enable-perlinterp=yes \ --enable-luainterp=yes \ --enable-gui=gtk2 \ --enable-cscope \ --prefix=/usr/local
命令解释[44]:
--with-features=huge
:支持最大特性
--enable-multibyte
:打开多字节支持,可以在Vim中输入中文
--enable-rubyinterp
:打开对ruby编写的插件的支持
--enable-python3interp
:打开对python3编写的插件的支持
--with-python-config-dir
:Python3的路径
--enable-perlinterp
:打开对perl编写的插件的支持
--enable-luainterp
:打开对lua编写的插件的支持
--enable-gui
:打开GUI支持
--enable-cscope
:打开对cscope的支持
--prefix=/usr/local/
:指定将要安装到的路径
VIMRUNTIMEDIR是vim运行时候所需资源的目录,非常重要。
make VIMRUNTIMEDIR=/usr/local/share/vim/vim82
sudo make install
使用update-alternative
设置vim为默认编辑器:
sudo update-alternatives --install /usr/bin/editor editor /usr/local/bin/vim 1
sudo update-alternatives --set editor /usr/local/bin/vim
sudo update-alternatives --install /usr/bin/vi vi /usr/local/bin/vim 1
sudo update-alternatives --set vi /usr/local/bin/vim
按照上述步骤完成后查看Vim**版本
vim --version
vim版本
可以看到Vim版本是8.2版本,已开启python3支持,需要进行验证,在终端输入vim
,接着在正常模式下输入:echo has("python3")
,按一下回车键,若屏幕最下面输出1
,则配置正确,Vim支持Python3。
编译的时候可能会出现各种意想不到的问题,这个时候要多看专业的文档,比如官网文档、github及Issues(非常有用)、stackoverflow[45]等,其次再考虑其它出处,尽可能多看专业的英文文档,很多问题我们习惯看一些野路子中文解答,看似走了捷径但是花费了更多的时间,切记!一些优秀的项目有对应的中文文档,首推!
该方法是全局设置方法。
安装中文vim帮助文档
进入Vim环境,按一下前缀键esc
,在英文语法环境下,输入:help
后(终端最下面显示),进入vim帮助文档,此界面是英文的,如果想要设置中文帮助文档,请执行以下步骤:
下载中文安装包
wget https://github.com/yianwillis/vimcdoc/archive/v2.3.0.tar.gz
解压
tar zxvf v2.3.0.tar.gz
安装
cd vimcdoc-2.3.0/ # 进入解压后的目录
./vimcdoc.sh -i # 安装
命令会自动识别 Vim 的安装路径,并将中文的文档拷贝到相应的地方,原有的英文文档不受影响,查阅中文文档学习Vim。
关于Vim的插件介绍,请查阅我的另一篇文章《Linux之打造vim实用配置方案》[50]。
NeoVim和Vim的用法基本一致,底层架构有所不同而已,Vim用户可以很方便的操作NeoVim,配置文件可以直接进行迁移。
NeoVim[51]的安装:
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y neovim python3-neovim
心理准备
如果使用NVim或Vim编辑文件:
# NeoVim
nvim file
# Vim
vim file
发现界面黑乎乎的,没有行号,没有语法高亮等,作为一名视觉动物,稍微美化一下NeoVim或者Vim,使其不那么打击我们学习的热情。
NVim的配置文件路径:~/.config/nvim/init.vim
Vim的配置文件路径:~/.vim/vimrc
将下列配置,根据需求,粘贴到配置文件中,然后:wq
,在终端中输入source ~/.config/nvim/init.vim
或者source ~/.vim/vimrc
刷新配置文件。
请仔细阅读每一行注释。
-----------------
" 基本设置
" -----------------
" 语法高亮
syntax on
" 显示行号
set number
" 显示当前行号的相关行,比如以此行为标准,向上/向下数第1行、第2行等
set relativenumber
" 设置TAB宽度, ts: tabstop
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
" 光标所在的那一栏上面/下面还显示出6行
set scrolloff=6
" 显示当前行的下滑线
set cursorline
" 保证当前vim环境下的字不会超出屏幕
set wrap
" 显示当前的命令
set showcmd
" 左下角显示当前的模式名称
set showmode
" 按下TAB,自动补全指令
set wildmenu
" 是否显示状态栏, 0 : 不显示, 1 : 表示只在多窗口时显示, 2 : 表示显示
set laststatus=2
" 显示当前光标的位置、进度以及时间
set statusline=%F%m%r%h%w\ [pos=(%l,%v)]\ [progress=%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
" 关闭当错误发生的bell提示音
set noeb
" 当错误发生时, 屏幕闪烁
" set vb
" 当错误发生时, 不要闪烁屏幕
" set novisualbell
" ------------------
" 关于搜索和高亮
" ------------------
" 高亮搜索到的词
set hlsearch
"为了避免打开新的文件时显示的上一个文件的搜索结果产生的高亮
" exec 表示在:后面运行的命令
exec "nohlsearch"
" 输入时, 边输入, 边高亮
set incsearch
" 忽略大小写
set ignorecase
" 智能大小写
set smartcase
" 支持鼠标点击和滚动
" set mouse=a
" -----------------
" map 键盘映射
" -----------------
" 按下小写s, 啥事不干
map s
" 按下大写S, 保存当前文件, 为回车按键
map S :w
" 按下大写Q, 退出当前文件
map Q :q
" 按下大写R, 更新文件配置
map R :source $MYVIMRC
77~81
行解释,假设要编辑一个文件,进行了修改,此时
Esc
,再按住大写S
,默认操作:先按前缀键Esc
,再输入:w
;Esc
,再按住大写R
,默认操作:退出文件,再source files
;Esc
,再按住大写Q
,默认操作:先按前缀键Esc
,再输入:q
;这三个快捷键非常有用,可以相互搭配使用!
几种模式Esc
;i
,会看到vim左下角有一个 -- 插入 -- 字样,表示可以以插入的方式输入,此时,你可以输入文本了,就像你用“记事本”一样;在终端输入:
vimtutor
查看Vim教程(已在章节[52]安装了中文版教程),强烈建议自学一遍。先按前缀键Esc
,再输入:q
可退出教程。
i
→ Insert 模式,按 ESC 回到 Normal 模式;
退出并保存
一般操作:先按前缀键Esc
,再输入:wq
;
快捷键:根据上述配置文件,先按前缀键Esc
,再按住SQ
;
保存并更新配置:
一般操作:先按前缀键Esc
,再输入:wq
,在终端输入source files
;
快捷键:根据上述配置文件,先按前缀键Esc
,再按住SR
;
退出不保存:先按前缀键Esc
,再输入:q!
关于删除:在普通模式(Normal)下,
x
→ 删除光标所指向的字符;
dd
→ 删除光标所在的那一行;
关于插入:**在普通模式(Normal)下,**除了i
可以进入插入模式外,还有
a
→ 在光标后插入;
o
→ 在当前行后插入一个新行;
O
→ 在当前行前插入一个新行;
cw
→ 替换从光标所在位置后到一个单词结尾的字符;
关于撤销/恢复:在普通模式(Normal)下,
u
→ 撤销;
,意为Ctrl + r
→ 恢复;
关于跳转:在普通模式(Normal)下,
gg
→ 跳转到当前文件的第一行行首;
G
→ 跳转到当前文件的最后一行行首;
0
→ 跳转到当前行的行首;
$
→ 跳转到当前行的最后一个字符处;
50gg
→ 跳转到第50行;
50j
→ 从当前行向后跳转50行;
关于搜索:在普通模式(Normal)下,输入/
,就可以进行文件内搜索,按n
查找下一个,N
查找上一个
这只是些非常基础的命令,不过足以应付一般情况,NVim/Vim下有很多实用的插件,请关注我的另一篇文章:《Linux之打造vim实用配置方案》[53]。
Tmux简单使用Tmux 是一个终端复用器(terminal multiplexer),非常有用,建议所有重要的操作,都在Tmux里进行,只要服务器不宕机,操作一直在进行。
简介命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起[54]的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录[55]远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
作用Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。
几个概念
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口"接入"已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分。
CentOS/Fedora
sudo yum install tmux
Ubuntu/Debian
sudo apt-get install tmux
Mac
brew install tmux
在终端输入
tmux
启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。
按下Ctrl+d
或者显式输入exit
命令,就可以退出 Tmux 窗口。
与vim
、nvim
类似,都存在一个前缀键,Tmux 窗口有大量的快捷键,所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b
,即先按下Ctrl+b
,快捷键才会生效。
举例来说,帮助命令的快捷键是Ctrl+b ?
。它的用法是,在 Tmux 窗口中,先按下Ctrl+b
,再按下?
,就会显示帮助信息。
然后,按下 ESC 键或q
键,就可以退出帮助。
当然如果觉得前缀键Ctrl+b
不太方便,可以更换前缀键。
第一个启动的 Tmux 窗口,编号是0
,第二个窗口的编号是1
,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。
使用编号区分会话,不太直观,更好的方法是为会话起名。
tmux new -s YourSeeName
新建了一个名为YourSeeName的Tmux窗口。
在 Tmux 窗口中,按下Ctrl+b d
或者输入tmux detach
命令,就会将当前会话与窗口分离,进入普通的终端界面,但是会话和里面的进程仍然在后台运行,tmux ls
命令可以查看当前所有的 Tmux 会话。
在Tmux会话内,列出所有会话的快捷键是Ctrl+b s
登录到终端以后,使用命令
tmux ls
可以查看当前所有的 Tmux 会话。
进入到Tmux最后一次退出的窗口
tmux attach
使用tmux ls
查看可用的窗口,然后选择想进入的窗口:
# 进入名为Seesion-Name的会话窗口
tmux a -t Seesion-Name
# 进入编号为SessionNum的会话窗口
tmux a -t Session-Num # SessionNum为0、1、2...3
# 使用会话名称
tmux kill-session -t Seesion-Name
# 使用会话编号
tmux kill-session -t Session-Num
# 使用会话名称
tmux switch -t Seesion-Name
# 使用会话编号
tmux switch -t Session-Num
在Tmux会话内,重命名的快捷键是Ctrl+b $
在终端界面
# 使用会话名称
tmux rename-session -t Seesion-Name New-Name
# 使用会话编号
tmux rename-session -t Session-Num New-Name
窗格操作
Ctrl+b %
:划分左右两个窗格
Ctrl+b "
:划分上下两个窗格
Ctrl+b q
:显示窗格编号
ssh username@IPaddress -p 22 # 登录服务器
tmux ls # 查看终端会话列表,若没有,新建一个
# 会话窗口 tmux new -s Seesion-Name,保证程序在后台运行
tmux a -t Seesion-Name # 进入你指定的会话窗口
source activate tensorflow-gpu # 在会话窗口中激活tensorflow-gpu环境
cd xxx/yyy # 程序文件所在路径
ls # 查看文件
python abc.py # 运行程序
总结
这一部分详细介绍了CUDA、cuDNN的切换(重点)、Tensorflow和PyTorch的安装(详细)、NVim/Vim和Tmux的使用方法(实用)。尤其是在利用Anaconda工具进行CUDA、cuDNN的版本切换最为方便;接着见到介绍NVim/Vim以及Tmux的使用方法;最后介绍了在服务器上利用GPU跑程序的简化步骤。本篇文章仅作为参考,如果遇到问题,还请仔细阅读错误信息,利用Google、Stack Overflow等工具一一排除。
本系列主体内容到此结束,在使用过程中,笔者就遇到的问题,单独整理在Github上的仓库GitLocalDoc里的第六章:https://github.com/kangzhiheng/GitLocalDoc#第六章:问题汇总,有兴趣的同学可以瞅瞅。
希望该系列文章能够帮助到您。
[1] SSH: https://en.wikipedia.org/wiki/Secure_Shell
[2] openssh for windows: https://www.mls-software.com/files/setupssh-7.9p1-1.exe
[3] Xshell: https://www.netsarang.com/zh/xshell-download/
[4] FinalShell: http://www.hostbuf.com/t/988.html
[5] FileZilla: https://download.filezilla-project.org/client/FileZilla_3.38.1_win64-setup_bundled.exe
[6] 安装CUDA: #安装CUDA
[7] cuDNN的安装方法: #cuDNN安装*
[8] Environment Modules: https://modules.readthedocs.io/en/latest/
[9] NVIDIA驱动: #NVIDIA驱动安装(CentOS、Ubuntu)*
[10] Anaconda3: #Anaconda3安装
[11] 查表: #Tensorflow建议配置
[12] CUDA版本: https://anaconda.org/anaconda/cudatoolkit/files
[13] CUDA 9.0: https://developer.nvidia.com/cuda-90-download-archive
[14] CUDA 9.2: https://developer.nvidia.com/cuda-92-download-archive
[15] CUDA 10.0: https://developer.nvidia.com/cuda-10.0-download-archive
[16] CUDA 10.1 update1: https://developer.nvidia.com/cuda-10.1-download-archive-update1
[17] CUDA 10.1 update2: https://developer.nvidia.com/cuda-10.1-download-archive-update2
[18] CUDA 10.2: https://developer.nvidia.com/cuda-downloads
[19] CUDA版本: https://anaconda.org/anaconda/cudatoolkit/files
[20] CUDA: https://developer.nvidia.com/cuda-toolkit-archive
[21] cuDNN版本: https://anaconda.org/anaconda/cudnn/files
[22] cuDNN官网: https://developer.nvidia.com/rdp/cudnn-archive
[23] Anaconda仓库: https://anaconda.org/anaconda/cudnn/files
[24] 官网: https://www.tensorflow.org/install/source#linux
[25] 查看方法: #全局生效
[26] Pytorch官网: https://pytorch.org/get-started/previous-versions/
[27]《Linux之打造vim实用配置方案》: https://www.kangzhiheng.top/2020/03/30/Linux之打造vim实用配置方案/
[28] Vim: https://www.vim.org/
[29] vi: https://zh.wikipedia.org/wiki/Vi
[30] 文本编辑器: https://zh.wikipedia.org/wiki/文本编辑器
[31] Emacs: https://zh.wikipedia.org/wiki/Emacs
[32] 类Unix系统: https://zh.wikipedia.org/wiki/类Unix系统
[33] 布莱姆·米勒: https://zh.wikipedia.org/wiki/布萊姆·米勒
[34] 开放源代码: https://zh.wikipedia.org/wiki/开放源代码
[35] 自由软件: https://zh.wikipedia.org/wiki/自由软件
[36] 官网: https://www.vim.org/download.php
[37] Vim8: https://github.com/vim/vim
[38] NeoVim: https://github.com/neovim/neovim
[39] 代码补全插件YouCompleteMe: https://github.com/ycm-core/YouCompleteMe
[40] NeoVim: https://github.com/neovim/neovim
[41] YouCompleteMe: https://github.com/ycm-core/YouCompleteMe
[42] coc-vim: https://github.com/neoclide/coc.nvim
[43] 参考YouCompleteMe: https://github.com/ycm-core/YouCompleteMe/wiki/Building-Vim-from-source
[44] 解释: https://www.jianshu.com/p/aac78ff576c5
[45] stackoverflow: https://stackoverflow.com/
[46] 代码补全插件YouCompleteMe: https://github.com/ycm-core/YouCompleteMe
[47] NeoVim: https://github.com/neovim/neovim
[48] YouCompleteMe: https://github.com/ycm-core/YouCompleteMe
[49] coc-vim: https://github.com/neoclide/coc.nvim
[50] 《Linux之打造vim实用配置方案》: https://www.kangzhiheng.top/2020/03/30/Linux之打造vim实用配置方案/
[51] NeoVim: https://github.com/neovim/neovim
[52] 章节: 升级支持python3的Vim8*
[53] 《Linux之打造vim实用配置方案》: https://www.kangzhiheng.top/2020/03/30/Linux之打造vim实用配置方案/
[54] 连在一起: http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html
[55] SSH 登录: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
哪儿趣▲▲