这东西有点麻烦,RTX3090还是很矫情的。
1. 安装ubuntu 20.04随便网上搜个教程就行,u盘制作启动盘,然后重启狂按del(看自己设备是哪个键),通过u盘启动。
如果重装之后进不了BIOS,那么按照下面这篇博客的来:
解决安装 Ubuntu 后无法进入BIOS、UEFI 和Grub 引导
装好之后先给apt换个源
## 备份source cp /etc/apt/sources.list /etc/apt/sources.list.back ## 编辑换源,vim当然也行,如果有的话 vi /etc/apt/sources.list
把sources.list中的内容替换为:
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
然后:
sudo apt updatenet-tools、vim
下载一些必备的包:
sudo apt install net-tools sudo apt-get install vimssh
如果此台机器是服务器,后续有远程用自己pc机连服务器的需求,那么可以有这一步,否则也可以跳过这一步。
安装openssh
sudo apt-get install openssh-server
开启ssh:
service sshd start
之后的话可以通过其他pc机ssh远程连接该台机器进行后续的操作。具体而言,先使用ifconfig查看本机的ip地址:
然后在其他机器上用ssh usrname@10.XX.XX.XX 输入登录密码进去。
因为每次用ssh登陆的时候都要输一次密码还是比较麻烦,可以直接自己的pc机上生成密钥对,然后把公钥cp到服务器上:
ssh-keygen
之后可以输入你自己的秘钥,当然还是建议直接enter跳过,不然的话到时候连ssh其实还是要输密码…
ssh-copy-id XXX@10.XX.XX.XX
这样之后再用ssh连接远程主机的时候,这台机器就不用输密码。
cmake最后服务器上还得有个cmake:
可以用make -v检查一下有没有make,没有的话下面两种方法选一个安装:
- 直接apt-get:
sudo apt-get install make
- 离线安装:
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz tar zxvf ncurses-5.6.tar.gz cd ncurses-5.6 ./configure -prefix=/usr/local -with-shared -without-debug make make install
之后可以给实验室所有同学设置usr group和sudo权限,这里略过。
3. 安装显卡驱动这一步有点麻烦,自己也探索了好久,中间也难免重装了好几次系统(头疼.jpg)
先用如下命令查看设备属性:
ubuntu-drivers devices
如下为例,会有推荐的driver版本:
之后建议离线安装包安装,可以去nvidia官网下载对应的显卡驱动,如果网速太慢,可以去下面这个镜像站:
https://download.nvidia.com/XFree86/Linux-x86_64/470.86/
下载之后上传服务器(当然也可以在服务器上wget),然后运行安装:
bash NVIDIA-Linux-x86_64-470.86.run
注意,如果你是自己用的pc机,需要图形界面的话,这个地方必须加上参数--no-opengl-files,否则到时候机器一旦重启,你就无法进入图形界面;当然,如果是实验室大家用的服务器(都是用ssh登录,用不到图形界面),那这个地方不加上也可以(笔者是如此)。
该参数的具体解释详见:Ubuntu 安装 cuda 时卡在登录界面(login loop)的解决方案之一
进入到安装界面(中间一些选择,默认就行):
之后用nvidia-smi试试看有没有装好:
正常来说离线安装应该是没问题。
当然…可能会遇到很多奇奇怪怪的毛病,下面举几个自己遇到的:
bug 1. 没有禁用nouveau若是老老实实按照笔者上述流程来安装,这个bug必出现,莫慌!
其实网上几乎所有博客都是建议安装驱动前,先用各种方法把nouveau集成显卡驱动禁用。笔者这里之所以没有事先禁用是因为踩了坑(不知道为何,按照网上各种贴子禁用方法,修改/etc/modprobe.d/blacklist-nvidia-nouveau.conf之后重启,机器的网卡驱动就也会被莫名禁用,试了各种方法,没有解决)。
后来灵机一动,安装nvidia-driver的时候,若是没有事先禁用nouveau,那么安装程序会让你选择是否在etc目录下写一个文件来禁用nouveau。毫无疑问,这自己手动去改配置文件,肯定没有人家程序自动改来得靠谱啊。
所以,按照笔者上面的流程安装,必然会遇到安装过程中提示类似于"nouveau已经存在"的字样,这个时候选择自动写入etc禁用nouveau即可(这一步忘记截图了,意会即可)。
然后自己可以手动用sudo update-initramfs -u更新一下,再重启一下
重启之后,terminal输入lsmod | grep nouveau确保没有任何输出显示,说明nouveau禁用成功。
再重新运行显卡驱动安装就可以。理论上来说,这次就不会再有错误。
如果出现下面的报错:
打开nvidia-installer.log之后看到如下:
说明驱动版本和自己机器不兼容。
因此,建议选择ubuntu-drivers devices中推荐的版本。
或者,可以尝试如下ppa安装方法(没试过但是感觉蛮高赞的):
stackexchange
推荐去清华镜像,找到anaconda3-5.2.0
下载之后bash运行这个sh文件,然后进入anaconda安装界面:
press ‘yes’之后,这个地方注意一下,让你选择安装路径,如果是自己用的pc机,那么默认的路径没问题,如果是团队用的服务器,注意尽量不要装在root根目录,一般实验室每个人都有自己代码数据的存储路径,最好更改conda下载路径到自己的路径:
这个过程中会提示是否写入环境变量,建议no,后面会手动添加。
建议手动配置环境变量,这里有两种选择:
- 导入conda.sh到usr bashrc(只对当前用户生效,推荐):
echo ". XXX/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc ## XXX为之前那步你选择安装的anconda的位置 echo "conda activate" >> ~/.bashrc source ~/.bashrc ## 刷新bashrc
- 建立一个全局的软连接(对所有用户生效,不是很推荐):
sudo ln -s XXX/anaconda3/etc/profile.d/conda.sh /etc/profile.d/conda.sh ## 建立软连接,该操作针对所有用户 echo "conda activate" >> ~/.bashrc source ~/.bashrc ## 刷新bashrc
之后打开新的terminal,不出意外,应该会自动进入conda的base环境:
注意!老版本的conda在配置环境变量时(包括之前一步,如果选择让anaconda自动配置环境变量的话),大多用以下这种:
echo "export PATH=XXX/anaconda3/bin:$PATH" >> ~/.bashrc ## XXX为之前那步你选择安装的anconda的位置
但是比较新的conda应该是要按照笔者上述这种方法来配置,而且官方推荐.bashrc文件里面不能有上面这行(但是笔者自己试的时候,加上也可以照样也还是能激活base,只不过会报个错,可能强迫症会有点难受)。
5. 安装cuda、cudnn首先去官网查看自己做安装的driver版本和cuda、cudnn之间的对应,可以参考我另一篇blog:
查看cudnn和cuda,cuda和driver之间的对应关系
然后去下载cuda(选run file):
官网cuda下载地址
安装运行之前最好检查一下有没有gcc:
gcc --version
首先需要给可执行行权限:
sudo chmod a+x cuda_11.4.3_470.82.01_linux.run
然后安装:
sudo sh cuda_11.4.3_470.82.01_linux.run
输入accept
选择install
最后屏幕会出一个summary
配置环境变量:
vim ~/.bashrc
末尾加上(改为自己的cuda安装路径):
export PATH="/usr/local/cuda-11.4/bin${PATH:+:${PATH}}"
export LD_LIBRARY_PATH="/usr/local/cuda-11.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
更新bashrc:
source ~/.bashrc
之后用nvcc -v试试看有没有成功,有如下输出则表示cuda安装成功:
之后下载cudnn(需要用邮箱注册一个账号):
官网cudnn下载地址
需要下载下面四个(一个tar包,三个deb):
对于下载的cudnn的tar包,解压tar -zxvf cudnn-11.4-linux-x64-v8.2.4.15.tgz -C ./之后,当前目录下会多一个名为cuda的folder,之后cp cudnn.h 和 lib64 这两个库(根据自己cuda的路径调整),并更改这两个库的权限:
sudo cp cuda/include/cudnn.h /usr/local/cuda-11.4/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.4/lib64 sudo chmod a+r /usr/local/cuda-11.4/include/cudnn.h /usr/local/cuda-11.4/lib64/libcudnn*
然后安装那三个libcudnn的Deb包:
sudo dpkg -i libcudnn8_8.2.4.15-1+cuda11.4_amd64.deb sudo dpkg -i libcudnn8-dev_8.2.4.15-1+cuda11.4_amd64.deb sudo dpkg -i libcudnn8-samples_8.2.4.15-1+cuda11.4_amd64.deb重启验证
上面的cuda和cudnn安装之后可以reboot重启一下,输入以下命令检验是否安装成功:
cd /usr/local/cuda-11.4/samples/1_Utilities/deviceQuery sudo make ./deviceQuery
若是安装成功,运行之后terminal里面最后会有一个Result = PASS:
先去官网确定自己的torch和torchvision之间的对应版本关系:
然后去下载离线包,找到对应版本的torch和torchvision:
离线包下载地址
之后pip安装即可:
pip install torch-1.8.0+cu111-cp38-cp38-linux_x86_64.whl pip install torchvision-0.9.0+cu111-cp38-cp38-linux_x86_64.whl
此处需要提醒一点,若是安装的cuda版本高于torch支持(比方说笔者这里,cuda版本是11.4,但是安装的torch1.8.0只支持最高11.1).一般来说安装之后问题不是很大,只要差的版本不是很大就行。但最好还是一致。 详见:本机cuda版本可以高于安装pytorch时的cuda版本吗?
之后可以安装一些其他依赖,pandas,json,etc.有关于TensorFlow GPU版本,还有类似于Keras,这里不做介绍。
7. 验证最后验证一下是否安装成功,terminal里进入python环境,然后执行以下代码:
>>> import torch
>>>>> torch.cuda.is_available()
True
>>> t=torch.nn.Linear(3,3)
>>> t.to("cuda:0")
Linear(in_features=3, out_features=3, bias=True)
>>> input=torch.randn((3,3)).requires_grad_().to("cuda:0")
>>> output=t(input)
>>> loss=torch.sum(output)
>>> torch.autograd.grad(loss,input,retain_graph=True)
(tensor([[ 0.2808, -0.3811, 0.4370],
[ 0.2808, -0.3811, 0.4370],
[ 0.2808, -0.3811, 0.4370]], device='cuda:0'),)
>>> loss.backward()
没有报错则算成功,说明可以使用gpu进行推理反传
8. 其他最后再吐槽一下网上很多博客,有些误人子弟,当然也有一些其实是可以成功的,但是毕竟每个人机器都不是很一样,这里面变量很多,你也不知道别人的方法在你那里行不行得通。总之,装环境这种切忌盲目跟,要是装的时候感觉这篇博客不太对头了,好像它的屏幕输出和我不太一样,那么赶紧换一篇(包括这篇)。
最后,胆大心细吧,退一百步讲,大不了装错了重装系统呗(笔者写这篇重装了5、6次);还要有耐心,装环境还是可以增强自己的能力的。



