在Windows10环境安装CUDA11.7及PyTorch1.13–使用Nvidia RTX A4000开始炼丹之旅

在Windows10环境安装CUDA11.7及PyTorch1.13–使用Nvidia RTX A4000开始炼丹之旅

前言

这个双十一,RTX3090矿卡反倒是涨价了,RTX3090Ti当然也涨价了。。。只好从x宝搞一只工包丽台RTX A4000,唯一的好处就是显存大并且便宜。。。较RTX3060 12G,16G显存能玩的时间可能也长一点,毕竟现在是4K屏,显存大当然更从容些。

硬件配置

之前有写过:https://lizhiyong.blog.csdn.net/article/details/123294308

主板:x99f8d
CPU:e5 2696v3 *2 【36核72线程】
内存条:DDR4 ECC 32G *8 【256G】
显卡:RTX A4000 【16G显存】
散热器:ta 120ex *2 【单风扇】
SSD:MX500 2T *2 【4T】
HDD:NAS拆的酷狼 4T
电源:GX1000 【1000W】
机箱:614PC 【标配2风扇+套装3风扇】
显示器:27寸 【4K】
键鼠:笔记本淘汰的一套 【USB口】
网卡:主板自带的网卡

今天终于让GT730光荣退役了。

安装驱动

去Nvidia官网:https://www.nvidia.cn/Download/index.aspx?lang=cn

在这里插入图片描述

丽台还是可以省不少事情。。。因为CUDA可以比驱动老一些,所以直接Down个最新版本的驱动,不过多解释。

在这里插入图片描述

安装CUDA

查看支持的CUDA版本

驱动安装完毕并重启后就可以查看当前能够支持的最高版本CUDA:

在这里插入图片描述

可以看到目前的驱动支持的CUDA最高版本是:12.0.79。

当然不可能去安装最高版本的CUDA。。。为了能够正常使用PyTorch,一定是按照PyTorch的要求去安装才比较稳妥。。。虽然Flink1.15集群使用JDK1.17貌似也没出现啥特别严重的生产事故,但对非专业运维的开发人员来说,环境方面的问题还是稳妥点好。

查看PyTorch需要的CUDA版本

在PyTorch的官网:https://pytorch.org/

可以看到:

在这里插入图片描述

显然需要安装的CUDA版本是11.7。

老黄的网站:https://developer.nvidia.com/cuda-toolkit

在这里插入图片描述

点Download后:

在这里插入图片描述

默认的是11.8,笔者没心思验证是不是也能凑合着用。。。稳妥起见,还是应该选11.7。

安装CUDA11.7.1

在这个官方网站:https://developer.nvidia.com/cuda-toolkit-archive

在这里插入图片描述

可以找到古老的11.7.1版本,就是它了。

在这里插入图片描述

直接下载安装即可。

在这里插入图片描述

还需要被迫先安装一个Visual Studio。。。

在这里插入图片描述

笔者搞过C#,先这样吧。。。安装好Visual Studio后重新安装CUDA11.7.1即可。

验证CUDA

打开路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin

在这里插入图片描述

有个nvcc.exe文件。在CMD:

Microsoft Windows [版本 10.0.19045.2251]
(c) Microsoft Corporation。保留所有权利。

C:\Users\zhiyong>nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Jun__8_16:59:34_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.7, V11.7.99
Build cuda_11.7.r11.7/compiler.31442593_0

C:\Users\zhiyong>

这种情况就不需要配置环境变量了。。。如果识别不到就需要环境变量添加至少这个路径:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\libnvvp

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin

此时可以确定CUDA安装成功。

安装Anaconda

直接官网:https://www.anaconda.com/

下载最新版本,一路下一步,再打2个钩,即可使用Anaconda来托管Python的环境,非常方便。

C:\Users\zhiyong>conda -V
conda 22.9.0

