给毕设配环境

我的硬件环境

  • Home-pc
  • Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3.70 GHz
  • DDR3 1600HMz Dual 16.00 GB
  • Nvidia Geforce GTX1660 Super 6G GDDR6

我的软件环境

  • Ubuntu 20.04(系统自带python3.8.5)
  • NV Driver 450
  • CUDA 10.1 — 243_426.00
  • cudnn v7.6.5(因为网速原因,暂时没装,考虑到只是替换文件,或许对环境不影响,于是就跳过这一步了,慢慢下载,来日再装)
  • Miniconda3-py38_4.9.2-Linux-x86_64
    • opencv
    • pytorch

安装过程

  • CUDA:https://developer.nvidia.com/cuda-toolkit-archive
  • cuDNN:https://developer.nvidia.com/rdp/cudnn-archive
  • Miniconda:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/

安装过程一波三折,先说显卡驱动问题,CSDN博客90%都是错误的,Ubuntu20.04安装系统过程中如果勾选了安装第三方驱动,那么会把显卡驱动直接装好(至少我在第一次折腾的时候是这样,之后的几次都会陷入循环登录Bug)

驱动

回归到安装Ubuntu的老思路,断网、不装第三方驱动,这样是最快的。此时系统调用的是核显驱动(我很好奇如果是无核显的CPU会怎么样,回想起这4年来接触Ubuntu的场景,我似乎从未在不带核显的机子上安装过Ubuntu,显卡驱动的Bug的众多解释中,其中一条便是和核显有关,建议早日转manjaro)

进入系统以后,按照流程换源,然后在 Software Update 里鼠标勾选安装 NVIDIA 显卡驱动即可,注意系统不要设置成自动登录,按照网上的说法之一,循环登录和该设置有关。我没有时间和精力去验证。至少在安装Ubuntu20.04这一步,如果是安装过程联网安装NVIDIA显卡驱动,那么自动登录和密码登录没有区别,该循环Bug还是循环Bug,该正常启动还是正常启动。(于是,我非常好奇我第一次安装Ubuntu是如何做到自动登录+联网安装显卡驱动的)

Manjaro的口碑这两年非常好,按照网友们的说法,Manjaro对显卡驱动的支持不知道比Ubuntu高到哪里去了。但是我从来没用过Arch系的Linux,目前在自己的备用机上装了Manjaro还在感受当中,等玩熟练了,或许会转Manjaro。(我在Ubuntu16.04停留了几年之久,如今用上了Ubuntu20.04,感觉已经比以前好了许多)

CUDA

很久之前安装过CUDA,依稀记得在终端界面下复古的文字说明,以及刻在DNA里的“弹出询问是否安装显卡驱动?一定要输入No”。这次安装CUDA,终端界面是及其先进的GUI,比以前清晰很多。至于为什么安装CUDA不要再安装显卡驱动,说法很多,我没有亲自验证过。

因为网速原因,没有选择CUDA11.1_450,然而选择了CUDA10.1,下载还挺快的。但是cuDnn因为网速原因,一直没下载成功,只好暂时跳过了。

这一部分请参考:

  • https://cyfeng.science/2020/05/02/ubuntu-install-nvidia-driver-cuda-cudnn-suits/
  • https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

里面有提到gcc版本兼容问题,其实Ubuntu系统自带gcc版本高于CUDA已经是老生长谈,甚至误传已久的问题了。考虑到Linux和CUDA都在不停更新,建议只看官方文档。

Conda

我是先练手安装的Win10,后安装的Ubuntu20.04。在原来的Win10 上,Anaconda遇到了一些难以描述的问题(和openssl有关,总之不要太推崇Anaconda这个东西,包管理太乱),于是我直接卸载干净,选择了miniConda,世界清净了。

在Ubuntu20.04上我也选择了miniConda,等于就是一个只含有python的环境,啥额外的软件包都没有,很干净,体积很小。现在回头仔细想,我已经使用Vscode开发项目很久了,python也用的是VScode,唯一留在Anconda的理由就是有个jupyter、jupyter NoteBook。其实miniConda可以安装一切,又到再装也一样。(在这里吐槽一下Ancodna的卸载速度,可能是因为软件包全是小文件,卸载极慢)

安装路径

我要吐槽一下miniconda的默认安装路径是/root/miniconda/,这样其实不是不行,但是用vscode的时候,因为不是root权限,没办法选择到root目录下的python解释器,于是我硬着头皮用root权限来运行vscode这么一个代码编辑器,发现不行,至少需要折腾一下,这种方法是在是太不优雅了。于是我卸掉了/root/miniconda/,重新装了一次,按照惯用路径,选择/opt/miniconda/(安装过程中会询问你选择路径)。

镜像源

我自以为从清华源下载的miniconda默认的源就是https://mirrors.tuna.tsinghua.edu.cn/,这么想没什么不对,但是唯一的源在装软件的时候就遇到问题,是源的问题。查看conda源,使用命令:

