也正如前面所说,做PC的测试是为了给GPU铺路,而且GTX 1050 Ti的性能和Tesla M4相比,仍有10%的差距,今天就来把这剩下的10%补上。

虚拟机规格为24核CPU,型号为Xeon E5-2678V3,运行内存64 GB,操作系统为Windows 10专业版(1090)。

centos7看显卡_CUDA

通过PyTorch的版本,我们选择计算平台为稍微低一些的CUDA 11.8,以能够和cuDNN版本相匹配。所以系统环境配置为Windows系统 + Conda(Anaconda) + Python 3.11 + CUDA 11.8,示意如下:

centos7看显卡_Windows_02

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

然后我们去NVIDIA官网下载驱动程序。

centos7看显卡_centos7看显卡_03

好尴尬,没有11.8、12.1和12.3这几个版本,那就先选择Any试一下。

centos7看显卡_windows_04

得到的版本还是551.61,跟移动端的版本号是一样的。

安装完驱动之后,在NVIDIA控制面板查看GPU信息,可以看到有1024个CUDA核心.显存规格为4 GB。

centos7看显卡_CUDA_05

对应的CUDA版本为12.4.89,跟普通显卡的版本是一样的。

centos7看显卡_CUDA_06

对应的,CUDA 11.8的下载链接如下:

https://developer.download.nvidia.cn/compute/cuda/11.8.0/local_installers/cuda_11.8.0_522.06_windows.exe

cuDNN 9.0.0的下载链接如下:

https://developer.download.nvidia.cn/compute/cudnn/9.0.0/local_installers/cudnn_9.0.0_windows.exe

按照提示完成CUDA的安装。

centos7看显卡_centos7看显卡_07

按照提示完成cuDNN的安装,这次没有报错。

centos7看显卡_CUDA_08

安装完成之后,使用nvcc -V命令检查CUDA是否安装成功。

centos7看显卡_windows_09

接下来,先安装Anaconda,下载链接如下:

https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Windows-x86_64.exe

再安装PyTorch。

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

centos7看显卡_CUDA_10

安装完成之后,在Python命令行使用以下命令检查CUDA和cuDNN是否安装成功,返回值为True则说明安装成功。捎带检查一下CUDA设备(GPU)的数量,>1说明设备识别成功。

import torch
print(torch.cuda.is_available())
from torch.backends import cudnn
print(cudnn. is_available( ))
print(torch.cuda.device_count())

centos7看显卡_windows_11

除此之外,还可以获取GPU设备的名称、显存大小等等,还可以运行简单的GPU运算。

if torch.cuda.is_available():
print("GPU可用")
device_name = torch.cuda.get_device_name(0)
print("设备名称:", device_name)
# 获取GPU属性(显存大小)
device_properties = torch.cuda.get_device_properties(0)
print("总显存大小:", device_properties.total_memory)
# 运行一个简单的GPU计算任务来测试性能
x = torch.randn(1024, 1024).cuda()
y = torch.randn(1024, 1024).cuda()
z = x + y
print("GPU计算完成",z)
else:
print("GPU不可用")

centos7看显卡_python3.11_12

可以看到,成功识别到设备型号为Tesla M4,显存为4 GB,对应的CUDA设备序号为0。

再运行一个简单的脚本来对比一下24核CPU和单张GPU的运算速度。

import torch
import time
# 定义一个较大的张量用于计算
size = (10240, 10240)
input_cpu = torch.randn(size)
input_gpu = input_cpu.to(torch.device('cuda'))
# 在CPU上执行矩阵乘法(耗时操作)
start_time_cpu = time.time()
output_cpu = torch.mm(input_cpu, input_cpu.t())
duration_cpu = time.time() - start_time_cpu
# 在GPU上执行同样的操作
start_time_gpu = time.time()
output_gpu = torch.mm(input_gpu, input_gpu.t().to(torch.device('cuda')))
duration_gpu = time.time() - start_time_gpu
# 输出结果和运行时间
print(f"CPU Matrix Multiplication Time: {duration_cpu:.6f} seconds")
print(f"GPU Matrix Multiplication Time: {duration_gpu:.6f} seconds")

centos7看显卡_python3.11_13

不得不说,数据中心设备的性能就是比个人PC强,i7-8750H的运算时间为5.395秒,E5-2678V3的运算时间为1.5秒,GPU的运算时间为0.015秒。不过CPU全部投入计算还是很不错的,我甚至听到了服务器的一声轰鸣。

centos7看显卡_centos7看显卡_14

如果将张量再增大10倍呢?

centos7看显卡_centos7看显卡_15

太大了,41,943,040,000字节,也就是40 GB,CPU可支配内存空间不足,看来深度学习用到的CPU、内存、GPU规格都很高。

centos7看显卡_CUDA_16

切换成(51200, 51200)试一下,这次CPU分配了20 GB的内存,没问题了,计算耗时180秒。

centos7看显卡_windows_17

但是GPU的可用空间不足了,计算这些数据需要9.77 GB,超出3.68 GB的总规格了。

centos7看显卡_Windows_18

再往下降一点,改成(16000, 16000)试一下。

centos7看显卡_windows_19

CPU运算耗时5.452780秒,GPU运算耗时0.046782秒,应该是得益于CPU数量比较多,差距仅为115倍,看一下24核CPU满负载运行的场面。

centos7看显卡_CUDA_20

但是当前的测试方法也存在一定问题,那就是运算之后不能及时释放资源,导致GPU的显存一直不够用。经过了解,只要将运算过程中用到的张量释放掉就行了。

# 输出结果和运行时间后,释放GPU显存
input_gpu = None
output_gpu = None

具体的显存使用情况可以通过命令nvidia-smi来查看。

centos7看显卡_windows_21

但是,为什么CUDA版本是12.4呢?和PyTorch中展示的不一样。

centos7看显卡_centos7看显卡_22

应该问题不大,听说,如果PyTorch不能找到匹配的CUDA或cuDNN库,它可能无法调用GPU加速。