重生之从零开始的神经网络算法学习之路——第六篇 初识PyTorch(环境搭建和使用GPU计算)

引言

在之前的篇章中,我们已经学习了神经网络的基础理论和数学原理。今天,我们将迈出实践的重要一步——开始使用PyTorch这一强大的深度学习框架,并学习如何利用GPU加速我们的计算任务。

环境准备与远程连接

首先,我们需要一个配备了GPU的服务器环境。我选择使用容器化技术构建了一个包含PyTorch和必要依赖的环境,然后通过VSCODE的Remote-SSH插件进行远程连接。

img
图1:使用VSCODE Remote-SSH插件配置远程连接

连接成功后,我们在VSCODE中打开远程服务器的工作目录,这里将作为我们所有实验文件的存储位置。

img
图2:在VSCODE中打开远程服务器工作目录

环境验证

在开始编写代码前,我们需要确认环境配置正确。首先在终端中输入nvidia-smi命令,检查GPU驱动是否正常加载:

img
图3:使用nvidia-smi检查GPU驱动状态

从上图可以看到,系统正确识别了NVIDIA显卡,并且输出相关信息,这表明GPU环境已经准备就绪。

接下来,我们检查Python环境中的PyTorch是否能正确识别GPU:

import torch
print(torch.__version__)
print(torch.cuda.is_available())

img
图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

img
图5:创建Python脚本文件并编辑代码

我们编写了一个包含以下功能的完整程序:

  1. 数据预处理:使用transforms模块对CIFAR-10数据进行增强和标准化
  2. 模型定义:构建一个包含卷积层、池化层和全连接层的CNN网络
  3. GPU加速:将模型和数据移动到GPU设备上进行计算
  4. 训练循环:实现完整的训练过程,包括前向传播、损失计算和反向传播
  5. 性能对比:增加了CPU和GPU性能对比功能
  6. 可视化:使用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

img
图6:在终端中执行程序

程序运行完成后,使用ll命令查看生成的文件:
可以看到,程序运行后生成了以下文件:

  • best_model.pth:训练过程中验证集上表现最好的模型参数
  • training_curves.png:训练损失和准确率曲线图
  • predictions.png:模型在测试集上的预测结果可视化
  • performance_comparison.png:CPU与GPU性能对比图表
  • runs/目录:包含TensorBoard日志文件

最后,我们可以使用TensorBoard可视化训练过程:

tensorboard --logdir=runs

总结与心得

通过本次实验,我掌握了以下技能:

  1. 远程开发环境配置:使用VSCODE Remote-SSH远程连接服务器进行开发
  2. GPU环境验证:检查驱动状态和PyTorch的CUDA支持
  3. PyTorch基础使用:数据加载、模型定义、训练循环实现
  4. GPU加速计算:如何将模型和数据移动到GPU上进行加速计算
  5. 性能对比分析:量化比较CPU和GPU在深度学习训练中的性能差异
  6. 训练可视化:使用TensorBoard监控训练过程

实际测试中,使用GPU训练相比CPU训练速度提升了4.03倍,这充分体现了GPU在深度学习中的巨大价值。虽然GPU训练的准确率略低于CPU(65.25% vs 66.89%),但这种差异可能在统计误差范围内,且训练速度的大幅提升使得我们可以进行更多的实验和调参。

同时,PyTorch的简洁API设计使得我们可以专注于模型结构而非底层实现,大大提高了开发效率。性能对比功能的加入让我们能够量化硬件加速的效果,为后续的资源分配和优化提供了数据支持。

在接下来的学习中,我将进一步探索更复杂的网络结构,如ResNet、Transformer等,并学习模型部署和优化技术。深度学习之路漫长而有趣,每一步的进步都带来满满的成就感!

posted on 2025-09-04 17:33  cmxcxd  阅读(60)  评论(0)    收藏  举报