anaconda切换环境_深度学习环境搭建、配置及使用之三:深度学习环境搭建

关注“哪儿趣”,不定时更新,选择“星标”或“置顶”,

第一时间获取原创质量文章。

本文大约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是一个免费开源的FTP软件,支持SSH文件传输协议(SFTP)(可进行本地计算机与远程服务器之间的文件传输)

SSH和FileZilla都必须安装在本地计算机系统中。

SSH安装

SSH[1](Secure Shell)由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

本地计算机系统中,UNIXWindow以及Mac系统都可运行SSH,安装方法如下:

  • CentOS 7

需要普通管理员权限(sudo),用快捷键ctrl+alt+t打开终端Terminal窗口,运行:

sudo yum install openssh-server

然后回车,输入y,即可安装完成。

  • Windows10

下载openssh for windows[2],进行默认安装即可。

  • Mac

由于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软件,

    1. 点击"文件"——"站点管理器"
    2. 点击"新站点",在"我的站点"下重命名,此处设为“Lab532”
    • 1)若选"正常"
    • 2)若选"询问密码",只能填写用户名:username,然后点击右下角的"连接",再输入密码。
    • 用户名:username
    • 密码:password
    • 主机:服务器IP地址
    • 端口:默认是 22,已禁用,详细端口请联系管理员
    • 协议:SFTP - SSH File transfer Protocol
    • 登录类型:
    1. 继停留在"站点管理器"界面,在"常规"选项卡中,设置如下:
    2. 之后一直ok即可。
文件传输

以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,互不影响,且首先调用虚拟环境中的版本。

conda创建虚拟环境

确定系统安装了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发展和个人喜好。

示例:安装Tensorflow-GPU 1.6(CUDA 9和cuDNN 7)

  • 安装CUDA 9

    查询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

    安装完成

  • 安装cuDNN 7

    查询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,没有单独形成文件夹,都是统一存放在虚拟环境中的libinclude文件夹下,查看CUDA 9.0cuDNN 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的共享库,

  • 安装tensorflow-gpu 1.6.0

    安装完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 FMA2018-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.7715pciBusID: 0000:04:00.0totalMemory: 7.93GiB freeMemory: 7.81GiB2018-11-10 01:32:46.425831: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1312] Adding visible gpu devices: 02018-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__

注意,__为两个_组合而成。

PyTorch GPU版本的正确性验证

激活的环境中,输入python,进入到python3.6环境中,依次输入命令

>>> import torch>>> torch.cuda.is_available()

若输出True,则表示PyTorch GPU版本安装成功!

查看PyTorch 的版本的命令为

>>> import torch>>> torch.__version__

注意,__为两个_组合而成。

Anaconda下安装Tensorflow的GPU各个版本 (从1.6到2.1)

Tensorflow版本

根据Tensorflow官网[24],在Anaconda环境下安装Tensorflow 1.6.0、1.11.1和2.1.0三个典型的GPU版本。使用conda search cudnn命令查询cuDNN与CUDA的对应关系。

Tensorflow 1.6.0

系统默认GCC为4.8.5,在正常的终端中输入

conda create -n tensorflow16-gpu pip python=3.6source activate tensorflow16-gpu

在激活的环境中输入:

## 安装CUDA 9.0和cuDNN 7.1.2conda install cudatoolkit==9.0conda install cudnn==7.1.2pip install tensorflow-gpu==1.6.0

Tensorflow 1.11.0

系统默认GCC为4.8.5,在正常的终端中输入

conda create -n tensorflow111-gpu pip python=3.6source activate tensorflow111-gpu

在激活的环境中输入:

## 安装CUDA 9.2和cuDNN 7.2.1conda install cudatoolkit==9.2conda install cudnn==7.2.1pip 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.6source activate tensorflow12-gpu

在激活的环境中输入:

## 安装CUDA 10.1.243和cuDNN 7.6.5conda install cudatoolkit==10.1.243conda install cudnn==7.6.5pip install tensorflow-gpu==2.1.0

Anaconda下安装PyTorch的GPU各个版本(从0.4到1.4)

