大模型基础知识练习
🧠 第一部分:PyTorch & CNN 核心知识点总结
--------------
训项目三 搭建 GPU 加速的 PyTorch 环境并测试运行
一、实训目的
通过综合运用系统配置、软件安装与调试等技能,独立完成支持 GPU 加速的 PyTorch
深度学习开发环境的完整搭建与验证,形成解决深度学习环境配置与依赖问题的工程实践
能力,培育严谨细致、自主排错、规范操作的职业素养。
二、实训内容
1. 安装 Anaconda,创建并激活独立的 Python 虚拟环境。
2. 根据本机显卡型号,查询并安装对应版本的 CUDA 驱动及 cuDNN 库。
3. 在虚拟环境中,通过 pip 或 conda 命令安装适配的 PyTorch(GPU 版本)及常用工具
库。
4. 编写 测 试 脚 本 , 验 证 PyTorch 是否 正 确 安 装 , 并 检 测 GPU 是否 可 用
(torch.cuda.is_available())。
5. 运行一个简单的 GPU 加速的张量计算示例,对比 CPU 与 GPU 的运行速度。
三、实训仪器、设备
硬件:PC 微型计算机、CPU I5-8300H 及以上、GPU GTX1650 及以上、内存 8G
及以上、硬盘 512G 及以上
软件:Python、Anaconda、Pytorch 等
四、实训步骤
1. 软硬件依赖环境构建
2. 开发项目构建
3. 代码测试
五、实训报告要求
上机结束后,整理出实训报告。实训报告应包括:题目、代码、运行结果以及对本次
实训所作的分析与总结。
六、实训注意事项
一人一组,独立上机调试,上机时出现的问题,最好独立解决。
七、思考题
简述深度学习环境的基本要求有哪些方面。
在本次实训中,你需要掌握以下四个核心模块的原理与代码实现:
1. 设备管理与环境配置 (Device)
-
可用性检测:通过
torch.cuda.is_available()动态检测环境是否支持 GPU(CUDA)。在安装了纯 CPU 版本的 PyTorch 时,该函数返回False。 -
设备兼容代码:标准写法为
device = torch.device("cuda" if torch.cuda.is_available() else "cpu"),这保证了代码在没有显卡时能自动回退到 CPU 运行。 -
数据迁移:在进行前向传播前,必须使用
.to(device)方法将“模型”和“输入数据(images, labels)”移动到同一个计算设备上,否则会引发报错。
2. 数据加载机制 (DataLoader)
-
Windows 环境特性:在 Windows 操作系统中,为了避免多进程创建引发的错误(如 BrokenPipeError),必须将 DataLoader 的
num_workers参数设置为 0。 -
批处理 (Batch Size):不能为了减小内存占用将
batch_size设为 1,否则会退化为纯随机梯度下降,导致训练速度极慢且损失震荡难以收敛。
3. SimpleCNN 模型架构 (针对 MNIST 数据集)
-
特征提取层 (Conv2d + ReLU + MaxPool2d):
-
第一层:输入通道 1(灰度图),输出通道 16。
-
第二层:输入通道 16,输出通道 32。
-
-
分类器 (Linear):
-
输入维度动态计算:28x28 图像经两次 $2 \times 2$ 池化变为 7x7。展平后维度为 32 * 7 * 7。
-
输出维度:由于 MNIST 是 0-9 的数字分类,最终必须输出 10 个类别的得分。
-
4. 训练流程与性能评估
-
核心七步:取数据 $\rightarrow$ 移至设备 $\rightarrow$ 清零梯度 (
optimizer.zero_grad()) $\rightarrow$ 前向传播 $\rightarrow$ 计算损失 (nn.CrossEntropyLoss()) $\rightarrow$ 反向传播 $\rightarrow$ 更新参数 (optimizer.step())。 -
性能对比:GPU 拥有海量核心,擅长 CNN 中的大规模矩阵并行计算,训练速度通常比 CPU 快 10倍以上。
-
实训指标:在 CPU 环境下,使用 Adam 优化器(学习率 0.001)训练 5 个 Epoch 耗时约 93.4 秒,测试集准确率达到 98.89%,且训练 Loss 随 Epoch 增加呈下降趋势。
📝 第二部分:原始试题
单项选择题(每题4分)
1. 根据实训报告中的代码逻辑,当检测到CUDA不可用时,程序最终使用的计算设备(device)是什么?
A. cuda
B. gpu
C. cpu
D. auto
2. 在构建 SimpleCNN 模型时,第一个卷积层(Conv2d)的输入通道数和输出通道数分别是多少?
A. 输入16,输出32
B. 输入1,输出16
C. 输入1,输出32
D. 输入16,输出128
3. 实训报告中提到,在Windows环境下配置 DataLoader 时,num_workers 参数建议设置为多少以避免潜在问题?
A. 1
B. 4
C. 0
D. -1
4. 根据实训运行结果,在CPU环境下训练5个epoch后,测试集上的准确率为多少?
A. 93.40%
B. 98.89%
C. 85.50%
D. 99.99%
5. 实训报告中指出,若使用GPU版本的PyTorch,预计训练速度相比当前CPU版本能提速多少倍?
A. 2-3倍
B. 4-5倍
C. 10倍以上
D. 无显著提升
多项选择题(每题6分)
6. 根据实训报告中的代码与原理,关于PyTorch中张量和模型在CPU与GPU之间的迁移及操作,下列说法正确的有哪些?
A. 使用 .to(device) 方法可以将张量和模型移动到指定的设备(如GPU或CPU)
B. 如果 torch.cuda.is_available() 返回 False,则代码会自动回退使用 CPU 进行计算
C. 在训练循环中,必须将输入图像 images 和标签 labels 都移动到 device 上才能进行计算
D. PyTorch 的 CPU 版本无法加载 torchvision 库中的数据集
7. 在构建的 SimpleCNN 模型中,关于网络结构的设计,下列描述符合代码实现的有哪些?
A. 模型包含两个卷积层,分别将通道数从1增加到16,再从16增加到32
B. 每个卷积层后都紧跟一个 ReLU 激活函数和一个 MaxPool2d 最大池化层
C. 全连接层的输入维度是根据卷积层输出特征图的大小动态计算的,即 3277
D. 分类器部分包含两个线性层,最终输出10个类别的得分
8. 根据实训结果与分析,关于本次在MNIST数据集上的训练表现,下列结论正确的有哪些?
A. 经过5个Epoch的训练,模型在测试集上的准确率达到98.89%
B. 随着训练Epoch的增加,训练损失(Loss)呈现逐渐下降的趋势
C. 由于使用的是CPU版本,训练耗时较长,5个Epoch耗时约93.4秒
D. 模型在第一个Epoch结束时就已经达到了最终的测试准确率
9. 在配置深度学习环境及运行代码时,根据实训注意事项和原理,下列哪些做法或建议是正确的?
A. CUDA版本必须与PyTorch版本匹配,否则可能导致GPU无法调用
B. 在Windows操作系统上,建议将 DataLoader 的 num_workers 参数设为0以避免进程创建问题
C. 深度学习硬件基本要求中,GPU显存建议至少4GB,内存建议至少16GB
D. 为了加速训练,应该将 batch_size 设置为1以减小内存占用
10. 关于代码中使用的优化器和损失函数,下列说法正确的有哪些?
A. 使用了 Adam 优化器,学习率设置为 0.001
B. 损失函数使用了 nn.CrossEntropyLoss,适用于多分类任务
C. 在每次反向传播前,需要调用 optimizer.zero_grad() 来清零梯度
D. 模型在测试阶段(model.eval())也需要调用 optimizer.step() 来更新参数
填空题(每题4分)
11. 在实训代码中,检测GPU是否可用的函数是________,将模型移动到指定设备(如GPU)的方法是使用________方法。
12. 本次实训安装的PyTorch版本为________,由于安装的是CPU版本,因此CUDA是否可用的结果为________。
13. 实训中构建的CNN模型类名为________,在训练循环中,用于计算预测值与真实值之间差异的损失函数是________。
14. 在Windows系统上进行数据加载时,DataLoader中的num_workers参数建议设置为________,本次实训共进行了________个Epoch的训练。
15. 实训结果显示,在MNIST数据集上训练5个Epoch后,测试准确率为________%,训练总耗时为________秒。
简答题(每题10分)
16. 简述在PyTorch中如何检测GPU是否可用,并说明若CUDA不可用时代码是如何处理设备选择的?
17. 说明SimpleCNN模型的结构组成,并解释为何在训练前需要将模型和数据移动到指定设备?
18. 简述在MNIST数据集训练过程中,一个Epoch内的主要训练步骤,并分析实训中CPU版本训练耗时较长的原因。
💡 附:参考答案对照表
-
单选题:1.C | 2.B | 3.C | 4.B | 5.C
-
多选题:6.ABC | 7.ABCD | 8.ABC | 9.ABC | 10.ABC
-
填空题:
-
-
torch.cuda.is_available();.to()(或to(device))
-
-
-
CPU版本(或对应具体版本号) ;False
-
-
-
SimpleCNN;nn.CrossEntropyLoss()(或 交叉熵损失)
-
-
-
0;5
-
-
-
98.89;93.4
-
-
-
简答题:(核心采分点请参考上半部分的“核心知识点总结”第1、3、4模块)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)