手头有个项目,需要一个很麻烦的环境,要用服务器的gpu跑深度学习,同时要求python版本为3.6,pytorch版本为1.3.0,这两个版本刚好都被官方途径删除了,只能通过各种奇怪的方式进行安装,踩了不少坑,所以记录一下。希望以后能碰到一些阳间项目,官方安装就可以顺利装完那种。
话不多说,直接开始:
一、选取合适的docker镜像,需要将显卡驱动、cuda版本、pytorchcuda版本等互相对应。
docker的安装这里就略过了。
首先确定自己的显卡能支持的cuda版本,参考链接:Docker配置深度学习pytorch gpu环境_docker pytorch_恬梦的博客-CSDN博客
1.查看显卡驱动版本
nvidia-smi
选择的cuda版本低于上图中的cuda版本就行了。
手动安装torch应该是总共需要安装torch、torchvision、torchaudio三个。但是我装的1.3版本没有torchaudio,所以只装另外两个,这三者的版本对应关系参考:PyTorch中torch、torchvision、torchaudio版本对应关系_Liekkas Kono的博客-CSDN博客
Torchvision与Pytorch匹配的版本安装方法 - 知乎
离线pytorch的下载地址是:https://download.pytorch.org/whl/torch_stable.html
综合我的需求,我最终选择了cu100/torch-1.3.0%2Bcu100-cp36-cp36m-linux_x86_64.whl
cu100表示是使用gpu,且cuda版本为10.0,cp36表示使用python3.6,最后是linux64位操作系统。
另一个选的是cu100/torchvision-0.4.1%2Bcu100-cp36-cp36m-linux_x86_64.whl
所以我要拉的镜像应该加载了cuda的10.0版本。这么选是因为我觉得python3.6应该比cuda和cudn这些东西好装。
从dockerhub上找得到对应的命令。
2.拉取镜像
sudo docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu14.04
为了加快速度建议换一下docker的源:docker更换镜像源_docker修改镜像源_东方隐侠千里的博客-CSDN博客
二、创建容器
1.查看镜像:
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvidia/cuda 10.0-cudnn7-devel-ubuntu14.04 4a2994f8b795 3 years ago 3.12GB
2.创建容器:
sudo docker run -itd --gpus all -p 16535:22 --name [name] -v [/home/workplace]:[/workspace] nvidia/cuda:10.0-cudnn7-devel-ubuntu14.04
--gpus all 是使用所有的gpu。命令中的[]是实际不需要的,是我特意框出来方便观看的。
其余的参数的含义参考:【Docker系列】从头学起 Docker——docker run 命令详解_搞什么滚去学习的博客-CSDN博客
3.查看容器:
sudo docker ps -a
-a参数表示会连没有在运行的容器一起显示。
4.进入容器:
sudo docker exec -it [id] /bin/bash
[id]替换为在查看容器时查询到的容器id。
5.退出容器:
#-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
exit
# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
三、安装pyhon3.6
进行了一些网上的安装尝试,但是网上的很多源要么没有维护了,要么装下来没有pip,所以改用miniconda进行安装。
参考链接:手把手教你如何在Ubuntu下安装Miniconda - 知乎
ubuntu安装Miniconda_Baby_of_breath的博客-CSDN博客
1.安装miniconda
先在官网下载miniconda安装包
Miniconda — conda documentation
然后上传到服务器,我是使用的finalshell:SSH工具 SSH客户端
输入命令:
bash Miniconda3-py310_23.1.0-1-Linux-x86_64.sh
出现Welcome to Minxxxxx代表没问题,然后一直回车,可能会遇到More,依然一直回车,不用担心错过什么。
直到遇到 Do you accept the license terms?[yes|no]选择yes。
接着一直回车,到询问是否初始化,并且会添加环境变量,选择yes。
执行命令刷新环境变量:
source ~/.bashrc
我这里按照教程是失败的,但是我在重启shell之后命令行前面出现了(base)表明成功了。
2.退出base环境:
conda deactivate
3.关闭自动进入base环境:
conda config --set auto_activate_base false
4.新建3.6环境:
conda create --name [py36] python=3.6
[py36]是我设定的conda虚拟环境的名字,实际使用命令不需要[]。
进入新建的环境,名字是py36:
conda activate py36
这个命令以后会经常用,因为我找不到自动进入自定义虚拟环境的方法【【【【
5.离线安装torch
因为正常安装是装不上去的,会提示找不到torch1.3这个版本。参考链接:离线安装torch和torchvision_torch离线安装_溜溜真6的博客-CSDN博客
在安装的时候使用清华源,因为虽然是离线安装,但还是会安装需要的包。
pip install torch-1.3.0+cu100-cp36-cp36m-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchvision-0.4.1+cu100-cp36-cp36m-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
6.安装项目需要的其他包:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
我的这个项目的依赖如下所示:
torch==1.3.0
allennlp==0.8.4
python-Levenshtein==0.12.0
transformers==2.2.2
scikit-learn==0.20.0
sentencepiece==0.1.91
overrides==4.1.2
在安装的时候会报错,因为PyTorch 要求 gcc >= 4.9,是环境里的gcc版本不对。
尝试升级conda的gcc,升级之后没有反应,弄了半天没有解决,所以换了另一种办法:
Error日志 ERROR: Failed building wheel for jsonnet_hithithithithit的博客-CSDN博客
输入命令:
conda install -c conda-forge jsonnet
好像可以继续了,然后接着报错:
ERROR: Cannot uninstall 'certifi'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
pip install certifi --ignore-installed -i https://pypi.tuna.tsinghua.edu.cn/simple
最后再运行一下命令确认是不是都装完了
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
检查环境里面是不是能使用gpu,先进入虚拟环境py36,然后输入python开始尝试。参考链接:torch使用gpu的环境配置_torch gpu_维度攻城狮的博客-CSDN博客
import torch
torch.cuda.is_available()
环境配置就搞定。本来还想再写一篇的,但是看别人有完整的,决定直接引用了。
四、为docker设置ssh以便pycharm使用。
首先需要给容器的root设置密码,进入容器之后输入命令更改密码:
passwd
安装ssh,参考链接:https://www.cnblogs.com/zaochajun/p/12029494.html
sudo apt-get update
sudo apt-get install -y openssh-server
安装vim,参考链接:vim的安装与配置_安装vim_df12345688的博客-CSDN博客
sudo apt-get install vim
通过vim更改ssh的设置,参考链接:Ubuntu 系统如何使用 root 用户登录实例-CSDN博客
vim /etc/ssh/sshd_config
我这里PermitRootLogin 和 PasswordAuthentication都改了,不然连不上。
启动容器中的ssh服务:
service ssh restart
测试一下,退出容器,连接一下试试,127.0.0.1是服务器本机ip,端口是创建容器时输入的:
ssh root@127.0.0.1 -p 16535
五、保存容器为镜像与在pycharm中使用docker。
至此全部配置完了,将容器保存为新的镜像:
sudo docker commit [容器id] [新镜像name]:[新镜像tag]
最后说一次,命令中没有括号[],这是为了方便观看。
专业版的pycharm才可以远程链接,在校生可以免费申请。剩下的设置我就懒得写了,这篇链接写得很清楚: