linux下无root权限安装python2.7和pip以及安装cuda9.0,cudnn7.4,pytorch-gpu

简介

因为自己电脑的gpu不足,想要使用学校的gpu。学校的基本配置如下

系统是centos7.3.里面有8个V100

因为没有root权限,所以只能在文件夹下安装自己的所有东西,刚开始想要安装anaconda,然后在安装其他的cuda,cudnn,pytorch-gpu,然而在测试程序中无法使用GPU加速,很难受,然后放弃使用anaconda,反而可以了。

服务器的简单链接

因为自己的电脑的系统是ubuntu16.04,所以也比较方便,如果是win下的话,可以使用xshell,xftp。

链接的话使用ssh,我的是

ssh [email protected]

想要传输文件的话,可以打开文件后,左侧有一个Connect to Sever,如图

sftp://[email protected]/home/zhangyuting314

 这样子就可以简单的使用了。

安装python2.7

如果你想要安装的是python3的话,估计没有必要安装pip了,好像是自带的。

1.下载python2.7

wget https://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz

2.解压,然后到Python的文件路径下

tar -xzf Python-2.7.5.tgz
cd Python-2.7.5

3.进行编译,--prefix这个路径需要修改一下,其实就是编译的路径了

./configure --prefix=/home/zhangyuting314/python2

4.安装

make -j
make install

5.配置环境,将PATH修改成自己的

vim ~/.bashrc
export PATH=/home/zhangyuting314/python2/bin:$PATH
source ~/.bashrc

6.测试

键入python,就可以看到自己安装的版本了

安装pip

下载pip-9.0.1,最后我会升级到19.01

wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9

解压以及安装

tar -zxvf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install

最后的一部出现了

ImportError: No module named setuptools

然后那就先安装setuptools

wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz

tar xvf setuptools-12.0.3.tar.gz
cd setuptools-12.0.3
python setup.py install

安装完之后,在回头安装pip

cd ~
cd pip-9.0.1
python setup.py install

现在基本上安装完成了,查看pip的版本

pip -V

然后在升级一下

pip install --upgrade pip

安装cuda9.0

下载地址

下载完成以后,传输到服务器中,

对.run添加权限,安装。

chmod +x cuda_9.0.176_384.81_linux.run
./cuda_9.0.176_384.81_linux.run

照如下步骤进行安装

Do you accept the previously read EULA?
accept/decline/quit:accept   
 
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
(y)es/(n)o/(q)uit: n
 
Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: y
 
Enter Toolkit Location
 [ default is /usr/local/cuda-9.0 ]: 
直接按enter
 
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
 
Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: y

接下来添加环境,里面不需要修改了,注意里面是大写的HOME,不是home

vim ~/.bashrc
export PATH=$HOME/cuda9.0/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/cuda9.0/lib64/

然后激活环境

source ~/.bashrc

看是否安装好,键入。

nvcc -V

安装cudnn7.4

这个cudnn必须和cuda适配哦

下载地址

注册下载完成以后,传输到服务器中

然后解压,解压之后的文件是cuda文件

tar -xzvf cudnn-9.0-linux-x64-v7.4.1.5.tgz

复制

cp cuda/include/cudnn.h ~/cuda9.0/include/
cp cuda/lib64/libcudnn* ~/cuda9.0/lib64
chmod a+r ~/cuda9.0/include/cudnn.h ~/cuda9.0/lib64/libcudnn*

这样子就安装好了cudnn了

安装pytorch-gpu

找到pytorch的官网,里面右需要的命令取安装pytorch,如图

pip install torch torchvision

这里给一个测试程序吧

# coding=utf-8
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.utils.data as Data
import torchvision
import time

# import matplotlib.pyplot as plt

torch.manual_seed(1)

EPOCH = 1
BATCH_SIZE = 50
LR = 0.001
DOWNLOAD_MNIST = False
if_use_gpu = 1

# 获取训练集dataset
training_data = torchvision.datasets.MNIST(
    root='./MNIST_data/',  # dataset存储路径
    train=True,  # True表示是train训练集,False表示test测试集
    transform=torchvision.transforms.ToTensor(),  # 将原数据规范化到(0,1)区间
    download=DOWNLOAD_MNIST,
)

# 打印MNIST数据集的训练集及测试集的尺寸
print(training_data.train_data.size())
print(training_data.train_labels.size())
# torch.Size([60000, 28, 28])
# torch.Size([60000])

# plt.imshow(training_data.train_data[0].numpy(), cmap='gray')
# plt.title('%i' % training_data.train_labels[0])
# plt.show()

# 通过torchvision.datasets获取的dataset格式可直接可置于DataLoader
train_loader = Data.DataLoader(dataset=training_data, batch_size=BATCH_SIZE,
                               shuffle=True)

# 获取测试集dataset

test_data = torchvision.datasets.MNIST(
    root='./MNIST_data/',  # dataset存储路径
    train=False,  # True表示是train训练集,False表示test测试集
    transform=torchvision.transforms.ToTensor(),  # 将原数据规范化到(0,1)区间
    download=DOWNLOAD_MNIST,
)
# 取前全部10000个测试集样本
test_x = Variable(torch.unsqueeze(test_data.test_data, dim=1).float(), requires_grad=False)
# test_x = test_x.cuda()
## (~, 28, 28) to (~, 1, 28, 28), in range(0,1)
test_y = test_data.test_labels


# test_y = test_y.cuda()
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(  # (1,28,28)
            nn.Conv2d(in_channels=1, out_channels=16, kernel_size=5,
                      stride=1, padding=2),  # (16,28,28)
            # 想要con2d卷积出来的图片尺寸没有变化, padding=(kernel_size-1)/2
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2)  # (16,14,14)
        )
        self.conv2 = nn.Sequential(  # (16,14,14)
            nn.Conv2d(16, 32, 5, 1, 2),  # (32,14,14)
            nn.ReLU(),
            nn.MaxPool2d(2)  # (32,7,7)
        )
        self.out = nn.Linear(32 * 7 * 7, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = x.view(x.size(0), -1)  # 将(batch,32,7,7)展平为(batch,32*7*7)
        output = self.out(x)
        return output


cnn = CNN()
if if_use_gpu:
    cnn = cnn.cuda()

optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
loss_function = nn.CrossEntropyLoss()

for epoch in range(EPOCH):
    start = time.time()
    for step, (x, y) in enumerate(train_loader):
        b_x = Variable(x, requires_grad=False)
        b_y = Variable(y, requires_grad=False)
        if if_use_gpu:
            b_x = b_x.cuda()
            b_y = b_y.cuda()

        output = cnn(b_x)
        loss = loss_function(output, b_y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if step % 100 == 0:
            print('Epoch:', epoch, '|Step:', step,
                  '|train loss:%.4f' % loss.item())
    duration = time.time() - start
    print('Training duation: %.4f' % duration)

cnn = cnn.cpu()
test_output = cnn(test_x)
pred_y = torch.max(test_output, 1)[1].data.squeeze()
accuracy = sum(pred_y == test_y) / test_y.size(0)
print('Test Acc: %.4f' % accuracy)

参考博客

https://blog.csdn.net/weixin_40085833/article/details/84325114

发布了102 篇原创文章 · 获赞 117 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/pursuit_zhangyu/article/details/87621187