Python利用 Anaconda安装pytorch并测试GPU

  1. 准备工作:
    针对的是anaconda下的pytorch安装,因此默认电脑已经有了anaconda。
  2. 首先查看自己的显卡版本。
    网上推荐的大都是在 命令行下,使用nvcc --version命令
    如下所示:
    nvcc --version

    但是老给我报错,解决无果。

    C:\Users\Dell>nvcc --version
    'nvcc' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    
    C:\Users\Dell>

    我就不信不用这个明明查看不了显卡版本。后来我换了另外一种方式,成功的查看了显卡版本。
    使用 nvidia-smi命令也可以查看显卡版本!!!

    nvidia-smi

    如下所示:
    Python利用 Anaconda安装pytorch并测试GPU_第1张图片

  3. 在 Anaconda prompt 下进行安装pytorch
    先去 pytorch官网  选择 自己所需要的 版本 ,官网如下:https://pytorch.org/
    用conad命令安装会很慢,而且报了错,没有解决,尝试了pip安装,成功了!!。我的选择如下:
    Python利用 Anaconda安装pytorch并测试GPU_第2张图片
    在 Anaconda prompt 输入命令即可。注意:切换到你的需要安装的环境下conda常用的命令可以参考这边文章(conda指令):https://blog.csdn.net/menc15/article/details/71477949

    为什么我要用 --user ?因为直接用 pytorch 中的命令,我报了权限不够的错误,按照提示加了 --user,然后捂着眼睛,矮... 一两分钟,两分钟以后就好了(滑稽)。我当时的错误如下:
     

    ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。: 'c:\\anaconda\\envs\\xxx\\lib\\site-packages\\~orch\\lib\\asmjit.dll'
    Consider using the `--user` option or check the permissions.

    然后就安装成功啦!有图为证!

  4. 在pycharm中测试 pytorch

    尼玛!!又给我报错!没有什么C++?!
    pycharm 中的 error:    Visual C++ Redistributable is not installed, this may lead to the DLL load failure.


    解决方案参考这篇文章即可:https://blog.csdn.net/qq_29750461/article/details/108083764
    然后安装了C++的环境以后,两分钟以后又好了!

    用下面这个例子测一下pytorch和GPU!
    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 = True
    if_use_gpu = 1
    
    # 获取训练集dataset
    training_data = torchvision.datasets.MNIST(
        root='./mnist/',  # 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/',  # 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)
    准确率在 90以上应该。
  5.  总结:

出了三次bug,第一次是 conda 命令安装 pytorch,错误我不记得了,最后没有解决。第二次是 pip安装,权限不够,加了 --user 后,就好了。推荐使用 pip 安装,不是因为我报了错,而是因为conda下载包有点慢。    第三次是报了没有安装C++的错误,在网上收到了解决方案。
 

你可能感兴趣的:(python,python,深度学习,pytorch,anaconda,pycharm)