C:\Users\zhiyong>conda list
# packages in environment at C:\Users\zhiyong\anaconda3:
#
# Name                    Version                   Build  Channel
# 这里有一大坨
conda                     22.9.0           py39haa95532_0
# 这里也有一大坨,省略了
zstd                      1.5.2                h19a0ad4_0

C:\Users\zhiyong>

笔者之前为了使用PySpark已经安装过了。但是由于种种原因GUI坏掉了,所以笔者需要修复它。命令行比GUI稳定性好多了。。。

解决Anaconda启动闪退的问题

使用管理员运行:conda prompt

之后继续执行:

conda update anaconda-navigator
y
anaconda-navigator --reset
conda update anaconda-client
y
conda update -f anaconda-client
y

此时修复完毕。

解决Anaconda长时间init的问题

需要先断网,打开Anaconda后再联网。。。需要这么一套操作猛如虎的应该也不止笔者一个吧。。。

安装PyTorch1.13

在新的Env安装

先新建一个专门玩PyTorch的Env【笔者随意起名叫pytorch1】,防止出现依赖包冲突的问题:

在这里插入图片描述

然后管理员身份启动CMD:

C:\WINDOWS\system32>conda env list
# conda environments:
#
                         C:\ProgramData\Anaconda3
                         C:\ProgramData\Anaconda3\envs\pytorch1
base                     C:\Users\zhiyong\anaconda3
pyspark1                 C:\Users\zhiyong\anaconda3\envs\pyspark1
C:\WINDOWS\system32>activate pytorch1

EnvironmentNameNotFound: Could not find conda environment: pytorch1
You can list all discoverable environments with `conda info --envs`.

C:\WINDOWS\system32>

显然此时出现了问题。。。remove掉重新再生成一个:

activate base
conda remove pytorch1
conda create -n pytorch1 python=3.9.13

此处的Python版本一定要选对,否则之后安装PyTorch会出现下方的报错。

敲y确定后,稍等几分钟即可看到:

C:\WINDOWS\system32>conda info --envs
# conda environments:
#
                         C:\ProgramData\Anaconda3
base                     C:\Users\zhiyong\anaconda3
pyspark1                 C:\Users\zhiyong\anaconda3\envs\pyspark1
pytorch1                 C:\Users\zhiyong\anaconda3\envs\pytorch1


C:\WINDOWS\system32>activate pytorch1

(pytorch1) C:\WINDOWS\system32>conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
Proceed ([y]/n)? y

如果有配置加速:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/free/

其实也可以不用后边的2个-c的参数。。。

解决报错

This can take several minutes.  Press CTRL-C to abort.
Examining torchaudio:  25%|███████████████▌                                              | 2/8 [01:03<03:11, 31.93s/it]/Examining conflict for pytorch torchaudio torchvision:  25%|███████▎                     | 2/8 [00:03<00:10,  1.68s/it]-Examining conflict for pytorch torchvision:  38%|███████████████                         | 3/8 [00:08<00:08,  1.77s/it]\Examining conflict for python torchvision:  50%|████████████████████▌                    | 4/8 [00:14<00:09,  2.35s/it]-failed

UnsatisfiableError: The following specifications were found
to be incompatible with the existing python installation in your environment:

Specifications:

  - pytorch -> python[version='2.6.*|2.7.*|3.4.*|3.5.*|3.6.*|3.3.*|>=2.7,<2.8.0a0|>=3.11,<3.12.0a0|3.9.10|3.8.12|3.7.12|3.7.10|3.7.10|3.6.12|3.7.9|3.6.12|3.6.9|3.6.9|3.6.9|3.6.9|>=3.8|>=3.6|>=3.5|>=3.7|>=3.6,<3.7|3.9.*',build='0_73_pypy|1_73_pypy|2_73_pypy|3_73_pypy|5_73_pypy|5_73_pypy|0_73_pypy|1_73_pypy|0_73_pypy|4_73_pypy']

Your python: python=3.9.13

If python is on the left-most side of the chain, that's the version you've asked for.
When python appears to the right, that indicates that the thing on the left is somehow
not available for the python version you are constrained to. Note that conda will not
change your python version to a different minor version unless you explicitly specify
that.

