重生之从零开始的神经网络算法学习之路——第六篇 初识PyTorch(环境搭建和使用GPU计算)
引言
在之前的篇章中,我们已经学习了神经网络的基础理论和数学原理。今天,我们将迈出实践的重要一步——开始使用PyTorch这一强大的深度学习框架,并学习如何利用GPU加速我们的计算任务。
环境准备与远程连接
首先,我们需要一个配备了GPU的服务器环境。我选择使用容器化技术构建了一个包含PyTorch和必要依赖的环境,然后通过VSCODE的Remote-SSH插件进行远程连接。

图1:使用VSCODE Remote-SSH插件配置远程连接
连接成功后,我们在VSCODE中打开远程服务器的工作目录,这里将作为我们所有实验文件的存储位置。

图2:在VSCODE中打开远程服务器工作目录
环境验证
在开始编写代码前,我们需要确认环境配置正确。首先在终端中输入nvidia-smi命令,检查GPU驱动是否正常加载:

图3:使用nvidia-smi检查GPU驱动状态
从上图可以看到,系统正确识别了NVIDIA显卡,并且输出相关信息,这表明GPU环境已经准备就绪。
接下来,我们检查Python环境中的PyTorch是否能正确识别GPU:
import torch
print(torch.__version__)
print(torch.cuda.is_available())

图4:验证PyTorch能够识别并使用GPU
结果显示torch.cuda.is_available()返回True,这意味着PyTorch已经正确配置了CUDA支持,可以充分利用GPU进行计算加速。
编写第一个PyTorch GPU程序
代码实现
代码可以直接拉取,远程仓库代码地址:https://gitee.com/cmx1998/py-torch-learning.git
- 具体文件为PyTorch_CIFAR10_GPU.py
现在,我们开始编写一个完整的PyTorch程序,使用CNN模型对CIFAR-10数据集进行分类。首先创建Python脚本文件:
touch PyTorch_CIFAR10_GPU.py

图5:创建Python脚本文件并编辑代码
我们编写了一个包含以下功能的完整程序:
- 数据预处理:使用
transforms模块对CIFAR-10数据进行增强和标准化 - 模型定义:构建一个包含卷积层、池化层和全连接层的CNN网络
- GPU加速:将模型和数据移动到GPU设备上进行计算
- 训练循环:实现完整的训练过程,包括前向传播、损失计算和反向传播
- 性能对比:增加了CPU和GPU性能对比功能
- 可视化:使用TensorBoard记录训练过程并可视化结果
# 关键代码片段:模型定义和GPU迁移
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
# ... 更多层定义
def forward(self, x):
# ... 前向传播逻辑
return x
# 将模型移动到GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = CNN().to(device)
CPU与GPU性能对比实验
在本次实验中,我特别增加了CPU与GPU性能对比功能,通过实际测试量化GPU加速效果:
# 性能对比函数
def compare_cpu_gpu_performance(num_epochs=3):
"""比较CPU和GPU的训练性能"""
results = []
for device_name in ['cpu', 'cuda']:
# ... 性能对比实现
运行性能对比实验后,得到了以下结果:
- CPU训练:平均每轮59.40秒,测试准确率66.89%
- GPU训练:平均每轮14.74秒,测试准确率65.25%
- 加速比:GPU相对于CPU的加速比为4.03倍
运行程序与结果分析
保存代码后,我们在终端中执行程序:
python3 PyTorch_CIFAR10_GPU.py

图6:在终端中执行程序
程序运行完成后,使用ll命令查看生成的文件:
可以看到,程序运行后生成了以下文件:
best_model.pth:训练过程中验证集上表现最好的模型参数training_curves.png:训练损失和准确率曲线图predictions.png:模型在测试集上的预测结果可视化performance_comparison.png:CPU与GPU性能对比图表runs/目录:包含TensorBoard日志文件
最后,我们可以使用TensorBoard可视化训练过程:
tensorboard --logdir=runs
总结与心得
通过本次实验,我掌握了以下技能:
- 远程开发环境配置:使用VSCODE Remote-SSH远程连接服务器进行开发
- GPU环境验证:检查驱动状态和PyTorch的CUDA支持
- PyTorch基础使用:数据加载、模型定义、训练循环实现
- GPU加速计算:如何将模型和数据移动到GPU上进行加速计算
- 性能对比分析:量化比较CPU和GPU在深度学习训练中的性能差异
- 训练可视化:使用TensorBoard监控训练过程
实际测试中,使用GPU训练相比CPU训练速度提升了4.03倍,这充分体现了GPU在深度学习中的巨大价值。虽然GPU训练的准确率略低于CPU(65.25% vs 66.89%),但这种差异可能在统计误差范围内,且训练速度的大幅提升使得我们可以进行更多的实验和调参。
同时,PyTorch的简洁API设计使得我们可以专注于模型结构而非底层实现,大大提高了开发效率。性能对比功能的加入让我们能够量化硬件加速的效果,为后续的资源分配和优化提供了数据支持。
在接下来的学习中,我将进一步探索更复杂的网络结构,如ResNet、Transformer等,并学习模型部署和优化技术。深度学习之路漫长而有趣,每一步的进步都带来满满的成就感!
浙公网安备 33010602011771号