news 2026/2/25 4:41:47

PyTorch-2.x入门教程:在Jupyter中运行第一个模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch-2.x入门教程:在Jupyter中运行第一个模型

PyTorch-2.x入门教程:在Jupyter中运行第一个模型

1. 为什么选这个镜像?开箱即用的深度学习起点

你是不是也经历过这样的场景:想跑一个PyTorch模型,结果卡在环境配置上——装CUDA版本不对、pip源太慢、Jupyter打不开、matplotlib报错……折腾两小时,代码还没写一行。

这个叫PyTorch-2.x-Universal-Dev-v1.0的镜像,就是为解决这些问题而生的。它不是从零开始的手动搭建环境,而是基于官方PyTorch底包直接构建的“成品开发舱”:Python 3.10+、CUDA 11.8/12.1双支持(RTX 30/40系、A800/H800全兼容)、预装Pandas/Numpy/Matplotlib/JupyterLab等全套工具链,连Shell都配好了语法高亮和常用别名。

更关键的是——它干净。没有冗余缓存,没有冲突包,没有隐藏的依赖陷阱;阿里云和清华源已默认配置,pip install秒级响应;所有库版本经过实测协同,不会出现“torchvision装不上”或“matplotlib画不出图”的经典崩溃现场。

换句话说:你点开就能写模型,而不是点开先修电脑。

2. 环境验证:三步确认你的GPU真正在工作

别急着写import torch,先花30秒确认硬件和驱动已就绪。很多初学者的“模型不加速”,其实只是GPU根本没被识别。

2.1 终端里敲两行命令,看结果是否“诚实”

打开终端(Terminal),依次执行:

nvidia-smi

你应该看到类似这样的输出(关键看右上角的GPU型号和显存使用):

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================================+======================+======================| | 0 NVIDIA RTX 4090 On | 00000000:01:00.0 On | N/A | | 36% 42C P0 127W / 450W | 212MiB / 24576MiB | 0% Default | +-----------------------------------------------------------------------------+

再执行:

python -c "import torch; print(torch.cuda.is_available())"

如果输出是True,恭喜——你的GPU已被PyTorch成功接管。
如果输出是False,请暂停,检查镜像是否启动时勾选了GPU资源(常见于云平台部署界面),不要往下硬跑CPU版。

小提醒torch.cuda.is_available()返回True≠ 模型一定用GPU。后续代码中必须显式调用.to('cuda'),这点新手极易忽略。

2.2 JupyterLab启动与内核确认

在镜像首页或终端中输入:

jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root

