PyTorch 简介与安装使用指南
前言
PyTorch 是一个由第三方维护的开源深度学习框架,它并不是 Python 标准库的一部分。这一点必须放在最前面说清楚:很多人以为「装完 Python 就能 import torch」,实际不行,必须单独用包管理器安装,而且安装命令和你的操作系统、显卡驱动、Python 版本强相关。
本文的定位是「入门与安装」,不会去讲模型结构设计或训练技巧。本文会讲清三件事:PyTorch 的核心对象是什么、它的安装流程和版本匹配规则、以及最常用的三个组件(张量、模块、数据加载器)各自扮演什么角色。
需要强调的前提:本文作者所在的环境没有安装 PyTorch,也无法安装。因此文中所有代码都是按官方文档的接口写出来的示例,供你复制到自己的环境里运行,本文不声称任何代码被实际执行过。涉及具体参数签名时,一律以 PyTorch 官方文档为准,因为该库迭代较快,接口在不同大版本之间会有调整。
一、PyTorch 里的核心对象:张量(tensor)
PyTorch 的基本数据结构叫张量(tensor)。它可以理解成一个多维数组,和 NumPy 的 ndarray 在形状、索引、广播这些语义上很接近,但多了两个关键能力:
- 可以放在 GPU 上。张量有一个「设备(device)」属性,可以是 CPU,也可以是某一块 GPU。
- 支持自动求导(autograd)。对张量做运算时,框架会记录运算图,需要时自动算梯度。
这两点是它和普通数组库最本质的区别。下表对照一下张量和 NumPy 数组的关系。
| 维度 | NumPy ndarray | PyTorch tensor |
|---|
| 数据形状 / 索引语义 | 多维数组 | 多维数组(基本一致) |
| 计算设备 | 仅 CPU | CPU 或 GPU |
| 是否记录梯度 | 否 | 可选,默认对浮点张量开启 |
| 与对方转换 | 用 torch.from_numpy 接收 | 用 .numpy() 转回 |
| 主要用途 | 通用数值计算 | 深度学习训练与推理 |
一个最基本的张量示例:
# 适用于 Python 3.8+(需要先安装 torch)
import torch
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
print(x.shape) # torch.Size([2, 2])
print(x.dtype) # torch.float32
print(x.device) # 默认在 CPU 上
y = x * 2 + 1 # 逐元素运算
print(y)判断当前环境是否能用 GPU,官方提供了查询接口:
# 适用于 Python 3.8+(需要先安装 torch)
import torch
print(torch.cuda.is_available()) # 没有可用的 CUDA 环境时返回 False
print(torch.cuda.device_count()) # 可用的 GPU 数量二、安装流程与版本匹配
安装 PyTorch 的正确姿势只有一条:打开官方网站的「安装命令选择器」,按你的系统、包管理器、语言、计算平台各选一项,把它生成的那一行命令原样复制到终端执行。 不要凭记忆手敲参数,也不要用第三方镜像给的固定命令,因为计算平台(CPU / 各种 CUDA 版本)必须和你的驱动匹配。
大致流程可以拆成四步:
- 确认 Python 版本。PyTorch 对 Python 版本有下限要求,老版本 Python 可能没有对应的轮子(wheel)。用
python --version查看。
- 建议在虚拟环境里安装,避免污染系统环境。
python -m venv venv创建,激活后再装。
- 用自己的包管理器执行选择器给出的命令。pip 用户大致形如
pip install torch torchvision torchaudio,但带不带后缀、带哪个后缀,必须照抄官网。
- 装完用
python -c "import torch; print(torch.__version__)"验证能否导入。
关于 CPU 版与 GPU 版,有几条经验性的差异值得提前知道:
| 项目 | CPU 版 | GPU 版(CUDA) |
|---|
| 体积 | 较小 | 明显更大,因为打包了 CUDA 运行库 |
| 依赖 | 无额外驱动要求 | 需要匹配的显卡驱动与 CUDA 运行时 |
| 适用场景 | 学习、推理小模型 | 需要 GPU 加速的训练 |
| 装错症状 | 能用但 cuda.is_available() 为 False | 导入报驱动 / 动态库相关错误 |
如果只是学习语法和小规模练习,安装 CPU 版完全够用,而且下载量小、出错概率低。等到确实要用 GPU 时再重装。
三、三个核心组件的角色
张量:数据的载体
前面已经说过,张量是数据的容器。网络里的输入、权重、中间激活值、输出,全都是张量。
nn.Module:模型与层的基类
torch.nn.Module 是所有神经网络模块的基类。你自定义一个模型,标准写法是继承它,在 __init__ 里声明要用到的子层,并实现 forward 方法描述前向计算。框架会在你「调用」模型实例时自动去调 forward——注意是调用实例本身,不是显式写 model.forward(x)。
# 适用于 Python 3.8+(需要先安装 torch)
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self, in_features, out_features):
super().__init__()
self.fc = nn.Linear(in_features, out_features)
def forward(self, x):
return self.fc(x)
model = Net(4, 2)
print(model(torch.randn(1, 4)).shape) # 输出形状 torch.Size([1, 2])nn.Linear 是一个全连接层,参数是输入特征数和输出特征数;它的权重会被自动登记到模块里,所以 model.parameters() 能枚举到它们,优化器才能更新它们。这就是「继承 nn.Module」的意义:让框架知道哪些张量是模型的一部分。
DataLoader:批量喂数据的管道
训练时你很少一次把整个数据集塞进去,而是分成小批次(batch)反复迭代。torch.utils.data.DataLoader 就是干这个的:它把 Dataset(负责「按索引取一条样本」)包装成可迭代对象,负责分批、打乱、并行加载。
# 适用于 Python 3.8+(需要先安装 torch)
from torch.utils.data import Dataset, DataLoader
class Squares(Dataset):
def __init__(self, n):
self.n = n
def __len__(self):
return self.n
def __getitem__(self, idx):
return idx, idx * idx
loader = DataLoader(Squares(10), batch_size=4, shuffle=False)
for batch in loader:
print(batch)你需要自己实现的只有 Dataset 的两个方法:__len__ 返回样本总数,__getitem__ 按索引返回一条样本。其余的分批逻辑交给 DataLoader。
常见坑点
1. 以为 PyTorch 是 Python 自带的。
- ❌ 直接写
import torch后发现 ModuleNotFoundError,然后怀疑 Python 装坏了。
- ✅ 明确它属于第三方包,先确认已按官方命令安装,再在装它的那个解释器里导入。
2. 忘记用虚拟环境,多个项目互相打架。
- ❌ 全局
pip install一切,A 项目要 CUDA 版、B 项目要 CPU 版,结果互相覆盖。
- ✅ 每个项目建独立虚拟环境:
python -m venv venv,激活后再安装。
3. CUDA 版本和显卡驱动不匹配。
- ❌ 看到某个教程写着
cu121就照抄,结果驱动太旧装完报错。
- ✅ 用官网选择器,按你当前驱动支持的 CUDA 版本挑选项,再复制它给的命令。
4. 装成 CPU 版却以为是 GPU 版。
- ❌ 训练时发现慢,以为代码写错了。
- ✅ 装完先跑
torch.cuda.is_available(),为False就说明当前环境用不了 GPU。
5. 手敲安装命令,参数记错。
- ❌ 凭印象写出一串 index-url 参数,拼错了却不知道。
- ✅ 一律从官网选择器复制,不自己拼。
6. 混用 conda 与 pip 装同一个包。
- ❌ 一半用 conda 装、一半用 pip 装,环境里出现两份不一致的库。
- ✅ 在一个环境里固定用同一种包管理器,按官方推荐的组合来。
7. 调用模型时显式写 .forward()。
- ❌
model.forward(x),绕过了框架为调用实例准备的钩子机制。
- ✅ 直接
model(x),把forward留给框架去调。
8. 忽略 torch 与 torchvision 的版本配套。
- ❌ 两个包版本随便装,运行时报接口不兼容。
- ✅ 按官网选择器一次性给出的一组命令安装,配套版本由官网保证。
总结
| 要点 | 结论 |
|---|
| 性质 | 第三方库,非标准库,需单独安装 |
| 安装依据 | 以 PyTorch 官方文档 / 官网选择器为准 |
| 核心数据结构 | 张量(tensor),可上 GPU、可自动求导 |
| 模型基类 | nn.Module,实现 __init__ 与 forward |
| 数据管道 | Dataset + DataLoader,前者取样本、后者做分批 |
| CPU 与 GPU | 按需选择,学习阶段 CPU 版更省事 |
安装 PyTorch 的关键不在记命令,而在「按官网匹配版本」这一条纪律;用起来的关键则在于理解张量、模块、数据管道这三者的分工。把这三样分清楚,后面的模型代码就不容易写乱。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)