The following specifications were found to be incompatible with each other:

Output in format: Requested package -> Available versions

Package vs2008_runtime conflicts for:
pytorch -> ninja -> vs2008_runtime
torchvision -> python -> vs2008_runtime

Package requests conflicts for:
python=3.9 -> pip -> requests
torchvision -> requests

Package pytorch-cuda conflicts for:
torchaudio -> pytorch==1.13.0 -> pytorch-cuda[version='>=11.6,<11.7|>=11.7,<11.8']
torchaudio -> pytorch-cuda[version='11.6.*|11.7.*']
torchvision -> pytorch==1.13.0 -> pytorch-cuda[version='>=11.6,<11.7|>=11.7,<11.8']
pytorch -> pytorch-cuda[version='>=11.6,<11.7|>=11.7,<11.8']
torchvision -> pytorch-cuda[version='11.6.*|11.7.*']

Package pytorch conflicts for:
torchvision -> pytorch[version='1.10.0|1.10.1|1.10.2|1.13.0|1.12.1|1.12.0|1.11.0|1.9.1|1.9.0|1.8.1|1.8.0|1.7.1|1.7.0|1.6.0|1.5.1|1.5.0|1.4.0|1.3.1|1.3.0|1.2.0|>=1.1.0|>=1.0.0|>=0.4']
torchaudio -> pytorch[version='1.10.0|1.10.1|1.10.2|1.11.0|1.12.0|1.12.1|1.13.0|1.9.1|1.9.0|1.8.1|1.8.0|1.7.1|1.7.0|1.6.0']


(pytorch1) C:\WINDOWS\system32>

根据提示,应该更换为3.1.10再次尝试:

activate base
conda remove pytorch1
conda create -n pytorch1 python=3.9.10
y
conda install pytorch torchvision torchaudio pytorch-cuda=11.7
y

这次的报错少了一些:

This can take several minutes.  Press CTRL-C to abort.-
Examining pytorch-cuda=11.7:  25%|█████████████▊                                         | 2/8 [01:13<03:40, 36.68s/it]/Examining torchaudio: 100%|██████████████████████████████████████████████████████████████| 8/8 [01:44<00:00, 12.02s/it]\failed

UnsatisfiableError: The following specifications were found to be incompatible with each other:

Output in format: Requested package -> Available versions

Package pytorch conflicts for:
pytorch
torchvision -> pytorch[version='1.10.0|1.10.1|1.10.2|1.13.0|1.12.1|1.12.0|1.11.0|1.9.1|1.9.0|1.8.1|1.8.0|1.7.1|1.7.0|1.6.0|1.5.1|1.5.0|1.4.0|1.3.1|1.3.0|1.2.0|>=1.1.0|>=1.0.0|>=0.4']
torchaudio -> pytorch[version='1.10.0|1.10.1|1.10.2|1.11.0|1.12.0|1.12.1|1.13.0|1.9.1|1.9.0|1.8.1|1.8.0|1.7.1|1.7.0|1.6.0']

Package pytorch-cuda conflicts for:
torchaudio -> pytorch==1.13.0 -> pytorch-cuda[version='>=11.6,<11.7|>=11.7,<11.8']
torchvision -> pytorch==1.13.0 -> pytorch-cuda[version='>=11.6,<11.7|>=11.7,<11.8']
torchvision -> pytorch-cuda[version='11.6.*|11.7.*']
pytorch-cuda=11.7
torchaudio -> pytorch-cuda[version='11.6.*|11.7.*']

Package setuptools conflicts for:
torchvision -> setuptools
python=3.9.10 -> pip -> setuptools

Package msvc_runtime conflicts for:
torchvision -> python[version='>=3.5,<3.6.0a0'] -> msvc_runtime
pytorch -> python[version='>=3.5,<3.6.0a0'] -> msvc_runtime


(pytorch1) C:\WINDOWS\system32>

