一、安装nvidia驱动:
参考:
基本步骤参考:https://www.jianshu.com/p/c600a89da5da
少数对比学习参考:https://blog.csdn.net/wf19930209/article/details/81877822
1、为了下载正确版本的驱动,使用:
lshw -numeric -C display
查看GPU具体的品牌型号,执行上述命令后,系统显示lshw是未知命令,安装lshw命令。
我所用的服务器,不可以连接外网,无法正常使用yum,但是各个命令的前置依赖包太多,故准备从系统的iso文件进行安装所有可以安装的包(能从iso安装,就从iso安装)。
2、将everything的iso系统包CentOS-7-x86_64-Everything-1511.iso,mount成一个虚拟文件夹,然后从这个系统iso进行安装所有可以安装的软件:
可以参考:https://blog.csdn.net/weixin_38281964/article/details/87917220
(1)将iso文件mount成虚拟文件夹,如果/root/software不存在,需要新建/root/software,CentOS-7-x86_64-Everything-1511.iso文件在/root目录下:
mount /root/CentOS-7-x86_64-Everything-1511.iso /root/software
(2)将yum的镜像改成 /root/software。进入/etc/yum.repos.d,因为原来有bak文件夹,这里新建bak.bak,然后执行下面两个命令:
mv CentOS-Local.repo bak.bak
mv local.repo local.repo.bak
(3)新建mysel.repo,内容为:
[base]
name=RedHat
baseurl=file:///root/software
enabled=1
gpgcheck=0
gpgkey=file:///root/software/RPM-GPG-KEY-CentOS-7
/root/software 就是 CentOS-7-x86_64-Everything-1511.iso 虚拟出的文件夹,RPM-GPG-KEY-CentOS-7 要自己到 /root/software 目录下看,对应的类似文件名是什么,这里就写什么。
(4)执行命令:
yum clean all
(5)再用yum安装所需命令,这里安装:
yum install rpm* rpm-build rpmdev*
yum install lshw
3、查看显卡版本信息:
lshw -numeric -C display
4、下载Nvidia驱动:
下载链接:https://www.nvidia.cn/Download/index.aspx?lang=cn
上面链接下载前,需要选择驱动对应的硬件的类型、产品系列等信息,我得到的信息是“显卡是1080T,GTX系列”,这样的信息并不详尽,故只是大致选成如下对应版本:
然后点击搜索,跳到下一页点击 下载,下载,即可下载下来文件:NVIDIA-Linux-x86_64-440.44.run
然后将文件 NVIDIA-Linux-x86_64-440.44.run 上传到服务器上。
5、CentOS安装 Nvidia 驱动:
(1)基本参考:https://www.jianshu.com/p/c600a89da5da
(2)安装过程中,遇到的问题:
① 按照上面的链接教程,一直执行到重启后(reboot,因为我使用的是服务器,没有图形用户界面,故也无需关闭),开始执行./NVIDIA-Linux-x86_64-440.44.run 出现,权限不够,参考https://blog.csdn.net/wf19930209/article/details/95237824,修改权限:
chmod +x NVIDIA-Linux-x86_64-440.44.run
② 再次执行 ./NVIDIA-Linux-x86_64-440.44.run,出现没有安装gcc,先再次mount everything iso系统文件,
mount /root/CentOS-7-x86_64-Everything-1511.iso /root/software
然后再执行:yum install gcc g++ make
③ 再次执行 ./NVIDIA-Linux-x86_64-440.44.run,出现没有安装 kernel-devel kernel-source;这里只需要执行如下命令即可:
yum install kernel-devel
④ 执行
./NVIDIA-Linux-x86_64-440.44.run
可以一路选Yes,我这里只选择了不兼容32bit的,其他都选Yes,完成安装;
执行nvidia-smi,出现信息,完成安装 Nvidia 驱动。
(3)总结安装步骤如下:
① 首先禁用nouveau开源驱动:
vim /etc/modprobe.d/blacklist.conf 添加:blacklist nouveau,保存退出 vim /usr/lib/modprobe.d/dist-blacklist.conf 添加下面两行,保存退出: blacklist nouveau options nouveau modeset=0
② 重建文件系统:
备份原来的 initramfs nouveau image 镜像
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
创建新的 initramfs image 镜像:
dracut /boot/initramfs-$(uname -r).img $(uname -r)
③ 重启机器:
reboot
④ 虚拟出everything iso文件夹,安装需要的前置包:
mount /root/CentOS-7-x86_64-Everything-1511.iso /root/software 安装gcc:yum install gcc g++ make 安装 kernel-devel、kernel-source:yum install kernel-devel
⑤ 修改 ./NVIDIA-Linux-x86_64-440.44.run 权限:
chmod +x NVIDIA-Linux-x86_64-440.44.run
⑥ 执行Nvidia驱动安装:
./NVIDIA-Linux-x86_64-440.44.run
可以一路选Yes,我这里只选择了不兼容32bit的,其他都选Yes,完成安装;
⑦ 执行nvidia-smi,出现信息,完成安装 Nvidia 驱动。
二、安装 Anaconda:
由于服务器无法连接外网,安装anaconda后也无法使用conda进行其他安装配置,故放弃。
三、源码安装 Python3:
参考:https://www.cnblogs.com/linga/p/9442126.html
1、安装依赖包,仍然是从虚拟出的iso文件夹中用yum安装:
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
2、下载python3源码:
注意选择linux版本,这里选择Python-3.7.6.tar,地址:https://www.python.org/downloads/source/
3、编译、安装:
① 解压、进入解压后的目录:
tar -xvf Python-3.7.6.tgz
cd Python-3.7.6
② 配置编译路径:
./configure --prefix=/opt/python/python-3.7.6
执行完上一步后会提示执行以下的代码对Python解释器进行优化,执行该代码后,会编译安装到 /usr/local/bin/ 下,且不用添加软连接或环境变量
./configure --enable-optimizations
③ 编译和安装:
make && make install
④ 上述步骤执行完,即可以使用 python3 了,下述软连接可以添加,也可以不添加(因为执行了② 中的第二个命令):
ln -s /usr/local/bin/python3 /usr/bin/python3
ln -s /usr/local/bin/pip3 /usr/bin/pip3
四、安装numpy
参考:https://blog.csdn.net/weixin_34146986/article/details/92680843
1、下载源码,保险起见,下载1.17.4:
https://pypi.org/project/numpy/1.17.4/#files
2、解压,进入解压后的目录:
unzip numpy-1.17.4.zip
cd numpy-1.17.4
总是出现编译错误、估计是系统编译环境配置有问题!
3、直接下载numpy的whl文件安装,简单高效!
五、安装 cudatoolkit、cuDNN
参考链接:https://blog.csdn.net/fanhenghui/article/details/80090864
主要参考上述链接中的5、6两点,但是步骤有很大不同,首先,我先安装了nvidia驱动,后安装cudatoolkit的,但是并没有像链接中说的那样,如果先安装驱动,再安装cuda的话,驱动会实效。然后就是安装的步骤不同,我是通过runfile进行安装的。
1、下载centos对应的cudatoolkit:
下载,如图中所述:wget ...
安装,如图中所述:sudo sh cuda...
安装过程中会提示做一些选择,接受协议等等,阅读后选择install,自动安装完毕。
最后会提示配置PATH和LD_LIBRARY_PATH,在~/.bashrc文件最后加入两行:
export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.2/lib64
至此安装结束。
2、测试cuda安装是否成功:
cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery
make
报错:g++: No such file or directory
一开始以为是g++有问题,将Makefile中的g++,改成gcc,后make,报错:
gcc: error trying to exec 'cc1plus': execvp: 没有那个文件或目录
参考链接进行修改:https://blog.csdn.net/junweicn/article/details/80942928
yum install -y gcc-c++
搞定!
./deviceQuery
输出GPU信息。
3、下载cuDNN:
下载cuDNN需要先注册,然后下才能下载,下载地址:https://developer.nvidia.com/rdp/cudnn-download
我的服务器是Centos,下载的cuDNN文件是:cudnn-10.2-linux-x64-v7.6.5.32.tgz
4、安装cuDNN:
参考:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/#verify
按照上面的命令,执行完就结束了。上面的参考链接中2.4节是确认cuDNN是否安装成功的,但是搜索了一下好像是通过deb文件安装才会自动安装samples,用于测试,想我这里用tgz文件的,没有自带测试用例,所以也没测试,后面使用好像也没啥问题,等后面有问题再看吧!(https://askubuntu.com/questions/1021837/cuda-and-cudnn-install-where-is-cudnn-samples-v7)
六、安装Pytorch、Torchvision
安装方法参考连接:https://pytorch.org/get-started/previous-versions/
下载连接:https://download.pytorch.org/whl/torch_stable.html
1、下载whl文件:
本来想秀一下,用源码安装的,但是这次配服务器耗时太久,又担心需要太多的前置依赖包,故直接下载whl文件了事。
下载的包分别为:
torch-1.2.0-cp37-cp37m-manylinux1_x86_64.whl
torchvision-0.4.0-cp37-cp37m-manylinux1_x86_64.whl
2、安装命令:
pip3 install torch-1.2.0-cp37-cp37m-manylinux1_x86_64.whl
pip3 install torchvision-0.4.0-cp37-cp37m-manylinux1_x86_64.whl
安装 torch (torch的前置依赖包已经都安装了)很简单,一次成功,但是安装 torchvision 需要几个前置依赖包:torch、numpy、six、pillow>=4.1.1。
下载six的whl文件,下载链接:https://pypi.org/simple/six/
下载pillow的whl文件,下载链接:https://pypi.org/project/Pillow/6.2.2/#files
这里注意pillow不能下7.0之后(包括7.0)的版本,否在在 import torchvision的时候会出现错误:
ImportError: cannot import name ‘PILLOW_VERSION’
Debug参考:https://blog.csdn.net/ternence_hsu/article/details/103821264
3、测试pytorch、torchvision:
from __future__ import print_function
import torch
x = torch.rand(5, 3)
print(x)
import torch
torch.cuda.is_available()
import torchvision
import PIL