前言


PyTorch 是一个由第三方维护的开源深度学习框架,它并不是 Python 标准库的一部分。这一点必须放在最前面说清楚:很多人以为「装完 Python 就能 import torch」,实际不行,必须单独用包管理器安装,而且安装命令和你的操作系统、显卡驱动、Python 版本强相关。


本文的定位是「入门与安装」,不会去讲模型结构设计或训练技巧。本文会讲清三件事:PyTorch 的核心对象是什么、它的安装流程和版本匹配规则、以及最常用的三个组件(张量、模块、数据加载器)各自扮演什么角色。


需要强调的前提:本文作者所在的环境没有安装 PyTorch,也无法安装。因此文中所有代码都是按官方文档的接口写出来的示例,供你复制到自己的环境里运行,本文不声称任何代码被实际执行过。涉及具体参数签名时,一律以 PyTorch 官方文档为准,因为该库迭代较快,接口在不同大版本之间会有调整。


一、PyTorch 里的核心对象:张量(tensor)


PyTorch 的基本数据结构叫张量(tensor)。它可以理解成一个多维数组,和 NumPy 的 ndarray 在形状、索引、广播这些语义上很接近,但多了两个关键能力:



  1. 可以放在 GPU 上。张量有一个「设备(device)」属性,可以是 CPU,也可以是某一块 GPU。

  2. 支持自动求导(autograd)。对张量做运算时,框架会记录运算图,需要时自动算梯度。


这两点是它和普通数组库最本质的区别。下表对照一下张量和 NumPy 数组的关系。




维度NumPy ndarrayPyTorch tensor



数据形状 / 索引语义多维数组多维数组(基本一致)

计算设备仅 CPUCPU 或 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 版本)必须和你的驱动匹配。


大致流程可以拆成四步:



  1. 确认 Python 版本。PyTorch 对 Python 版本有下限要求,老版本 Python 可能没有对应的轮子(wheel)。用 python --version 查看。

  2. 建议在虚拟环境里安装,避免污染系统环境。python -m venv venv 创建,激活后再装。

  3. 用自己的包管理器执行选择器给出的命令。pip 用户大致形如 pip install torch torchvision torchaudio,但带不带后缀、带哪个后缀,必须照抄官网。

  4. 装完用 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 的关键不在记命令,而在「按官网匹配版本」这一条纪律;用起来的关键则在于理解张量、模块、数据管道这三者的分工。把这三样分清楚,后面的模型代码就不容易写乱。




Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