显然Python版本更换后还有其它的问题。。。

根据官网:https://pytorch.org/get-started/locally/

在这里插入图片描述

目前Windows10的PyTorch只能使用3.7->3.9,所以降低Python版本:

activate base
conda remove pytorch1
conda create -n pytorch1 python=3.8
y
activate pytorch1
conda install pytorch torchvision torchaudio pytorch-cuda=11.7
y

依旧失败,还是因为有很多包冲突。。。显然conda命令是有问题的。换用pip3的方式:

(pytorch1) C:\WINDOWS\system32>pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
Installing collected packages: urllib3, typing-extensions, pillow, numpy, idna, charset-normalizer, torch, requests, torchvision, torchaudio
Successfully installed charset-normalizer-2.1.1 idna-3.4 numpy-1.23.4 pillow-9.3.0 requests-2.28.1 torch-1.13.0+cu117 torchaudio-0.13.0+cu117 torchvision-0.14.0+cu117 typing-extensions-4.4.0 urllib3-1.26.12

(pytorch1) C:\WINDOWS\system32>

貌似这样可以成功。

验证PyTorch

继续在pytorch1这个Env安装spark-shell敲scala命令的方式敲python命令:

(pytorch1) C:\WINDOWS\system32>python
Python 3.8.13 (default, Oct 19 2022, 22:38:03) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
>>> torch.__version__
'1.13.0+cu117'
>>> exit()

(pytorch1) C:\WINDOWS\system32>

可以看到目前已经启用了CUDA加速,且PyTorch的版本是1.13,安装成功。

测试CUDA效果

使用PyCharm新建项目

在这里插入图片描述

Py脚本

import time

import torch

if __name__ == '__main__':
    print("启动!!!")
    print("PyTorch版本:" + torch.__version__)
    print("PyTorch是否启动CUDA:", torch.cuda.is_available())

    matrix_a1 = torch.randn(99999, 9999)
    matrix_b1 = torch.randn(9999, 88888)

    t1 = time.time() #cpu运算前的时间
    matrix_c1 = torch.matmul(matrix_a1,matrix_b1) #cpu做矩阵相乘
    t2 = time.time() #cpu运算后的时间
    print("当前模式:",matrix_a1.device,"\t耗时:",t2-t1,matrix_c1.norm(2))

    gpu = torch.device("cuda")
    matrix_a2=matrix_a1.to(gpu)
    matrix_b2=matrix_b1.to(gpu)

    t3=time.time() #gpu运算前的时间
    matrix_c2=torch.matmul(matrix_a2,matrix_b2)
    t4=time.time() #gpu运算后的时间
    print("当前模式:", matrix_a2.device, "\t耗时:", t4 - t3, matrix_c2.norm(2))

    t5=time.time() #gpu运算前的时间
    matrix_c3=torch.matmul(matrix_a2,matrix_b2)
    t6=time.time() #gpu运算后的时间
    print("当前模式:", matrix_a2.device, "\t耗时:", t6 - t5, matrix_c3.norm(2))

结果显存爆了:

