本文旨在配置实验室工作站的实验环境,并通过jupyter notebook为组内同学提供服务。
这是我根据自己的理解画的草图,从下到上大概是这个架构,整个红框表示一个虚拟环境,仅供参考。
各版本如下
使用标准Ubuntu仓库进行自动化安装
首先,检测你的NVIDIA显卡型号和推荐的驱动命令:
ubuntu-drivers devices
== /sys/devices/pci0000:a5/0000:a5:00.0/0000:a6:00.0==
modalias : pci: v000010DEd00001E07sv00001028sd00003718bc03sc00i00
vendor : NVIDIA Corporation
driver : nvidia-driver-460-server - distro non-free
driver : nvidia-driver-460 - distro non-free
…
driver : mvidia-driver-470 - distro non-free recommended
从输出结果可以看到,目前系统已连接NVIDIA显卡,建议安装驱动程序是nvidia-470版本的驱动.如果同意该建议,使用Ubuntu驱动程序命令来安装所有推荐的驱动程序.
输入以下命令:
sudo ubuntu-drivers autoinstall
之后执行nvidia-smi
可以看到显卡驱动以及一些基本情况,列出表格如图
但是版本太新可能不兼容,如果后面发现真的不兼容,可以回来卸载后重新安装低版本
sudo apt-get autoremove --purge nvidia-*
sudo apt-get install nvidia-driver-450
nvidia-smi
显示GPU版本表示安装450成功
因为实际上CUDA TOOLKIT里面是有Nvidia Driver的
显卡驱动也就是CUDA DRIVER,上一步已经安装了driver,还需要安装toolkit中剩下的其他内容,最主要的是nvcc。
安装 CUDA TOOLKIT 10.2 (这个是工作站所有用户可以共享的,所以安装到/usr/local
)
提示已经有一个driver了,建议我们先去卸载driver,这里检测到的driver正是之前我们装的系统推荐的那个,本文中是Nvidia470,忽略这个警告,直接continue
中间有一个协议需要accept
之后在选择安装内容的时候,取消这个driver的安装,防止出现冲突。
vim ~/.bashrc
文件末尾添加:
#add manually for cuda-10.2 toolkit
export PATH="/usr/local/cuda-10.2/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH"
值得注意的是,nvcc显示cuda compilation tools 的版本也就是这里安装的CUDA 10.2和上面表格中显示CUDA version11.4(470.86)可以不一样,版本不同是因为我们先安装了cuda driver,没有用cuda toolkit里面的driver。虽然版本不一样,但是驱动是向下兼容的,由驱动版本决定可安装的CUDAToolkit的最高版本。前者是运行时API,后者是驱动API。
这个是驱动大致的对照图,左边对应nvcc现实的cuda toolkit版本,右边对应driver版本。本文的driver版本是470,远高于cuda toolkit 10左右的版本需求,所以是可以正常使用的。
上传到目录中,同样将文件移动到/usr/local文件夹下。在之前安装的/usr/local/cuda-10.2旁边解压
sudo tar -zxvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
进入cuda-10.2的include
文件夹还有lib64
文件夹中都已经有了cudnn相关文件。
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh
bash Anaconda3-5.2.0-Linux-x86_64.sh
此处注意,bash后面是你下载的文件名
后面的步骤很简单,一路yes就可以(此时有一个直接添加环境变量的选项选yes),如果不需要vscode最后一个输no就行。
source ~/.bashrc
再调用anaconda可以正常调用则安装成功
网上资料很多,但是有时候照做还是有问题,考虑几个修改方法:
ssl_verify: false
conda upgrade -n base -c defaults --override-channels conda
conda create -n environment_name python=X.X
我创建的是:
conda create -n torch38 python=3.8
进入指定的conda虚拟环境:
# 安装pytorch
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
# 测试 pytorch 显卡是否能用
python -c "import torch; print(torch.cuda.is_available())" # 结果应为 True
报错,提示需要设置CUDA_VISIBLE_DEVICES
安装nvidia-modprobe解决问题
sudo apt-get install nvidia-modprobe
在base环境下安装jupyter和nb_conda_kernels
可以再jupyter上切换不同的环境
安装
conda install jupyter
生成配置文件
jupyter notebook --generate-config
生成文件的路径系统会给出,vim打开配置文件,在大概75行开始是 NotebookApp(JupyterApp) configuration
在这个部分中修改:
c.NotebookApp.ip = '10.69.254.16' # 297行设置服务器IP,默认是localhost
c.NotebookApp.password = 'xxxxxxx' # 412行输入刚刚生成的密钥,这里我用了我的root密码生成的hash密码
c.NotebookApp.port = 8501 # 425行设置端口,随便设,默认是8888
c.NotebookApp.notebook_dir = '/home' # 393行设置Jupyternotebook 打开的根目录
c.NotebookApp.iopub_msg_rate_limit = 1000000 #默认是1000,改这个是为了防止以后向notebook输出结果速度过快报错。
注1:生成hash密码的方法在password设置的那行代码上面有写,通过在python中执行
from notebook.auth import passwd; passwd()
设置
注2:找不到设置在哪一行的,在vim中的命令模式下:/notebook_dir
可以找到这个词出现的位置。
设置完之后wq退出
直接 jupyter notebook
此时在任何一台和工作站连了局域网的机器上(因为我设置的10开头的ip是个局域网址)都可以直接打开浏览器,输入ip:port直接登录jupyter notebook。
这样就可以脱离xshell和工作站进行编码和实验啦。如果有数据上传,同样用xftp上传即可。
可以参考这个:ubuntu18.04切换不同版本CUDA
conda activate base #或者source activate base
jupyter notebook # 或者jupyter-lab,启动lab时把路径里的tree换成lab即可。
在自己这个用户文件夹下,从新建conda环境开始重新做一遍,根据不同的需求安装不同的依赖,最后在base启动的jupyter中选择不同环境的kernel即可。