1
conda info

编辑conda源,使用命令:
1
vim ~/.condarc

里面大概长这样:
1
2
3
4
5
6
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

顺带一提,我放弃/root/miniconda/的另一个原因就是因为~/.condarc,这应该是个用户级的文件,但是如果把conda装在/root/miniconda/,就得编辑对应的root级文件才算写入环境,然后从此终端打开干点儿啥,都得是root。vscode无法选择到/root/miniconda/bin/python大概率是因为这个原因。我的理解并不完善,大概率错误。有时间专门学习Linux系统知识再把这一块儿补上。

目前有中科大源https://mirrors.ustc.edu.cn/和清华源https://mirrors.tuna.tsinghua.edu.cn/可以用,末尾需要加上:

  • /anaconda/pkgs/main/
  • /anaconda/pkgs/free/
  • /anaconda/cloud/

这个可以网页打开镜像源的文件目录,自己看着添加进去,尽量不要抄别人的博客,可能会错。我参考的是:https://blog.csdn.net/wujialaoer/article/details/84977796

Pytoch

值得一提的是,你可以从网页端把对应的包下载下来,然后离线安装。比如我在安装pytorch的时候,死活下载不下来,要么慢,那么卡住。于是我用浏览器打开网页找到对应的包pytorch-1.7.1-py3.8_cuda10.1.243_cudnn7.6.3_0.tar.bz2下载,发现清华源的下载逻辑和百度云很像,会限制你的流量和网速,我以40MB/s的网速下载几秒就会断,必须等一两分钟,才允许你继续下载。盲猜是为了减小服务器负担。

离线安装可以输入:

1
conda install --offline pytorch-1.7.1-py3.8_cuda10.1.243_cudnn7.6.3_0.tar.bz2

但是这样装完以后,需要再输入一次在线安装,离线安装的包要进行一次验证。在线安装输入:
1
conda install pytorch torchvision torchaudio cudatoolkit = 10.1 -c pytorch

这句话原话是:

注意: Python 3.9用户将需要添加’-c = conda-forge
进行安装 conda install pytorch torchvision torchaudio cudatoolkit = 10.1 -c pytorch

类似的安装指南,请官网找 https://pytorch.org/,不要抄博客。不是说别人的博客写的不对,而是配环境这种事情,你看别人的博客就是刻舟求剑,即使这篇博客在几个月、几年前无比正确。但是现在它就不对了,可能只需要微调某个指令,但你照搬就是会出错。

使用国内源,就把-c pytorch去掉,一开始我并不知道-c pytorch依然会使用国外官方源,但是敲完这行指令,会显示出每个要安装的软件包来自的源,所有的包都是清华源,但是pytorch这几个源和上面一堆长得不一样,就足以引起思考了。盲猜在安装过程中,显示安装包所来自的源可以通过~/.condarcshow_channel_urls: true来控制显示or不显示,我没有验证过,也没有看过文档,仅仅是经验推测。

在安装过程中,遇到的其他犄角旮旯的问题,大多数都可以从这里找到:https://tools-platform-guide.readthedocs.io/zh_CN/latest/

Opencv

其实,到了上一步已经可以用了,CUDA + CuDnn + Pytorch 三件套已经OK。但是项目需要用到opencv,于是就必须继续往下装。这一步遇到了很多蛋疼的问题:源有问题、conda有问题、opencv有问题、python有问题。最后总结:我有问题。

其实有了conda,安装任何东西都是conda insatll xxx,无脑一行指令的事情。但是当一切方法都不管用,我提供一个不是办法的办法:打开 Links for opencv-python:https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/ 找到对应的版本下载,比如opencv_python-4.2.0.34-cp38-cp38-manylinux1_x86_64.whl

注意:opencv是有版本的,比如opencv3.x、opencv4.x,python也是有版本的,在这里,请选择和你conda内的python一样的版本,也就是python3.8,另外注意是linux_x86_64,这三个版本都对了才能装。话说回来:

  • CUDA和cuDNN之间也是有版本对应关系的,写全了就是 cudnn v7.6.5 for CUDA10.1
  • 显卡驱动和CUDA之间也有对应关系,比如CUDA 10.1_243_426.00,要求显卡驱动版本不低于243

最后,怎么装这个opencv_python-4.2.0.34-cp38-cp38-manylinux1_x86_64.whl?用pip install,而且注意了,是给conda的python装,不是给系统自带的python装。

Docker

配环境最优雅的方式: https://www.jianshu.com/p/da1c7dc4217a

ST-GCN 搭建

参考:

  • https://zhuanlan.zhihu.com/p/143969876
  • https://www.pythonf.cn/read/104012

ST-GCN 理解

  • https://blog.csdn.net/qq_41727666/article/details/84640549
  • https://www.zhihu.com/question/54504471/answer/611222866
  • https://zhoef.com/2019/08/24/14_ST-Gcn/