今天终于有幸让大师兄给我安排了实验室的显卡,之前我学习深度学习的一段时间都是在Google Colab中跑的,并且之前一直都用的是Tensorflow+Keras框架,目前我刚学习完Pytorch,也寻思着再运行一下做过的图像分类和文本分类任务。本来用的是实验室分配的主机(笔记本带着太麻烦了,而且我笔记本用四年了,1050ti也不太行了),刚给新分配的主机装完CUDA+Pytorch(Windows 10配置安装PyTorch框架:https://www.yuque.com/zbdbc/fd87kk/ring8l),但是由于主机显卡比较老(GTX 750),数据跑的太慢了,我也不想像以前那样把代码全都上传到Google硬盘用Goole分配的服务器跑(早晚都要用到实验室的显卡),既然实验室有高级的显卡,不早早地拿来白嫖就可惜了,哈哈哈!!!本篇文章分成三部分:MobaXterm 简单介绍与使用、Docker容器中安装Anaconda、CUDA与Pyorch、配置Pycharm以及Jupyter连接远程服务器。

1.MobaXterm 简单介绍与使用

首先大师兄给我分配好的容器格式是这样的:ssh @xxx.vmip.com.cn -p (<> 中的内容根据实际书写 ),然后还有密码密码。起初拿到手我一脸懵,这以前我见到的Linux服务器都是给出的IP地址+密码,我刚开始不晓得该用哪个工具了(其实感觉当时我脑子进水了。。。。),我就在自己电脑打开cmd命令,尝试连了下,没想到还真给我连接上了。。。然后我突然就想到,以前连接Liunx服务器不都是用Xshell吗,然后我就很简单了,IP就是tt1.vmip.com.cn,选择SSH模式,端口号就是给我分配的端口,然后也连接上了。后来在查询如何配置Pycharm以及Jupyter连接远程服务器的过程中偶然接触到一个牛批的神器:MobaXterm!!!
为何说它牛批呐?去读这篇文章就知道了(含有下载地址): https://mp.weixin.qq.com/s/p96kWPkPuJYeWxG3AqvnDQ, 我总结下来就是Xshell能做到的,MobaXterm都能做到,做的还比Xshell更好,而且它的界面确实很舒适,最下方工具栏能够监视GPU和CPU的资源利用情况。同时可以直接将本地文件上传到服务器,或用本机编辑器直接编辑远程服务器端文件,不用再下载跟Xshell配套的Xftp。界面如下:


2.Docker容器安装Anaconda及Jupyter notebook远程连接服务器

俗话说,凡事踏出第一步很难,我准备看一下实验室的显卡是啥规格的,就想用nvidia-smi命令查看一下,结果发现没有这个命令,于是就依靠万能的百度,说需要装一下驱动。
我又确认一下我的容器环境是Ubuntu 20.04.3;对应实验室的显卡是:NVIDIA TiTan XP 显卡(12G),不过我看到一些文章说容器中是不需要额外安装驱动的,到这里我又是很懵。最后我自己理解是我这只是服务器中的一个容器,相当于服务器中的很小的一块地方,小家伙肯定没法查看巨兽内部的状态。在网上搜寻的Docker教程第一步都是在服务器中安装docker和创建基础容器创建容器等那些复杂的工作,大师兄已经帮我做好了,直接把创建好的容器交给了我,因此我只需要老老实实的安装一下Anaconda等就可以,没搞懂之前暂时先别安装驱动!等后面用到再说。。。。
还有个Bug就是刚分配的容器连Sudo命令都没有,一些sudo命令会报错:-bash: sudo: command not found,查看这篇文章:https://www.cnblogs.com/pengpengboshi/p/16159443.html。
另外遇到一个坑:有博客让我编辑配置文件时用 gedit命令,然而我Ubuntu系统是没有的,得去安装,结果一安装就是一个多小时(心态炸了),最后确实安装好了,不过还是不能用,看到别的博客说必须图形化界面才能用,最后我突然想到编辑文件还可以用vim命令。。(脑子不好使了)

安装Anaconda

具体Docker容器中Ubuntu下安装Anaconda如下:
1.首先去清华源下载想要的版本:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/;我选择Anaconda3-5.3.1-Linux-x86_64.sh,听说最稳定。。。
2.安装。可以将之前下载的.sh文件通过MobaXterm终端从本机上传到容器中, 在文件下载的目录下打开终端,运行.sh文件:bash Anaconda3-5.3.1-Linux-x86_64.sh
安装过程中会出现阅读条款,然后回车直到出现yes or no的选择,输入yes 回车继续安装。 一直回车,不要按太快,会出现可以修改安装路径,最后我的安装位置是
/home/PythonTools/Anaconda/anaconda3/

3.设置Anaconda环境变量。如果在安装Anaconda的过程中没有将安装路径添加到系统环境变量中,需要在安装后手工添加。
首先在终端输入: sudo vim /etc/profile ,打开profile文件。然后在文件末尾添加一行: export PATH="/home/PythonTools/Anaconda/anaconda3/bin:$PATH" 。(将 “/home/PythonTools/Anaconda/anaconda3/” 替换为你实际的安装路径并保存。)
接着输入命令source /etc/profile,使/etc/profile文件修改后立即生效。
4.重启Linux。打开终端,输入conda —version,查看是否安装成功。可以在终端中输入 echo $PATH 查看已有的环境变量,确认输出里是否已有Anaconda路径了。


Jupyter Notebook连接远程服务器

启动Jupyter notebook时,遇到了Bug:OSError: [Errno 99] Cannot assign requested address。我认为是没有安装的缘故,于是就pip install一下(已经配置清华源)


pip install东西的时候,出现Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pip/: There was a problem confirming…的BUG,具体解决办法是在pip 命令后面都加上 --trusted-host pypi.tuna.tsinghua.edu.cn ,如 pip list --trusted-host pypi.tuna.tsinghua.edu.cn 我都不明白我为啥会遇到这么奇葩的BUG,我本机安装的时候一切都很顺利。。。。一应用到容器举步维艰。。。。
最后终于可以安装了 pip install jupyter notebook --trusted-host pypi.tuna.tsinghua.edu.cn 。 结果发现上述bug:OSError: [Errno 99] Cannot assign requested address
还是没有解决。。。经过一顿搜索之后终于解决了!!!参考:https://zhuanlan.zhihu.com/p/161221247
其实我们是相当于在外网,直接访问jupyter notebook是访问不到的。所以必须用外网访问的方式才行。
首先在服务器启动 jupyter notebook ,命令:

然后在本地转发端口,用win+R 打开cmd, 进入终端。输入命令:```xxx(remote_user)@xxx(remote_ip)
这里的port就是大师兄给分配的端口,user一般都是root,然后root_ip就是分配的主机地址



这里会需要你输入你的远程服务器用户的密码,输入成功后。在本地浏览器网址栏输入http://127.0.0.1:8888,然后你就可以看到熟悉的jupyter-notebook界面了。

到目前为止,在通过jupyter notebook访问远程服务器已经完成。



创建并激活虚拟环境
大家最好养成良好的习惯,在虚拟环境中配置各种库和框架环境。在终端输入
conda create --name NAME python=3.7创建虚拟环境,其中NAME为你的虚拟环境名称,[最好名称中带有版本号以区分,如pytorch-gpu-1.2.0]。创建完后可以输入conda info -e查看所有虚拟环境。
输入 conda activate NAME进入虚拟环境中,可以在在该环境中配置pytorch。这里使用 conda activate 激活虚拟环境时报错: CommandNotFoundError: Your shell has not been properly configured to use ‘co…。解决办法: 首次激活 conda 虚拟环境,可用 source activate 激活(如下),以后就可以正常使用 conda activate 激活虚拟环境了 。

# 首次使用 source activate 命令激活虚拟环境 my_conda_virutal_environment
source activate my_conda_virutal_environment
# 退出虚拟环境
conda deactivate
# 以后使用 conda activate 命令激活虚拟环境
conda activate my_conda_virutal_environment



复制环境:
conda create -n new_torch --clone torch

删除环境:conda remove -n torch --all

其实后面我的环境一直没配置好,气的我把虚拟环境给删除了,后面也是在用anaconda的base环境,唉…希望不会出事吧!!

Docker容器中安装CUDA、CUDNN与Pyorch

安装CUDA11.3

先查看自己容器的显卡型号。可以去终端输入命令查看,输入命令:ubuntu-drivers devices
![image.png](https://img-blog.csdnimg.cn/img_convert/dcae0daa5185223b21360be2c2d1897c.png#clientId=ue6616e71-304f-4&crop=0&crop=0&crop=1&


可以看到显卡是TITAN Xp。到这里又看到一些博客说要安装驱动,不过我打算先直接下载CUDA,去官网(https://developer.nvidia.com/cuda-downloads)选择cuda11.3版本,(听说会自动安装nvidia驱动)
![i



命令如下:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda-repo-ubuntu2004-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

执行sudo apt-get -y install cuda时遇到的BUG:W: GPG error: file:/var/cuda-repo-ubuntu2004-11-3-local Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80



解决命令:sudo apt-key adv —keyserver keyserver.ubuntu.com —recv-keys F60F4B3D7FA2AF80
又报错:gnupg,gnupg2 and gnupg1 do not seem to be installed,but one of them is required for this operation 解决命令:sudo apt-get install gnupg 再一遍运行上面的。就可以运行完了。然后修改环境变量,运行,vim ~/.bashrc最下面加入

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

保存并更新:source ~/.bashrc最终终于安装好了!!!!



安装GPU版本的Pytorch
回到终端,执行下面两行命令。

conda create -n pytorch-gpu python=3.7.0 conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch -n pytorch-gpu


第一个命令是创建虚拟环境,第二行命令就是安装cuda11.3版本对应的PyTorch框架。默认给我安装的Pytorch版本是1.12.1。
不过我感觉这样安装太慢了,我选择离线下载
这里以Ubuntu系统CUDA11.3以及python3.7为例,打开网址: https://download.pytorch.org/whl/cu113/torch_stable.html
搜索torch-1.10.0



搜索torchvision-0.11.1



在本机下载路径里可以找到需要的torch-1.10.0+cu113-cp37-cp37m-linux_x86_64.whl以及torchvision-0.11.1+cu113-cp37-cp37m-linux_x86_64.whl两个文件即可。注意,cu113代表CUDA11.3,cp38表示python3.8的编译环境,linux_x86_64表示x86的平台64位操作系统。下载完成后,将这两个文件传入你的离线主机(服务器)中。接着进入刚刚用conda创建好的虚拟环境后依次安装whl包:

pip install torch-1.10.0+cu113-cp37-cp37m-linux_x86_64.whl
pip install torchvision-0.11.1+cu113-cp37-cp37m-linux_x86_64.whl

最后也是成功安装了,但是验证时cuda.is_available()一直返回的FAlSE

import torch
print(torch.__version__)
torch.cuda.is_available()
import torchvision
print(torchvision.__version__)



然后到这里我就很崩溃,后面其实也有重新装过好几次,不出意外都失败了,然后看到有文章说是系统驱动和内核不一致的问题,然后我又花了快一天的时间看看Ubuntu系统怎么装显卡驱动的,尝试了很久还是没有成功,我感觉真的很绝望,然后就请教了大师兄,多亏问了大师兄,他重启了一下容器就解决了,然后我真的很感谢!!!然后nvidia-smi命令也可以用了!!!



我那个久违的True终于出现了,真的配置的给我整的快崩溃了!!!


最后尝试跑了一下图像检测的分类任务,成功跑出来了!!!开心!!!!


3.配置Pycharm连接远程服务器

点击pycharm左上角的file,找到python interpreter,点击右边的设置(长得像齿轮那个),然后找到SSH interpreter填写服务器的地址和你服务器上的名字



点击新增,选择SSH Interpreter。 host是主机IP,username是用户名,端口也别忘记改



这里下一步,输入密码



选择远程docker容器python执行文件,在安装Anaconda包内, 例如我的位置是:/home/PythonTools/Anaconda/anaconda3//bin/python3.7



下一栏选择本地项目目录与远程项目目录位置映射 ,意思就是你当前项目在哪,把它上传到服务器哪个位置。


然后就OK了!!!



将本地代码与服务器进行同步



选择红色框的这个,不要选择always


然后就是愉快的测试项目了,我这个是TextRNN文本分类,然后我本机跑一个epoch都够呛,用实验室的显卡跑的飞快!!!!!



最后终于写完了这篇文章,真的是经历了太多挫折,说话说得好,工欲善其事,必先利其器。所以环境配置这一块一定要自己搞明白,以后去到新地方就可以花费更好的时间去配置这些环境,规避因环境而产生的BUG。希望爱后面我能少遇到一点BUG,继续努力向大佬们学习,敢于尝试!!!
参考文章
比 Xshell 还好用的 SSH 客户端神器,MobaXterm 太爱了! https://mp.weixin.qq.com/s/p96kWPkPuJYeWxG3AqvnDQ
配置Pycharm以及Jupyter远程服务器 https://zhuanlan.zhihu.com/p/409159969
Pycharm代码docker容器运行调试 | 机器学习系列 https://blog.csdn.net/zhiweihongyan1/article/details/120556923
【Pytorch】在实验室linux系统服务器上搭建自己的pytorch-gpu环境过程详解!一篇就足够!:https://blog.csdn.net/weixin_44398263/article/details/109110773