2024小白安装Pytorch-GPU版(Anaconda,CUDA,cuDNN讲解)
安装CUDA并使用PyTorch进行GPU加速的神经网络训练,需要遵循以下步骤:
1. 检查GPU兼容性
在开始之前,需要确认你的个人笔记本的GPU是否支持CUDA。可以通过NVIDIA官方网站查询CUDA兼容性。
2. 下载并安装CUDA Toolkit
- 访问NVIDIA的官方网站下载适合你GPU和操作系统版本的CUDA Toolkit。
- 选择适当的安装包,并按照提示完成安装。
3. 配置环境变量
安装完成后,需要配置环境变量以便系统可以找到CUDA。
- 在Windows系统中,需要将CUDA的路径添加到系统环境变量
Path
中。 - 在Linux系统中,需要将以下行添加到
~/.bashrc
或~/.zshrc
文件中:export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
之后,运行source ~/.bashrc
(或对应的shell配置文件)来更新当前会话。
4. 验证CUDA安装
通过运行nvcc --version
命令来验证CUDA是否正确安装。
5. 安装cuDNN
- 从NVIDIA官网下载与CUDA版本兼容的cuDNN。
- 将下载的cuDNN文件解压并放置到CUDA Toolkit目录下。
6. 安装PyTorch
- 访问PyTorch官网,根据你的系统和CUDA版本选择合适的安装命令。
- 使用conda或pip安装PyTorch,确保选择带有
cuda
后缀的版本。
例如,使用pip安装命令可能如下所示:
pip install torch torchvision torchaudio cudatoolkit=xx.x # xx.x 是CUDA版本号
7. 验证PyTorch是否可以识别GPU
在Python中运行以下代码来验证PyTorch是否能够识别和使用GPU:
import torch
print(torch.cuda.is_available())
如果返回True
,则表示安装成功。
8. 使用GPU进行训练
在编写PyTorch代码时,确保将你的模型和数据移动到GPU上。以下是一个简单的例子:
# 定义模型
model = YourModel().cuda() # 将模型移至GPU
# 定义损失函数和优化器
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 训练数据
for data, target in train_loader:
data, target = data.cuda(), target.cuda() # 将数据移至GPU
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
以上步骤概述了在个人笔记本上安装CUDA和PyTorch,并使用GPU进行神经网络训练的过程。每个步骤的详细说明和可能的问题解决方法,你可以在相应的官方网站找到。在安装和配置过程中,务必确保所有组件的版本兼容性。
测试CPU和GPU计算差异:
运行CPU vs GPU.py代码
import time
import torch
# 定义一个函数来测量时间
def measure_time(device, X):
X = X.to(device)
time_start = time.time()
Z = torch.mm(X, X)
time_end = time.time()
return round((time_end - time_start) * 1000, 2), device
# 检查CUDA是否可用
if torch.cuda.is_available():
gpu_device = 'cuda:0'
else:
print("CUDA is not available. Using CPU instead.")
# gpu_device = 'cpu'
# 计算量较大的任务
X_large = torch.rand((10000, 10000))
cpu_time_large, cpu_device = measure_time('cpu', X_large)
gpu_time_large, gpu_device = measure_time(gpu_device, X_large)
print(f'Large task - CPU time cost: {cpu_time_large}ms on {cpu_device}')
print(f'Large task - GPU time cost: {gpu_time_large}ms on {gpu_device}')
# 计算量很小的任务
X_small = torch.rand((5000, 5000))
cpu_time_small, cpu_device = measure_time('cpu', X_small)
gpu_time_small, gpu_device = measure_time(gpu_device, X_small)
print(f'Small task - CPU time cost: {cpu_time_small}ms on {cpu_device}')
print(f'Small task - GPU time cost: {gpu_time_small}ms on {gpu_device}')
个人笔记本运行结果
Large task - CPU time cost: 2216.92ms on cpu
Large task - GPU time cost: 15.62ms on cuda:0
Small task - CPU time cost: 297.88ms on cpu
Small task - GPU time cost: 1.64ms on cuda:0