复制终端输出的带token=的完整URL(形如http://127.0.0.1:8888/lab?token=xxx),粘贴进浏览器。进入后,新建一个Python Notebook。

在第一个cell里输入并运行:

import torch print("PyTorch版本:", torch.__version__) print("CUDA可用:", torch.cuda.is_available()) if torch.cuda.is_available(): print("当前设备:", torch.cuda.get_device_name(0))

你会看到类似输出:

PyTorch版本: 2.3.0+cu121 CUDA可用: True 当前设备: NVIDIA RTX 4090

这说明:环境、GPU、Jupyter三者已打通。你可以放心进入下一环节。

3. 写第一个模型:从随机数据到训练完成,不到20行

我们不从MNIST开始,也不加载预训练模型——就用纯随机生成的数据,搭一个最简但完整的训练流程:定义网络、准备数据、前向传播、计算损失、反向传播、更新参数。目的不是做任务,而是看清PyTorch 2.x的“心跳节奏”。

3.1 构建一个极简全连接网络

在新cell中输入以下代码(已适配PyTorch 2.x语法,无过时写法):

import torch import torch.nn as nn import torch.optim as optim import numpy as np # 定义模型:2层全连接,输入10维 → 隐藏层32维 → 输出1维(回归任务) class SimpleNet(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(10, 32) self.layer2 = nn.Linear(32, 1) self.relu = nn.ReLU() def forward(self, x): x = self.relu(self.layer1(x)) x = self.layer2(x) return x # 初始化模型和优化器 model = SimpleNet() optimizer = optim.Adam(model.parameters(), lr=0.01) criterion = nn.MSELoss() # 将模型移到GPU(关键!否则全程CPU跑) if torch.cuda.is_available(): model = model.to('cuda') criterion = criterion.to('cuda')

注意这三处细节:

  • nn.ReLU()是函数式API(F.relu)的模块化写法,更清晰;
  • model.to('cuda')必须在定义完模型后立即执行,且损失函数也要.to('cuda')
  • optim.Adam(...)直接传入model.parameters(),无需手动遍历。

3.2 生成模拟数据并训练5个epoch

继续在同一Notebook中新建cell:

# 生成1000个样本,每个样本10维特征 + 1维标签(随机但有线性关系) X = torch.randn(1000, 10) y_true = (X @ torch.randn(10, 1) + torch.randn(1000, 1) * 0.1) # 加点噪声 # 移到GPU if torch.cuda.is_available(): X, y_true = X.to('cuda'), y_true.to('cuda') # 训练循环 for epoch in range(5): optimizer.zero_grad() # 清空梯度(PyTorch 2.x仍需手动) y_pred = model(X) # 前向传播 loss = criterion(y_pred, y_true) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数 if epoch % 1 == 0: print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

运行后,你会看到类似输出:

Epoch 0, Loss: 1.2483 Epoch 1, Loss: 0.8721 Epoch 2, Loss: 0.5937 Epoch 3, Loss: 0.3825 Epoch 4, Loss: 0.2419

损失持续下降,说明训练正在生效。这不是“Hello World”,而是真实神经网络的呼吸声。

为什么不用DataLoader?
初学阶段,torch.randn生成的数据足够暴露核心流程。等你熟悉了张量流动、梯度计算、设备迁移,再引入Dataset/DataLoader才不会迷失在封装里。

4. 可视化训练过程:用Matplotlib看懂“学习”发生了什么

光看数字不够直观。我们加3行代码,把每轮的loss画出来——这是你第一次“看见”模型在进步。

4.1 收集loss值并绘图

在训练循环上方,新增一个列表记录loss:

loss_history = []

在训练循环内部,print语句前加一行:

loss_history.append(loss.item())

训练结束后,插入新cell:

import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8') # 使用预装的美化样式 plt.figure(figsize=(6, 4)) plt.plot(loss_history, 'o-', label='Training Loss', color='#2E86AB') plt.xlabel('Epoch') plt.ylabel('MSE Loss') plt.title('Model Training Progress') plt.grid(True, alpha=0.3) plt.legend() plt.show()

你会看到一条清晰下降的曲线。这就是你亲手“教”模型的过程——没有黑箱,只有数学和代码。

小技巧:Jupyter中plt.show()可省略,但显式写出更稳妥;plt.style.use('seaborn-v0_8')是镜像预装的美化方案,无需额外安装。

5. 模型保存与加载:让成果不随Notebook关闭而消失

训练完的模型,默认只存在内存里。关掉Jupyter,一切归零。下面教你两行代码永久保存:

5.1 保存模型权重(推荐方式)

# 保存模型状态字典(轻量、安全、跨平台) torch.save(model.state_dict(), "simple_net_weights.pth") print(" 模型权重已保存至 simple_net_weights.pth")

5.2 加载并验证(新开一个Notebook测试)

# 新建Notebook,执行以下代码 import torch from pathlib import Path # 重新定义相同结构的模型 class SimpleNet(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(10, 32) self.layer2 = nn.Linear(32, 1) self.relu = nn.ReLU() def forward(self, x): x = self.relu(self.layer1(x)) x = self.layer2(x) return x # 实例化并加载权重 model = SimpleNet() model.load_state_dict(torch.load("simple_net_weights.pth")) model.eval() # 切换到评估模式 # 测试推理 test_input = torch.randn(1, 10) if torch.cuda.is_available(): test_input = test_input.to('cuda') model = model.to('cuda') with torch.no_grad(): pred = model(test_input) print(" 加载成功,预测输出:", pred.item())

输出类似加载成功,预测输出: -0.4218,说明模型已真正“记住”了学到的知识。

重要区别
torch.save(model.state_dict(), ...)保存的是权重,体积小、安全性高;
torch.save(model, ...)保存整个模型对象,包含类定义,但可能因路径/版本问题加载失败。初学者务必用前者。

6. 常见问题速查:新手踩坑,这里已有答案

刚上手时,90%的问题都高度重复。我们把高频报错和解法浓缩成一张表,按需查阅:

报错信息(部分截取)最可能原因一句话解决
OSError: [Errno 12] Cannot allocate memoryDocker内存不足在云平台设置中将内存调至8GB以上
ModuleNotFoundError: No module named 'torch'未激活正确Python环境检查Jupyter右上角Kernel是否为Python 3 (ipykernel),非conda env或其他
RuntimeError: Expected all tensors to be on the same device输入张量和模型不在同一设备所有tensor.to('cuda')model.to('cuda')必须成对出现
AttributeError: 'NoneType' object has no attribute 'grad'忘记optimizer.zero_grad()在每次loss.backward()前必须清梯度
ImportError: libGL.so.1: cannot open shared object file缺少图形库(Matplotlib绘图报错)镜像已预装opencv-python-headless,确保不调用plt.show(block=True)

终极建议:遇到报错,先复制完整错误信息,搜索关键词(如Expected all tensors to be on the same device),99%能在PyTorch官方论坛或Stack Overflow找到匹配答案。别自己猜,高效复用社区智慧。

7. 下一步学什么?从“能跑”到“会调”的三步跃迁

你现在已具备PyTorch 2.x最核心的工程能力:环境验证、GPU调用、模型定义、训练循环、结果可视化、模型持久化。接下来,建议按此路径渐进:

7.1 第一步:用真实数据替换随机数据

  • 下载一个CSV文件(比如房价预测数据集),用pandas.read_csv()加载;
  • torch.tensor()转成张量,注意dtype=torch.float32
  • 替换训练循环中的Xy_true,观察loss下降是否更“真实”。

7.2 第二步:加入数据加载器(DataLoader)

  • 将数据封装为torch.utils.data.Dataset子类;
  • DataLoader实现自动分batch、shuffle、多进程加载;
  • 对比batch_size=32batch_size=128对训练速度和loss曲线的影响。

7.3 第三步:尝试一个经典小任务

  • torchvision.datasets.MNIST加载手写数字;
  • 修改网络输出为10维,损失函数换成nn.CrossEntropyLoss
  • 加入准确率计算:pred.argmax(dim=1) == y_true
  • 这是你迈向CV领域的第一块路标。

记住:所有复杂模型,都是由你刚刚写的那20行代码生长出来的。不必追求一步到位,每一次run cell的成功,都在加固你对深度学习底层逻辑的信任。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 1:04:44

SGLang使用心得:从安装到上线只需半天时间

SGLang使用心得:从安装到上线只需半天时间 最近在部署几个大模型服务时,反复被推理效率和开发复杂度卡住——要么吞吐上不去,要么写个带JSON输出的API要折腾半天调度逻辑。直到试了SGLang-v0.5.6镜像,整个流程变得异常轻快&#x…

作者头像 李华
网站建设 2026/2/24 12:01:20

如何用GetQzonehistory永久保存你的QQ空间回忆?

如何用GetQzonehistory永久保存你的QQ空间回忆? 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否也曾担心过,那些记录着青春岁月的QQ空间说说,有…

作者头像 李华
网站建设 2026/2/24 4:08:29

7个高效内容解锁工具:破解付费墙限制的全面解决方案

7个高效内容解锁工具:破解付费墙限制的全面解决方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾因突发研究需求却遭遇付费墙而束手无策?当重要新闻…

作者头像 李华
网站建设 2026/2/13 17:49:06

Node-RED Dashboard零代码可视化界面开发从概念到落地

Node-RED Dashboard零代码可视化界面开发从概念到落地 【免费下载链接】node-red-dashboard 项目地址: https://gitcode.com/gh_mirrors/nod/node-red-dashboard Node-RED Dashboard是一款专为Node-RED平台设计的低代码UI构建工具,它允许用户通过拖拽节点的…

作者头像 李华