C:\Users\zhiyong\anaconda3\envs\pytorch1\python.exe C:/Users/zhiyong/PycharmProjects/pyTorchProject1/com.zhiyong.demo1/pyTorchDemo1.py
启动!!!
PyTorch版本:1.13.0+cu117
PyTorch是否启动CUDA: True
当前模式: cpu 	耗时: 147.05355715751648 tensor(4203777.)
Traceback (most recent call last):
  File "C:/Users/zhiyong/PycharmProjects/pyTorchProject1/com.zhiyong.demo1/pyTorchDemo1.py", line 23, in <module>
    matrix_c2=torch.matmul(matrix_a2,matrix_b2)
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 33.11 GiB (GPU 0; 15.99 GiB total capacity; 7.04 GiB already allocated; 7.86 GiB free; 7.04 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

进程已结束,退出代码1

结果出乎意料。。。CPU运算了147s成功了,占用了18C【Win10调度有问题,但是依旧能跑满单路】和60G内存。GPU运算因为显存不足32G【A4000只有16G】,申请不到足够的显存,直接失败了。。。

第二次测试

这次减少数据量:

    matrix_a1 = torch.randn(99999, 9999)
    #matrix_b1 = torch.randn(9999, 88888)#CPU可以运算
    matrix_b1 = torch.randn(9999, 20000)#GPU运算量太大会爆显存

结果显存又OOM了:

C:\Users\zhiyong\anaconda3\envs\pytorch1\python.exe C:/Users/zhiyong/PycharmProjects/pyTorchProject1/com.zhiyong.demo1/pyTorchDemo1.py
启动!!!
PyTorch版本:1.13.0+cu117
PyTorch是否启动CUDA: True
当前模式: cpu 	耗时: 32.04557013511658 tensor(3089646.7500)
当前模式: cuda:0 	耗时: 1.7030134201049805 tensor(4472055.5000, device='cuda:0')
Traceback (most recent call last):
  File "C:/Users/zhiyong/PycharmProjects/pyTorchProject1/com.zhiyong.demo1/pyTorchDemo1.py", line 29, in <module>
    matrix_c3=torch.matmul(matrix_a2,matrix_b2)
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 7.45 GiB (GPU 0; 15.99 GiB total capacity; 11.92 GiB already allocated; 2.17 GiB free; 11.92 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

进程已结束,退出代码1

第三次测试

    #matrix_a1 = torch.randn(99999, 9999)#CPU可以运算
    #matrix_b1 = torch.randn(9999, 88888)#CPU可以运算
    matrix_a1 = torch.randn(20000, 9999)#GPU运算量太大会爆显存
    matrix_b1 = torch.randn(9999, 20000)#GPU运算量太大会爆显存

这次终于看到了加速效果:

C:\Users\zhiyong\anaconda3\envs\pytorch1\python.exe C:/Users/zhiyong/PycharmProjects/pyTorchProject1/com.zhiyong.demo1/pyTorchDemo1.py
启动!!!
PyTorch版本:1.13.0+cu117
PyTorch是否启动CUDA: True
当前模式: cpu 	耗时: 6.454258918762207 tensor(1860912.2500)
当前模式: cuda:0 	耗时: 1.3742117881774902 tensor(1999540.1250, device='cuda:0')
当前模式: cuda:0 	耗时: 0.016983509063720703 tensor(1999540.1250, device='cuda:0')

进程已结束,退出代码0

可以看出GPU运算虽然首次需要加载C++的包,依旧比CPU快了5倍。第二次运算时C++的包已经加载完毕,比CPU快了380倍。但是快归快,就算是A4000有ECC【当然双路E5也有ECC】算出来的结果依旧不准。。。

尾言

总结

至此,环境搭设成功,可以愉快地炼丹了,机器学习和深度学习这种只要是可以GPU提速的,那一定是比CPU快。

ML和DL最需要的是大显存!!!

ML和DL最需要的是大显存!!!

ML和DL最需要的是大显存!!!

重要的话说三遍。16G显存只够入门随便玩玩!!!而且GPU运算不准!!!

跑分

最后再更新一波撸大娘的跑分:

在这里插入图片描述

晕3D,不指望打3D游戏。。。

在这里插入图片描述

为神马还是被识别为GT730???依旧退役了好不???

从撸大娘的跑分结果来看,这只丽台RTX A4000显卡,性能也就是和RTX 3060Ti打的有来有回,毕竟是低功率卡,和移动端RTX 3070半差不差也在意料之中。老泰坦强于3060Ti是万万没想到。。。

工包丽台RTX A4000算是目前Nvidia最便宜的16G显存卡了吧?这个价位貌似也就只有3090矿卡还有一战之力了。

转载请注明出处:https://lizhiyong.blog.csdn.net/article/details/127827522

在这里插入图片描述

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年3月5日 下午2:38
下一篇 2023年3月5日 下午2:39

相关推荐