linux系统下深度学习环境搭建和使用

  作为一个AI工程师,对Linux的一些技能的掌握也能从一定层面反应工程师的资深水平。

要求1:基于SSH的远程访问(本篇文章)

  1. 能用一台笔记本电脑,远程登陆一台linux服务器
  2. 能随时使用笔记本电脑启动训练任务
  3. 能熟练的让代码和文件在笔记本电脑与LINUX服务器之间的传输

要求2:Linux系统的文件系统(Linux指令学习

  1. 知道什么是硬盘的挂载
  2. 能合理的使用服务器的硬盘空间
  3. 不要求,但建议学会如何在LINUX系统上自建逻辑卷(LVM)

要求3:LINUX系统的账户管理

  1. 知道root账户与普通账户的区别
  2. 能够对账户权限有基本的规划
  3. 能在普通账户下,完成基于Tensorflow的AI开发

要求4:LINUX系统的驱动安装(本篇文章

  1. 能够独立的在Ubuntu Linux 上搭建NVIDIA GPU的深度学习环境

要求5:GIT和Github(Git从入门到精通

  1. 有代码的版本控制意识
  2. 能够掌握基本的Git使用方法
  3. 能够掌握基本的Github使用方法

上面的知识点我都写过博客,写完这篇文章我就能集齐龙珠,召唤神龙了。😃


SSH远程连接服务器

例子:

  • IP地址:111.44.254.168
  • 端口号:21665
  • 登录名:root
  • 密码:123456

linux \ MAC连接

  如果本地电脑是inux或者mac系统,则远程服务器SSH登陆信息是: ssh -p 21665 root@111.44.254.168 

window系统连接

  如果本地电脑是 window系统用cmd登陆(需要先安装 OpenSSL

远程服务器SSH登陆信息是: ssh -p 21665 root@111.44.254.16 

Xshell软件连接

我们需要用到的软件是:Xshell (命令行控制服务器)Xffp(传输文件)

            

进入官网:https://www.netsarang.com/zh/,滑到最下面点击 家庭/学校免费,输入姓名和邮箱,勾选两者,点击下载。随后邮箱会收到两个邮件,点击邮件中的链接就可以下载安装包。

putty,pscp、Filezila等软件也比较主流,但可能不太稳定,这里不做介绍

搭建深度学习环境

我们首先确定自己想要安装的版本,CUDA与显卡驱动对应的版本关系TensorFlow-GPU与CUDA cudnn Python版本关系

我想安装的版本是:

安装python

  python环境我们选择的是Anaconda,我选择的安装版本是 Anaconda3-5.2.0-Linux-x86_64.sh ,对应的python版本是python 3.6.5,建议到清华镜像源下载,更快!

打开Xftp,连接服务器,在服务器创建一个DL_package文件夹,将 Anaconda3-5.2.0-Linux-x86_64.sh 上传到文件夹里(不放也行,我是想要统一管理,因为后面还要安装cuda和NVIDIA驱动)

安装过程不要瞎点,看清楚底部的英文再确定 yes or no。

1、找到Anaconda3-2019.07-Linux-x86_64.sh安装包,用 sh 命令执行 .sh 文件,开始安装

2、按回车观看更多许可信息,按 Q 键跳过

3、是否接受许可条款, 输入yes回车

4、最后他会提示是否安装 VS Code,我选了no,界面都没有用个毛线VS Code!

5、这时关闭当前终端,再打开一个新的终端会默认打开在conda环境下

6、输入  conda -V  可以查看安装的Anaconda版本

7、输入  conda list  可以查看已安装的科学包

8、在终端输入 python 可以看当前的python版本,并进入python编程环境

 

anaconda会自动将环境变量添加到PATH里面,如果后面你发现输出 conda ,提示没有该命令,那么需要添加环境变量

打开~/.basrc 文件c (例如:  vim ~/.bashrc ),在最后面加上

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

更新环境变量: source ~/.bashrc 

再次输入 conda list 测试看看,应该就是没有问题啦!

如果你想删除Anaconda,切换到你安装anaconda的目录,直接 rm -rf anaconda3,然后在去/etc/profile,把配置的删除就OK了

安装NVIDA显卡驱动

禁用nouveau驱动

禁用nouveau驱动

sudo vim /etc/modprobe.d/blacklist.conf

在文本最后添加:

blacklist nouveau
options nouveau modeset=0

然后执行:

sudo update-initramfs -u

重启后,执行以下命令,如果没有屏幕输出,说明禁用nouveau成功:

lsmod | grep nouveau

下载驱动

nividia 显卡驱动下载地址:NVIDIA 驱动程序下载,根据自己的显卡型号选择驱动程序

卸载旧驱动

以下操作都需要在命令界面操作,执行以下快捷键进入命令界面,并登录:

Ctrl-Alt+F1

执行以下命令禁用X-Window服务,否则无法安装显卡驱动:

sudo service lightdm stop

执行以下三条命令卸载原有显卡驱动:

sudo apt-get remove --purge nvidia*
sudo chmod +x NVIDIA-Linux-x86_64-410.93.run
sudo ./NVIDIA-Linux-x86_64-410.93.run --uninstall

安装新驱动

下载驱动,官网下载地址,根据自己显卡的情况下载对应版本的显卡驱动,直接执行驱动文件即可安装新驱动,一直默认即可:

sudo ./NVIDIA-Linux-x86_64-410.93.run

执行以下命令启动X-Window服务

sudo service lightdm start

最后执行重启命令,重启系统即可:

reboot

注意: 如果系统重启之后出现重复登录的情况,多数情况下都是安装了错误版本的显卡驱动。需要下载对应本身机器安装的显卡版本。

安装CUDA

由于 Pytorch 和 TensorFlow 对于 CUDA 都有特定的版本需求,所以在安装 CUDA 之前,我们首先需要查询,我们想要安装的 pytorch 版本对应的 CUDA 版本。

pytorch 的配套环境要求见:https://pytorch.org/

在 https://developer.nvidia.com/cuda-toolkit-archive 中选择你要安装的CUDA版本

sudo sh cuda_11.2.2_460.32.03_linux.run

开始安装。终端会在后台运行一段时间,看起来像是卡住了,并不是没有反应,请耐心等待。

然后选择:accept

这里将光标移到[X]Driver处,按enter键,取消勾选安装驱动。

 

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-11.2/
Samples:  Installed in /home/user/

Please make sure that
 -   PATH includes /usr/local/cuda-11.2/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.2/lib64, or, add /usr/local/cuda-11.2/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.2/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 460.00 is required for CUDA 11.2 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Logfile is /var/log/cuda-installer.log
View Code

安装完成之后,可以配置他们的环境变量,在 vim ~/.bashrc 的最后加上以下配置信息:

export CUDA_HOME=/usr/local/cuda-11.2
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}

最后使用命令 source ~/.bashrc 使它生效。

可以使用命令 nvcc -V 查看安装的版本信息:

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c)
2005-2021 NVIDIA Corporation Built on Sun_Feb_14_21:12:58_PST_2021 Cuda compilation tools, release 11.2, V11.2.152 Build cuda_11.2.r11.2/compiler.29618528_0

出现上图所示界面说明已经安装完成

测试安装是否成功,执行以下几条命令:

cd /usr/local/cuda-11.2/samples/1_Utilities/deviceQuery
make -j32
./deviceQuery

卸载cuda

cd /usr/local/cuda-11.2/bin/
sudo ./cuda-uninstaller
sudo rm -rf /usr/local/cuda-11.2

安装CUDNN

进入到CUDNN的下载官网,然点击Download开始选择下载版本,当然在下载之前还有登录,选择版本界面如下

下载之后是一个压缩包:cudnn-11.2-linux-x64-v8.1.1.33.tar,然后对它进行解压,命令如下:

tar -zxvf cudnn-11.2-linux-x64-v8.1.1.33.tar

解压之后可以得到以下文件:

cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.4.2
cuda/lib64/libcudnn_static.a

使用以下两条命令复制这些文件到CUDA目录下:

cp cuda/lib64/* /usr/local/cuda-11.2/lib64/
cp cuda/include/* /usr/local/cuda-11.2/include/

拷贝完成之后,可以使用以下命令查看CUDNN的版本信息:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

查看 Nvidia 显卡利用率:显存占用和算力情况。

# 0.5 秒更新一次显卡利用情况,并查看 NVIDIA 驱动版本
watch -n 0.5 nvidia-smi 

安装TensorFlow

TensorFlow经历过一次变革,从 Tensorflow 1.* 变革到了现在的 Tensorflow 2.*,从静态变成了动态。

如果想要安装tensorflow 1.*,需要:

# 支持CPU的版本,版本可更改
pip install tensorflow==1.15
# 支持GPU的版本,版本可更改
pip install tensorflow-gpu==1.15

如果想要安装tensorflow 2.*,只需要:

pip install tensorflow
  • 若要支持 Python 3.9,需要使用 TensorFlow 2.5 或更高版本。
  • 若要支持 Python 3.8,需要使用 TensorFlow 2.2 或更高版本。

更详细情况,请移步Tensorflow官网

Tensorflow 查看GPU是否可用,返回True则代表可用

import tensorflow as tf
tf.test.is_gpu_available()

安装pytorch

pytorch的安装没啥好说的,因为 任何人的介绍或转述 都不如官网写的明白,请直接移步 pytorch官网首页

pytorch 查看GPU是否可用,返回True则代表可用,返回False则代表不可用。

import torch
torch.cuda.is_available()

搭建Jupyter Notebook远程云服务器

为什么要使用Jupyter Notebook

  • 随时可在未安装Python的电脑上使用Python(可以分享给别人)
  • 借助服务器的性能,在服务器上做分析,解放本地计算机的CPU
  • 不同电脑间,使用服务器jupyter可避免数据不一致
  • Jupyter Notebook能帮助我们有效地组织输入输出,将探索数据的过程记录下来,
  • Jupyter Notebook支持Markdown,也支持Python、R甚至Julia等语言,完全可以支持一个数据工作者的大多数分析需求。

完工后的界面如下,输入密码就可以开始使用啦:

安装过程

1、安装 Jupyter Notebook 库

我安装的是 Ananconda ,这是 Python 的科学计算包,自带了 Jupyter,因此无需此步骤。若未安装,也可单独安装

$ pip install Jupyter

2、生成 Jupyter Notebook 配置文件

$ jupyter notebook --generate-config

生成的配置文件,后来用来设置服务器的配置

3、设置Jupyter Notebook密码

设置密码用于设置服务器配置,以及登录Jupyter。打开Python终端,输入以下:

$ python
>> from notebook.auth import passwd  
>> passwd()  
   此时会让你两次输入密码,然后就会生成秘钥  
   sha1************  

4、设置服务器配置文件

$ vim ~/.jupyter/jupyter_notebook_config.py

在末尾增加以下几行配置信息(此配置信息,也可在启动Jupyter时在参数中添加,但我认为那样看起来比较乱)

c.NotebookApp.ip = '*'                    # 所有绑定服务器的IP都能访问,若想只在特定ip访问,输入ip地址即可
c.NotebookApp.port = 8888                  # 将端口设置为自己喜欢的吧,默认是8888
c.NotebookApp.open_browser = False             # 我们并不想在服务器上直接打开Jupyter Notebook,所以设置成False
c.NotebookApp.notebook_dir = '/home/user/Desktop/jupyter_projects' # 这里是设置Jupyter的根目录,若不设置将默认root的根目录,不安全
c.NotebookApp.allow_root = True              # 为了安全,Jupyter默认不允许以root权限启动jupyter 
c.NotebookApp.password = 'sha1:7a80c9a4cec6:9fcda0d4be1fb9d2181c9912c931689c49f6179a'    # 设置之前生成的sha1

不过我建议你通过Xftp把jupyter_notebook_config.py拉下来,在本地更改后再上传上去(要更改的地方取消注释) 

5、启动Jupyter 远程服务器

$ jupyter notebook

# 或者指定端口和IP地址
$ jupyter notebook --no-browser --port 6000 --ip=192.168.1.103

至此,Jupyter远程服务器以搭建完毕。在本地浏览器上,输入 ip地址:8888,将会打开远程Jupyter。接下来就可以像在本地一样使用服务器上的Jupyter啦~~

按下ctrl+C键,可以退出

Jupyter notebook 更换kernel

由于jupyter notebook访问的时候,默认使用了anaconda的base环境,这里就需要更换环境。

具体方式如下:

1、安装ipykernel:

# 新建虚拟环境
(base) [root]$ conda activate your_eniv 
# 安装nb_conda_kernels
(your_eniv) [root]$ conda install nb_conda_kernels
Collecting package metadata (current_repodata.json): done
Solving environment: done
2、激活conda环境: source activate 环境名称,将环境写入notebook的kernel中
python -m ipykernel install --user --name 环境名称 --display-name "显示的名称"

3、打开notebook服务器:jupyter notebook,浏览器打开对应地址,就会有对应的环境提示了。

快速搭建JupyterLab服务

  JupyterLab与Jupyter Notebook师出同源,可以凭个人爱好进行选择。因为我想把博客写全,所以再介绍一下JupyterLab服务搭建

jupyter lab的每一步都和jupyter一样,就是启动的时候,加了lab而已。

1、安装 Jupyter Notebook 库

pip install jupyterlab

2、生成 Jupyter Notebook 配置文件

$ jupyter lab --generate-config

生成的配置文件,后来用来设置服务器的配置

3、设置Jupyter Notebook密码

设置密码用于设置服务器配置,以及登录Jupyter。打开Python终端,输入以下:

$ python
>> from notebook.auth import passwd  
>> passwd()  
   此时会让你两次输入密码,然后就会生成秘钥  
   sha1************  

4、设置服务器配置文件

$ vim /home/ubuntu/.jupyter/jupyter_notebook_config.py

我们看到了一大串的配置选项,一入眼就有点懵了。不要慌,我们只需要修改其中的四行即可。我们使用vim的快捷键/来搜索以下几项,将他们之前的注释去掉,并按照如下配置修改。

# 将ip设置为*,意味允许任何IP访问
c.NotebookApp.ip = '*'
# 这里的密码就是上边我们生成的那一串
c.NotebookApp.password = u'sha1:1e39d24dcd6c:b265321ca0c4cb798888bcb69b0024983a8ac439'
# 服务器上并没有浏览器可以供Jupyter打开
c.NotebookApp.open_browser = False
# 监听端口设置为8888或其他自己喜欢的端口
c.NotebookApp.port = 8888
# 我们可以修改jupyter的工作目录,也可以保持原样不变,如果修改的话,要保证这一目录已存在
c.MappingKernelManager.root_dir = '/home/ubuntu/.jupyter_run/root'
# 允许远程访问
c.NotebookApp.allow_remote_access = True

好了,保存输入:wq退出vim。

不过我建议你通过Xftp把jupyter_notebook_config.py拉下来,在本地更改后再上传上去(要更改的地方取消注释) 

5、启动Jupyter 远程服务器

$ jupyter lab --allow-root

# 或者指定端口和IP地址
$ jupyter lab notebook --no-browser --port 6000 --ip=***.***.**.***

至此,Jupyter远程服务器以搭建完毕。在本地浏览器上,输入 ip地址:8888,输入密码,也就是我们自己设置并确认的密码。将会打开远程Jupyter lab。

按下ctrl+C键,可以退出

搭建虚拟环境

  在Python中,虚拟环境(virtual enviroment)就是隔离的Python解释器环境。通过创建虚拟环境,我们可以拥有一个独立的Python解释器环境。这样做的好处是可以为每一个项目创建独立的Python解释器环境,因为不同的项目常常会依赖不同版本的库或Python版本。使用虚拟环境可以保持全局Python解释器环境的干净,避免包和版本的混乱,并且可以方便地区分和记录每个项目的依赖,以便在新环境下复现依赖环境。

  我总结了多种创建虚拟环境的方法,我推荐conda方法,你们可以根据自己的爱好选择。

conda搭建虚拟环境(推荐)

1、新建虚拟环境

conda create --name <env_name> <package_names>

# 创建一个名为 python_2 的环境,环境中python版本为2.7
# conda create --name python_2 python=2.7

# 创建一个名为 conda-test 的环境,环境中python版本为3.6,同时也安装了numpy和pandas。
# conda create -n conda-test python=3.6.5 numpy pandas
  • –name 同样可以替换为-n。
  • <env_name> 创建的环境名。建议以英文命名,且不加空格,名称两边不加尖括号“<>”
  • <package_names> 即安装在环境中的包名。名称两边不加尖括号“<>”

查看创建的虚拟环境

conda env list
# 或:conda info --envs
# 或:conda info -e

2、激活虚拟环境

Linux:   source activate your_env_name(虚拟环境名称)
Windows: activate your_env_name(虚拟环境名称)

查看安装了哪些库

conda list

3、退出虚拟环境

conda deactivate

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

# 在当前环境安装包
pip install 安装的包名
conda install 要安装的包名
# 指定环境安装包
conda install --name 环境名 要安装的包名

4、删除虚拟环境

conda remove -n your_env_name --all

复制环境

conda create --name new_env_name --clone copied_env_name

virtualenv搭建虚拟环境

首先,我们用pip安装virtualenv:

$ pip3 install virtualenv

然后,假定我们要开发一个新的项目,需要一套独立的Python运行环境,可以这么做:

1、创建目录

$ mkdir myproject
$ cd myproject/

2、创建一个虚拟环境,命名为venv

$ virtualenv venv

若想要指定Python3

$ virtualenv -p python3 newEnv

查看newEnv文件夹中的内容

$ cd newEnv
$ ls
bin                include            lib                pip-selfcheck.json

3、激活虚拟环境

Linux:  source venv/bin/activate
Windowsvenv\Scripts\activate.bat

4、在虚拟环境中安装python第三方库

  在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。

$ pip install ***

5、关闭虚拟环境

Linux:  deactivate
Windowsvenv\Scripts\deactivate.bat

依据当前环境中的依赖包生成requirements.txt文档

$ pip freeze > requirements.txt

依据requirements.txt文档重建环境

$ pip install -r < requirements.txt

删除虚拟环境,只需要把虚拟环境文件夹删了即可

Pipenv搭建虚拟环境

  Pipenv是基于pip的Python包管理工具,它和pip的用法非常相似,可以看作pip的加强版,它的出现解决了旧的pip virtualenv + requirements.txt的工作方式的弊端。具体来说,它是pip、Pipfile和Virtualenv(虚拟环境)的结合体,它让包安装、包依赖管理和虚拟环境管理更加方便,使用它可以实现高效的Python项目开发工作流。如果你还不熟悉这些工具,不用担心,我会在下面逐一进行介绍。

通过pip安装Pipenv:

$ pip install pipenv

1、创建虚拟环境

  虚拟环境通常使用Virtualenv来创建,但是为了更方便地管理虚拟环境和依赖包,我们将会使用集成了Virtualenv的Pipenv。首先确保我们当前工作目录在示例程序项目的根目录,然后使用pipenv install命令为当前的项目创建虚拟环境:

$ pipenv install

  初始化好虚拟环境后,会在项目目录下生成2个文件 Pipfile 和 Pipfile.lock 。为pipenv包的配置文件,代替原来的 requirement.txt。项目提交时,可将 Pipfile 文件和 Pipfile.lock 文件一并提交,待其他开发克隆下载,根据此Pipfile 运行命令 Pipfile.lock 生成自己的虚拟环境。

 Pipfile.lock 文件是通过hash算法将包的名称和版本,及依赖关系生成哈希值,可以保证包的完整性。

2、进入虚拟环境

$ pipenv shell

3、退出虚拟环境

$ exit

4、在虚拟环境中创建python包

$ pipenv install <某个包的名称>

查看安装包及依赖关系

$ pipenv graph

5、生成 requirements.txt 文件

pipenv可以像virtualenv一样用命令生成requirements.txt 文件

$ pipenv lock -r --dev > requirements.txt

6、pipenv也可以通过requirements.txt安装python包

$ pipenv install -r requirements.txt

运行python代码

方法一:pipenv run python xxx.py

$ pipenv run python xxx.py

方法二:启动虚拟环境的shell环境

$ pipenv shell
$ python xxx.py

7、删除虚拟环境

$ pipenv --rm

常用命令一览

pipenv --where                 列出本地工程路径
pipenv --venv                  列出虚拟环境路径
pipenv --py                    列出虚拟环境的Python可执行文件
pipenv install                 创建虚拟环境
pipenv isntall [moduel]        安装包
pipenv install [moduel] --dev  安装包到开发环境
pipenv uninstall[module]       卸载包
pipenv uninstall --all         卸载所有包
pipenv graph                   查看包依赖
pipenv lock                    生成lockfile
pipenv run python [pyfile]     运行py文件
pipenv --rm                    删除虚拟环境

使用GPU

查看GPU的运行情况,同时我们也可以看到驱动和CUDA的版本号

nvidia-smi
# 查看训练进程时的GPU情况一般需要持续监视该输出
# 即每隔0.5秒执行一次nvidia-smi;
# watch -n 0.5 nvidia-smi  

使用指定GPU

  做好GPU的分配,比如我们有四张显卡,只想使用第1个和第4个GPU,有以下两种方法:

1、在终端设定:

CUDA_VISIBLE_DEVICES=0,3 python my_script.py

2、在代码中设定

import os 
os.environ['CUDA_VISIBLE_DEVICES'] = '0,3'

tensorflow使用多GPU

以后再来补全

pytorch使用多GPU

参考我的另一篇博客Pytorch入门教程

pycharm使用远程服务器

  这个也是我最近发现的,将pycharm连接了远程服务器后,我们就能像之前那样,在本地PC端使用pycharm编写代码,当跑是在服务器端。具体流程如下:

1、将添加python解释器,选择SSH解释器,输入主机名和用户名,点下一步,然后输入密码

2、添加解释器的位置,和同步文件夹

因为ubuntu自带python 2 解释器,我们上面安装过anaconda,是python3,添加为解释器即可,如果不知道解释器的位置可以在命令行输入  which python 。

3、选择服务器的解释器

至此我们就可以使用远端服务器跑代码了,为了可以看到服务器的文件夹,可以进行下面步骤:

4、菜单栏 工具-->部署-->浏览远端服务器,会出现远端服务器的根目录文件管理界面,但是我们的项目可能不在根目录下一次需要进行下面操作,点击...

5、连接处的根路径选择项目目录

 

6、映射处的的部署路径,选择当前目录 /

 

参考

【博客园文章】关于博客园内嵌入bilibili视频

【哔哩哔哩视频】【ssh远程连接服务器教程】租了GPU服务器不知道怎么深度学习?看完不会你打我

【知乎】深度学习 | Linux安装Anaconda

【CSDN】Ubuntu安装和卸载CUDA和CUDNN

【CSDN】Ubuntu16.04下安装NVIDIA驱动 + cuda 11.2 + cudnn 8.1

【CSDN】ubuntu16.04安装NIVIDIA显卡驱动,cuda8.0,cuDNN6.0以及基于Anaconda安装Tensorflow-GPU

【个人博客】搭建Jupyter Notebook远程云服务器

【知乎】Jupyter Notebook配置

【知乎】Jupyter lab 和避免服务器连接断开会关闭运行jupyter

【CSDN】Jupyter前台运行和后台运行,以及遇到的Bug如何解决 ★

【pytorch官网】DATAPARALLEL

【知乎】Anaconda-用conda创建python虚拟环境

【知乎】 Virtualenv搭建python虚拟环境

 

posted @ 2021-08-29 19:05  凌逆战  阅读(6115)  评论(0编辑  收藏  举报