python目标版本3.6,torch目标版本1.8.1
部署环境总是代码开发者离不开的一个问题,通常会有几种解决路线。
1. 每个环境单独部署一套,windows一套,unix一套,需要什么依赖就装什么。
2. 引入conda环境,为每个类型的项目创建一个属于自己的虚拟环境。
3. 引入Docker,直接把代码运行所需要的操作系统以及库依赖全部打包。
4. 服务器-本地结合的开发形式。
本文主要尝试第二点与第四点相结合,利用已有的闲置服务器,配合本地IDE进行开发。
首先在Centos7上部署conda
在CentOS7环境下部署Anaconda,需要进行以下步骤:
在home下创建一个目录,名为miniconda2,我们目标是下载Miniconda
Miniconda是一个轻量级的Python发行版本,它包含了conda、python等180多个科学包及其依赖项,适合空间要求严格的用户。Miniconda相当于conda+python+pip,它的安装包比Anaconda更小,功能也更少,但是仍然能够满足一般用户的需求。
Anaconda是一个完整的Python发行版本,包含了conda、python等所有必要的包,适合需要安装所有包的用户。Anaconda的安装包比Miniconda更大,功能也更多,但是对于需要安装特定包的用户来说,Anaconda可能更适合。
国内镜像源的地址为:Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
具体的下载指令为:
mkdir /home/miniconda2
cd /home/miniconda2
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.sh
下载完毕后执行安装命令:
cd /home/miniconda2
chmod 777 Miniconda2-4.7.12.1-Linux-x86_64.sh #给执行权限
bash Miniconda3-latest-Linux-x86_64.sh
中间可以根据自己的需要确定安装路径。
如果我们执行conda init,系统提示: conda command not find
那我们需要将安装路径添加到系统的PATH当中,我们需要修改两个文件
sudo vim /etc/profile
# 在最后一行加上:
export PATH=$PATH:~/anaconda3/bin
sudo vim ~/.bashrc
# 在最后一行加上:
export PATH=$PATH:~/anaconda3/bin
我们再执行一行语句,激活环境
source ~/.bashrc
之后我们再执行版本查看
conda -V
输出结果:即可。
然后创建一个pytorch环境,这里由于服务器性能限制,安装CPU版本即可。
我们首先应该明确:troch-torchvision-python版本的对应关系:
我们暂定选用Python版本3.6为主环境。
首先更新镜像源:
具体的我们最热门的使用清华镜像源:anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
Anaconda的配置文件叫.condarc,一般会放在用户的home目录,因为前面带有".",因此是隐藏文件,对用户是隐藏的。我们可以用vim ~/.condarc直接编辑。
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
或者我们可以直接执行:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
有需要的话pip也需要配置镜像源:
设置pip国内源
参考:https://www.jianshu.com/p/091637a926e5
Python的包管理工具是pip,用pip下载需要用到的依赖库,默认pip从国外镜像源下载,速度很慢,所以要设计中国内镜像源。
所以换了一个。在pytorch_cpu环境中,修改pip镜像源:
# 设置pip镜像源
conda activate pytorch_cpu
pip config set global.index-url https://mirrors.163.com/pypi/simple/
我们创建并进入虚拟环境:
conda create -n pytorch_cpu python=3.6.5
具体的依赖我们参考这篇文章:
PyTorch深度学习(13)PyTorch Torch Vision python 版本对应_pytorch版本对应_JYliangliang的博客-CSDN博客
安装pytorch1.8.0的CPU版本依赖,我们进入torch官网:PyTorch
执行:conda install pytorch torchvision torchaudio cpuonly -c pytorch
但是过程中提示报错:
CondaMultiError: [Errno 12] Cannot allocate memory()
猜测可能是之前用yum install anaconda,和现在的miniconda产生了冲突?
经过这篇文章的分享:解决Linux:[Errno 12] Cannot allocate memory问题_rosefunR的博客-CSDN博客
发现可能是由于服务器swap区域空间不足。我们配置一个swap区域,我这里分了2G,安装过程顺利进行。
安装完毕之后,我们执行 conda list # 查看已经安装的包:
运行一些代码,以确保环境安装顺利,确认好工作目录。
自建目录之后,我们运行一些测试代码,比如将网络设备信息编码为张量形式
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 5)
self.fc2 = nn.Linear(5, 1)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 创建模型实例
net = Net()
# 定义输入张量
x = torch.randn(1, 10)
# 将输入张量编码为张量形式
x = x.unsqueeze(0)
x = torch.tensor(x, dtype=torch.float32)
# 将张量形式的输入张量传递给模型
output = net(x)
# 输出模型的输出张量
print(output)
输出结果:
正常运行。
我们再测试一组样例:
import torch
from torch_geometric.data import Data
# 定义设备列表和边列表
devices = ['device1', 'device2', 'device3']
edges = [(0, 1), (1, 2)]
# 创建节点特征矩阵
x = torch.eye(len(devices)) # one-hot 编码
# 创建边列表
edge_index = torch.tensor(list(zip(*edges)), dtype=torch.long)
# 创建图数据对象
data = Data(x=x, edge_index=edge_index)
# 输出数据对象
print(data)
运行之后,程序报错缺少模块:
Traceback (most recent call last):
File "main2.py", line 2, in <module>
from torch_geometric.data import Data
ModuleNotFoundError: No module named 'torch_geometric'
我们调用:
conda install torch_geometric
找不到,则我们使用pip进行安装
pip install torch_geometric
也不行。
我们直接前往torch_gemetric的wiki:Installation — pytorch_geometric documentation (pytorch-geometric.readthedocs.io)
我们发现其支持python3.7的版本,所以我们也面临着更新python版本的需求。
解决冲突(说实话不如重建一个环境):
于是我们再根据python版本直接新建环境即可。
样例一顺利运行
我们安装pyg库也很顺利。
我们运行样例2:
也顺利完成。
本地pyCharm配置sftp连接,与线上编译器结合。
具体可以参考这个资料:
本地代码运行成功,调试完毕。
我这里不需要将代码上传到服务器,只是用那个解释器和环境,如果有需要利用服务器的各种资源,可以继续配置deployment。
以后就可以顺利使用统一的环境进行开发部署与调试了