手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

时间:2023-03-10 04:49:09
手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

出一期用于连接远程Ubuntu系统并配置pytorch环境的教学。2021-07-07 13:35:57-

现在的矿难导致显卡大幅度的涨价对很多要做深度学习领域的小伙伴们非常的不友好,配置设备固然要掏空钱包,那么租个云GPU变成个非常经济的选择!

但是用黑框命令行操控的Linux系统对很对习惯了用wingdows的同学显的十分不友好!

于是乎,我出了今天这期教程!

Xshell 7(win系统)是一个用于MS Windows平台的强大的SSH、TELNET和RLOGIN终端仿真软件。它使得用户能轻松和安全地从Windows PC*问UniX/Linux主机。

简单地说,X shell就是一个终端模拟软件,就是模拟服务器所在的linux,在Xshell中可以输入命令,就像在服务器的linux中输入命令一样,从而实现远程控制服务器。

下面放上基础的Xshell 7使用教程,介绍一点Xshell使用技巧。

登录服务器

Xshell 7使用教程的第一部分当然是登录服务器了。

第一步,登录首先需要我们拥有一台服务器,这样你就有服务器的IP地址、账户和密码。

第二步,打开Xshell 7,这时会打开两个相叠的窗口,点击上面一个窗口的新建来新建一个新的会话。

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

第三步,修改名称以区别主机,并在主机后面的方框中正确地输入你所拥有的服务器的IP地址。

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

第四步,点击左侧类别中的用户身份验证,然后在对应位置输入你的服务器的用户名和密码。然后点击确认就可以登陆了。

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

常用快捷键

Xshell 7使用教程当然少不了介绍一些常用的快捷键。在介绍快捷键之前,我们首先要完成一个设置。在菜单栏文件中选择默认会话属性,在左侧选择键盘,将下图方框中的两个选项勾上,操作更加方便。

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

下面就进入Xshell 7使用教程快捷键的介绍。

Ctrl+f     向后移动一个字符
Ctrl+b     向前移动一个字符
Ctrl+a     将光标移至输入行头,相当于Home键
Ctrl+e     将光标移至输入行末,相当于End键
Alt+f     以单词为单位,向前移动
Alt+b     以单词为单位,向前移动
Shift+PgUp   将终端显示向上滚动
Shift+PgDn   将终端显示向下滚动

Alt+s     切换到简单版模式
Alt+Enter   切换至全屏

Ctrl+s     锁住终端,可用来停留在当前屏
Ctrl+q     解锁终端,恢复刷屏
Ctrl+d     键盘输入结束或退出终端
Ctrl+s        暂停当前程序,暂停后按下任意键恢复运行

Ctrl+z        将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+Shift+r  重新连接
Ctrl+Insert  复制
Shift+Insert  粘贴

好了,Xshell 7使用教程就先介绍到这里

接下来是CUDA的安装教程!

查看显卡是否支持CUDA

基本的环境

首先了解自己服务器的操作系统内核版本等信息:

查看自己操作系统的版本信息:cat /etc/issue或者是 cat /etc/lsb-release等命令

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

查看服务器显卡信息:

  1. lspci | grep -i nvidia查看全部显卡信息。
  2. nvidia-smi如果已经安装了对应的显卡驱动的话可以采用这个命令。
  3. cat /proc/driver/nvidia/version查看安装的显卡的驱动信息。

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

CUDA驱动可以去英伟达官网自行下载安装。如果不会安装的同学可以看这个教程https://zhuanlan.zhihu.com/p/79059379

创建虚拟环境,构建pytorch环境!

1、进入官网选择要下载的版本和操作系统
https://www.anaconda.com/distribution/

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

安装
一、
找到下载好的文件名为Anaconda3-xxxx-Linux-x86_64的安装包,如果你是通过自己的电脑下载的安装包,想在服务器上面安装Anaconda,那么你可以通过scp命令传输安装包到Centos服务器。如果你是在服务器上面下载的,那么请略过此步。
传输命令为:scp Anaconda3-xxxx-Linux-x86_64 aliyun@192.168.1.122:/home 然后根据提示输入密码即可。
等待读条完成后,就将安装包传输到了Centos服务器。
二、或者通过xftp 上传到服务器home文件夹下

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

接着进入终端到Anaconda3-2018.12-Linux-x86_64.sh目录下:
在Linux里面.sh文件是可执行的脚本文件,需要用命令bash来进行安装。
此时我们输入命令bash Anaconda3-2018.12-Linux-x86_64.sh
然后开启安装,在安装过程中,基本上不断按回车或者yes默认就行了。

环境变量配置
安装完成后,我们还需要对环境变量进行添加,方便我们启动。

无论是哪种内核(版本)的系统,都可以通过修改/etc/profile或者/etc/bashrc的配置信息来达到设置环境变量的目的

在这里我们修改profile文件

sudo vi /etc/profile

输入密码后进入文件编辑

这里sudo是加权限类似root用户进行操作,vi是一种编辑器

这里的i代表INSERT输入模式,然后按向下键切换到最下面,

在文件的末尾加上下述代码:

export PATH=$PATH:/home/software/anaconda3/bin

这个地址是自己安装的anaconda3的路径

按下ESC键,输入:,然后输入wq按下回车就保存退出了