数据来源于官网[26],截止2020年4月11号,PyTorch 1.4版本需要配合CUDA 10.1CUDA9.2配合使用。

PyTorch PyTorch 0.4.1

conda create -n pytorch041 pip python=3.6source activate pytorch041

在虚拟环境中

conda install cudatoolkit==9.0conda install pytorch=0.4.1 cuda90 -c pytorch

PyTorch 1.1.0

conda create -n pytorch110 pip python=3.6source 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.6source 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的安装不做讨论。

  1. 编译安装yum源里的vim最新版

    参考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,需执行以下步骤。

  2. 卸载Vim

    在编译之前,需要卸载系统上的Vim版本

    如果Vim源代码已经删除,则需要重新[下载Vim源码](git clone https://github.com/vim/vim.git "下载Vim源码"),然后cd vim,再执行上述语句。

    如果是Ubuntu系统,卸载起来就比较方便

    sudo apt install checkinstallcd ~/vim       // vim是Vim源代码文件夹sudo checkinstall

    • 如果使用yum install vim*命令安装的Vim,卸载Vim时执行

      yum remove vim

    • 如果Vim是使用make编译过的,在CentOS7.6系统下,进入到Vim源代码目录,执行

      sudo make uninstall

  3. 下载Vim最新版源代码

    cd ~                                         // 进入到当前用户的根目录下git clone https://github.com/vim/vim.git     // 下载Vim源代码cd vim                                       // 进入到Vim源代码文件

  4. 配置
    ./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/:指定将要安装到的路径

  5. 设置VIMRUNTIMEDIR

    VIMRUNTIMEDIR是vim运行时候所需资源的目录,非常重要。

        make VIMRUNTIMEDIR=/usr/local/share/vim/vim82
  6. 编译安装

    sudo make install

  7. 设置Vim为默认的编辑器

    使用update-alternative设置vim为默认编辑器:

    sudo update-alternatives --install /usr/bin/editor editor /usr/local/bin/vim 1sudo update-alternatives --set editor /usr/local/bin/vimsudo update-alternatives --install /usr/bin/vi vi /usr/local/bin/vim 1sudo 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。

Vim8 —> NeoVim

关于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.rpmsudo yum install -y neovim python3-neovim

心理准备

  • 学习Vim在开始时是痛苦的但是熟悉之后,工作效率会大大提升
  • 需要时间
  • 需要不断地练习
  • 不要期望你能在3天内把vim练得比别的编辑器更有效率
配置文件

如果使用NVim或Vim编辑文件:

# NeoVimnvim file

# Vimvim 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: tabstopset expandtabset tabstop=2set shiftwidth=2set 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

这三个快捷键非常有用,可以相互搭配使用!

几种模式
  • 普通模式(Normal):启动NVim/Vim后,Vim默认在模式下,进入Normal模式的快捷键:Esc
  • 插入模式(Insert):快捷键: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 就是会话与窗口的"解绑"工具,将它们彻底分离。

  • 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
  • 它可以让新窗口"接入"已经存在的会话。
  • 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
  • 它还支持窗口任意的垂直和水平拆分。
几个概念

  • 会话(session): 建立一个 tmux 工作区会话,会话可以长期驻留,重新连接服务器不会丢失,我们只需重新 tmux attach 到之前的工作区就可以恢复会话
  • 窗口(window): 容纳多个窗格
  • 窗格(pane): 可以在窗口中分成多个窗格
安装
  • CentOS/Fedora

    sudo yum install tmux

  • Ubuntu/Debian

    sudo apt-get install tmux

  • Mac

    brew install tmux

启动和退出

在终端输入

tmux

启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。

按下Ctrl+d或者显式输入exit命令,就可以退出 Tmux 窗口。

前缀键

vimnvim类似,都存在一个前缀键,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:显示窗格编号

第四章:在服务器上利用GPU跑程序的简化步骤
  1. 利用FileZilla软件登录远程服务器上传所需程序文件
  2. 在终端利用SSH登录远程服务器
  3. 按照下面的命令进行操作,建议使用tmux终端复用神器,第2、3、4步不是必须的,但是强烈推荐使用!

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

哪儿趣▲▲

你可能感兴趣的:(anaconda切换环境)