最后重新载入配置文件,输入source /etc/profile

完成上述步骤,环境变量就配置好

测试

打开终端(Terminal),输入python3,如果显示如下图,则表示安装成功。

手把手教会你远程Linux虚拟机连接以及配置pytorch环境。

conda创建并激活虚拟环境

命令:

conda create -n your_env_name python=2.7/3.6
source activate your_env_name

其中,-n中n表示name,即你创建环境的名字。
之后如果忘记自己创建的环境的名字,可以查看conda中的环境:

conda env list

之后选择你创建的环境激活。之后进入pytorch官网选择你要安装的版本以及操作系统、CUDA版本号,便可以得到下载的命令。比如本人得到的命令是:

conda install pytorch torchvision cuda80 -c pytorch

若不知道自己CUDA的版本号,可以输入下面命令查询:

cat /usr/local/cuda/version.txt

若希望快速下载,可以把源换为国内的镜像源,从而提高下载速度。在下载前输入:

vim ~/.condarc

打开文件后,输入:

channels:
https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: true

若配置好环境后需要别的包,用conda或者pip下载皆可

运行py文件

直接调用指令 python xxxxx.py 即可

编辑py文件

直接调用指令 vi xxxxx.py即可

pytorch下多GPU并行运行教程

1. nn.DataParallel

1
torch.nn.DataParallel(module, device_ids=None, output_device=None, dim=0)
  • module -要并行化的模块
  • device_ids (python列表:int或torch.device) - CUDA设备(默认:所有设备)
  • output_device (int或torch.device) -输出的设备位置(默认:device_ids[0]) (用于汇总梯度信息的设备)

在模块级别实现数据并行。此容器通过在批尺寸维度中分块(其他对象将在每个设备上复制一次),在指定的设备上分割输入,从而并行化给定模块的应用程序。

在正向传递过程中,模型被复制到每个设备上,每个副本处理输入的一部分。在向后传递过程中,每个副本的梯度将累加到原始模块中。

批尺寸的大小应该大于所使用的gpu的数量。

https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html

1
2
if torch.cuda.device_count() > 1:
    model = nn.DataParallel(model.cuda(), device_ids=gpus, output_device=gpus[0])

DataParallel 可以自动拆分数据并发送作业指令到多个gpu上的多个模型。在每个模型完成它们的工作之后,dataparparallel收集并合并结果,然后再返回给您。

DataParallel 使用起来非常方便,我们只需要用 DataParallel 包装模型,再设置一些参数即可。需要定义的参数包括:参与训练的 GPU 有哪些,device_ids=gpus;用于汇总梯度的 GPU 是哪个,output_device=gpus[0] 。DataParallel 会自动帮我们将数据切分 load 到相应 GPU,将模型复制到相应 GPU,进行正向传播计算梯度并汇总。

DataParallel 仅需改动一行代码即可。但是DataParallel 速度慢,GPU 负载存在不均衡的问题。

2. 使用 torch.distributed 加速并行训练

It is recommended to use DistributedDataParallel, instead of DataParallel to do multi-GPU training, even if there is only a single node.

对于单节点多GPU数据并行训练,事实证明,DistributedDataParallel的速度明显高于torch.nn.DataParallel。

torch.nn.parallel.DistributedDataParallel(moduledevice_ids=Noneoutput_device=Nonedim=0broadcast_buffers=Trueprocess_group=Nonebucket_cap_mb=25find_unused_parameters=Falsecheck_reduction=Falsegradient_as_bucket_view=False)

在模块级别实现基于torch.distributed包的分布式数据并行。

此容器通过在批尺寸维度中分组,在指定的设备之间分割输入,从而并行地处理给定模块的应用程序。模块被复制到每台机器和每台设备上,每个这样的复制处理输入的一部分。在反向传播过程中,每个节点的梯度取平均值。

批处理的大小应该大于本地使用的gpu数量。

输入的约束与torch.nn.DataParallel中的约束相同。

此类的创建要求torch.distributed已通过调用torch.distributed.init_process_group()进行初始化。

要在具有N个GPU的主机上使用DistributedDataParallel,应生成N个进程,以确保每个进程在0到N-1的单个GPU上独自工作。这可以通过为每个进程设置CUDA_VISIBLE_DEVICES或调用以下命令来完成:

1
torch.cuda.set_device(i)

i从0到N-1。 在每个进程中,都应参考以下内容来构造此模块:

1
2
3
torch.distributed.init_process_group(backend='nccl', world_size=N, init_method='...')
model = DistributedDataParallel(model, device_ids=[i], output_device=i)

为了在每个节点上生成多个进程,可以使用torch.distributed.launch或torch.multiprocessing.spawn。

如果使用DistributedDataParallel,可以使用torch.distributed.launch启动程序,请参阅第三方后端(Third-party backends)。

当使用gpu时,nccl后端是目前最快的,并且强烈推荐使用。这适用于单节点和多节点分布式训练。

区别

DistributedDataParallel和DataParallel之间的区别是:DistributedDataParallel使用多进程,其中为每个GPU创建一个进程,而DataParallel使用多线程。

通过使用多进程,每个GPU都有其专用的进程,从而避免了Python解释器的GIL导致的性能开销。