跳到主要内容

PyTorch 教程

欢迎学习 PyTorch!本教程将带你从零基础开始,逐步掌握深度学习的核心知识和 PyTorch 框架的实战技能。

什么是深度学习?​

在介绍 PyTorch 之前,我们需要先理解什么是深度学习,以及它为什么如此重要。

从机器学习到深度学习​

机器学习是一门让计算机从数据中学习规律的技术。传统的机器学习方法需要人工设计特征,然后使用算法进行分类或回归。例如,识别图片中的猫,需要先设计边缘检测、颜色分布等特征,再用分类器判断。

深度学习是机器学习的一个分支,它的核心思想是让神经网络自动学习特征。通过多层神经网络,深度学习可以从原始数据中逐层提取越来越抽象的特征:第一层可能学习边缘和纹理,第二层学习形状和部件,更高层学习完整的物体概念。

神经网络:深度学习的基础​

神经网络是深度学习的基本模型,灵感来源于人脑神经元的工作方式。一个简单的神经网络由以下部分组成:

神经元(Neuron):接收输入信号,进行加权求和,再通过激活函数输出结果。

y=f(∑iwixi+b)y = f(\sum_{i} w_i x_i + b)

其中 xix_i 是输入,wiw_i 是权重,bb 是偏置,ff 是激活函数。

前向传播(Forward Propagation):数据从输入层经过隐藏层流向输出层的过程。

损失函数(Loss Function):衡量模型预测值与真实值之间的差距。常见的损失函数包括:

  • 均方误差(MSE):用于回归问题
  • 交叉熵损失(Cross-Entropy):用于分类问题

反向传播(Backpropagation):根据损失函数,从输出层向输入层逐层计算梯度,告诉每个参数应该如何调整才能减小损失。

梯度下降(Gradient Descent):使用计算出的梯度更新参数:

wnew=wold−η⋅∂L∂ww_{new} = w_{old} - \eta \cdot \frac{\partial L}{\partial w}

其中 η\eta 是学习率,控制更新步长。

深度学习的应用领域​

深度学习已经深刻改变了众多领域:

领域应用代表技术
计算机视觉图像分类、目标检测、人脸识别CNN、Vision Transformer
自然语言处理机器翻译、文本生成、问答系统Transformer、BERT、GPT
语音识别语音转文字、语音合成RNN、Conformer
推荐系统个性化推荐、广告投放协同过滤、深度推荐模型
自动驾驶环境感知、路径规划多传感器融合、强化学习
医疗健康疾病诊断、药物发现医学图像分析、分子预测

什么是 PyTorch?​

PyTorch 是由 Meta(原 Facebook)AI 研究团队开发的开源深度学习框架。它提供了强大的张量计算能力和动态计算图支持,是目前最流行的深度学习框架之一。

PyTorch 的核心特点​

特点说明
动态计算图支持 Define-by-Run,代码执行时动态构建计算图,调试更方便
Python 优先与 NumPy 无缝集成,代码简洁易读,符合 Python 编程习惯
GPU 加速支持 CUDA,高效利用 GPU 算力,大幅加速训练过程
丰富的生态torchvision、torchaudio、torchtext 等领域扩展库
社区活跃大量预训练模型和开源项目,学术论文主流框架

PyTorch vs TensorFlow​

特性PyTorchTensorFlow
计算图动态图(Eager Execution)静态图(2.x 支持动态)
调试体验原生 Python 调试,断点、打印都可以较复杂,需要特殊技巧
学习曲线较平缓,类似 NumPy 的使用体验较陡峭,概念较多
部署方式TorchScript、ONNX、TorchServeTensorFlow Serving、TFLite
社区定位研究领域主流,学术界首选工业界主流,生产部署成熟
预训练模型Hugging Face Transformers 等TensorFlow Hub

如何选择?

  • 学术研究:PyTorch 是更好的选择,绝大多数顶会论文使用 PyTorch
  • 工业部署:两者都可以,TensorFlow 的部署工具链更成熟
  • 快速原型:PyTorch 的动态图让实验更灵活
  • 移动端部署:TensorFlow Lite 支持更好

PyTorch 技术架构​

┌─────────────────────────────────────────────────────────────┐
│ PyTorch 技术栈 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 应用层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ torchvision │ │ torchaudio │ │ torchtext │ │
│ │ 计算机视觉 │ │ 音频处理 │ │ 文本处理 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ 框架层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ PyTorch Core │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Tensor │ │ Autograd│ │ nn.Module│ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Optim │ │ DataLoader│ │ CUDA │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 编译层(PyTorch 2.x 新增) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ torch.compile (Dynamo + Inductor) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 底层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ ATen │ │ Caffe2 │ │ CUDA │ │
│ │ 张量运算库 │ │ 生产部署 │ │ GPU加速 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

PyTorch 2.x 新特性​

PyTorch 2.0 是一个重要的里程碑版本,引入了 torch.compile 编译技术,显著提升了性能。

torch.compile:一行代码加速模型​

import torch

# 创建模型
model = MyNeuralNetwork()

# 一行代码编译,获得加速
model = torch.compile(model)

# 正常使用,无需修改其他代码
output = model(input)

torch.compile 的工作原理:

  1. TorchDynamo:捕获 PyTorch 程序的动态行为,安全地提取计算图
  2. TorchInductor:将计算图编译成高效的底层代码(Triton 或 C++)
  3. 自动优化:自动应用 kernel fusion、内存优化等技术

性能提升:对于典型模型,torch.compile 可以带来 30%-200% 的加速,无需修改任何模型代码。

其他 PyTorch 2.x 特性​

特性说明
torch.compile编译模型获得加速,支持多种后端
Accelerated Transformers原生优化的 Transformer 注意力实现
金属性能着色器(MPS)Apple Silicon GPU 加速支持
分布式训练增强FSDP、Tensor Parallel 改进
torch.export稳定的模型导出格式

编译模式详解​

import torch

model = MyModel()

# 默认模式:平衡编译时间和执行效率
compiled_model = torch.compile(model)

# 最大优化模式:编译时间更长,但运行更快
compiled_model = torch.compile(model, mode="max-autotune")

# 减少内存模式:降低内存占用
compiled_model = torch.compile(model, mode="reduce-overhead")

# 禁用编译(调试用)
compiled_model = torch.compile(model, mode="default", fullgraph=False)

为什么学习 PyTorch?​

1. 研究领域的主流选择​

PyTorch 在学术研究领域占据主导地位:

  • 顶会论文(NeurIPS、ICML、CVPR 等)中 PyTorch 使用率超过 80%
  • Hugging Face Transformers 默认支持 PyTorch
  • 大量开源项目和预训练模型基于 PyTorch
  • 深度学习课程的首选教学框架

2. 学习曲线平缓​

  • 代码风格接近 NumPy,有 Python 基础的工程师容易上手
  • 动态图让调试变得简单,可以使用 print、断点等常规调试手段
  • 错误信息清晰,便于定位问题
  • 社区文档完善,遇到问题容易找到解决方案

3. 工业界广泛应用​

  • Meta、OpenAI、Tesla、Uber 等公司深度使用
  • 支持生产环境部署(TorchServe、TorchScript)
  • 完善的模型导出和优化工具(ONNX)
  • 云平台原生支持(AWS、GCP、Azure)

4. 生态系统丰富​

  • torchvision:图像模型、数据集、图像增强
  • torchaudio:音频处理、语音模型
  • torchtext:文本处理、词向量
  • PyTorch Lightning:简化训练循环的高级框架
  • Hugging Face:预训练模型库
  • fastai:高级 API,快速原型开发

安装配置​

系统要求​

  • Python 3.8 或更高版本(推荐 3.10 或 3.11)
  • pip 或 conda 包管理器
  • (可选)NVIDIA GPU + CUDA 驱动

安装 PyTorch​

使用 pip 安装(推荐):

# CPU 版本
pip install torch torchvision torchaudio

# GPU 版本(CUDA 11.8)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# GPU 版本(CUDA 12.1)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# GPU 版本(CUDA 12.4)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

使用 conda 安装:

# CPU 版本
conda install pytorch torchvision torchaudio cpuonly -c pytorch

# GPU 版本
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

使用 uv 安装(更快的包管理器):

uv pip install torch torchvision torchaudio

验证安装​

import torch

print(f"PyTorch 版本: {torch.__version__}")
print(f"CUDA 是否可用: {torch.cuda.is_available()}")

if torch.cuda.is_available():
print(f"CUDA 版本: {torch.version.cuda}")
print(f"GPU 数量: {torch.cuda.device_count()}")
for i in range(torch.cuda.device_count()):
print(f"GPU {i}: {torch.cuda.get_device_name(i)}")

# 测试 MPS(Apple Silicon)
if torch.backends.mps.is_available():
print("MPS (Apple Silicon GPU) 可用")

# 简单计算测试
x = torch.randn(1000, 1000)
y = torch.randn(1000, 1000)
z = torch.mm(x, y)
print(f"矩阵乘法测试成功,结果形状: {z.shape}")

开发环境推荐​

Jupyter Notebook / JupyterLab:

pip install jupyterlab
jupyter lab

适合交互式开发和可视化。

VS Code:

  • 安装 Python 扩展
  • 安装 PyTorch Snippets 扩展
  • 支持调试和代码补全

Google Colab:

  • 免费提供 GPU 资源(T4)
  • 适合学习和快速实验
  • 预装 PyTorch 环境

PyCharm:

  • 专业版支持科学模式
  • 良好的调试体验

教程目录​

本教程涵盖从入门到进阶的完整内容:

基础入门​

  • 张量操作 - PyTorch 的核心数据结构,学习创建、索引、运算
  • 自动求导 - 理解计算图和梯度计算原理

神经网络基础​

进阶网络架构​

实用技能​

知识速查​

学习建议​

前置知识​

学习 PyTorch 前需要掌握:

必要基础:

  • Python 编程:变量、函数、类、模块、文件操作
  • NumPy 基础:数组操作、索引、广播机制

推荐了解:

  • 机器学习基础:监督学习、无监督学习、过拟合、正则化
  • 线性代数:矩阵运算、向量空间、特征值
  • 微积分:导数、偏导数、链式法则
  • 概率统计:概率分布、期望、方差

学习路径​

第一阶段:基础入门(1-2 周)
│
├── 环境配置 → 跑通第一个程序
├── 张量操作 → 理解 PyTorch 数据结构
└── 自动求导 → 理解梯度计算原理
│
第二阶段:神经网络核心(2-3 周)
│
├── nn.Module → 构建神经网络
├── Dataset/DataLoader → 数据处理
├── 损失函数与优化器 → 训练模型
└── MNIST/CIFAR 实战 → 完整项目
│
第三阶段:经典架构(3-4 周)
│
├── CNN → 图像分类
├── RNN/LSTM → 序列建模
└── 迁移学习 → 使用预训练模型
│
第四阶段:进阶应用(持续学习)
│
├── 模型优化 → 加速训练、减少显存
├── 模型部署 → 生产环境应用
└── 特定领域 → NLP、CV、推荐等

实践建议​

  1. 动手实践:不要只看代码,每行代码都要亲自敲一遍
  2. 理解原理:不仅要会用 API,还要理解背后的数学原理
  3. 多调参数:改变超参数观察结果,建立直觉
  4. 阅读源码:遇到问题时阅读 PyTorch 源码,理解实现细节
  5. 参与社区:在 GitHub、论坛讨论问题,分享经验
  6. 关注更新:PyTorch 迭代较快,保持学习新特性

常见学习陷阱​

陷阱表现建议
只看不练看完教程觉得懂了,动手就不会每个知识点都写代码验证
跳过基础直接看复杂模型,发现看不懂扎实掌握张量和自动求导
死记 API记忆大量函数用法理解原理,善用文档
忽视调试出错就放弃学会使用调试工具定位问题
过早优化追求性能忽略正确性先保证正确,再考虑优化

深度学习资源推荐​

官方资源​

经典教材​

  • 《动手学深度学习》(Dive into Deep Learning):中文版,理论结合代码,强烈推荐
  • Deep Learning with PyTorch:官方团队编写,深入浅出
  • 《深度学习》(Deep Learning, Ian Goodfellow):深度学习圣经,偏理论

在线课程​

  • Stanford CS231n:计算机视觉经典课程
  • Stanford CS224n:自然语言处理课程
  • fast.ai Practical Deep Learning:实践导向,快速上手

社区资源​

版本说明​

本教程基于 PyTorch 2.x 版本编写。主要版本差异:

版本发布时间主要特性
1.x2017-2022动态图、Eager Execution
2.02023.03torch.compile、性能优化
2.12023.10改进的编译器、分布式增强
2.22024.01进一步性能优化、新后端支持
2.32024.04SDPA 优化、张量并行改进
2.42024.07Python 3.12 支持、延迟加载
2.52024.10cuDNN SDPA 后端、区域编译、FlexAttention
2.62025.01Python 3.13 支持、torch.compiler.set_stance、FP16 CPU

PyTorch 2.5 新特性详解​

PyTorch 2.5 于 2024 年 10 月发布,带来了多项重要改进:

cuDNN 后端加速 SDPA​

SDPA(Scaled Dot-Product Attention)现在可以使用 cuDNN 的 "Fused Flash Attention" 后端。在 NVIDIA H100 GPU 上,这可以比 FlashAttentionV2 快 75%。此加速默认为 H100 或更新 GPU 的 SDPA 用户启用。

import torch
import torch.nn.functional as F

# SDPA 自动使用优化后的后端
query = torch.randn(32, 8, 128, 64, device='cuda')
key = torch.randn(32, 8, 128, 64, device='cuda')
value = torch.randn(32, 8, 128, 64, device='cuda')

output = F.scaled_dot_product_attention(query, key, value)

区域编译(Regional Compilation)​

区域编译允许编译重复的 nn.Module(如 LLM 中的 transformer 层)而无需重复编译,显著减少冷启动时间:

import torch

# 启用区域编译(默认启用)
torch._dynamo.config.inline_inbuilt_nn_modules = True

model = MyTransformerModel()
compiled_model = torch.compile(model)

与完整模型编译相比,区域编译可以减少编译延迟,性能损失仅 1%-5%。

FlexAttention(原型特性)​

FlexAttention 提供了灵活的 API 来实现各种注意力机制(如滑动窗口、因果掩码、PrefixLM):

import torch
from torch.nn.attention.flex_attention import flex_attention

# 实现滑动窗口注意力
def sliding_window_attention(query, key, value, window_size):
# 定义滑动窗口掩码
def sliding_window_mask(b, h, q_idx, kv_idx):
return q_idx - kv_idx <= window_size

return flex_attention(query, key, value, score_mod=sliding_window_mask)

# torch.compile 会自动生成优化的 FlashAttention 内核
compiled_attn = torch.compile(sliding_window_attention)

CPU 后端优化​

TorchInductor CPU 后端获得大幅优化,在 97.5% 的测试模型上超越 eager 模式性能。支持:

  • CPP 后端代码生成
  • FX 融合与自定义 CPU 内核
  • max-autotune 模式的 GEMM 模板

PyTorch 2.6 新特性详解​

PyTorch 2.6 于 2025 年 1 月发布,继续推进 PT2 编译技术:

Python 3.13 支持​

torch.compile 现在支持 Python 3.13,用户可以在最新 Python 版本中优化模型。

torch.compiler.set_stance(Beta)​

新功能允许指定 torch.compile 在不同调用间的行为"姿态":

import torch

model = MyModel()
compiled_model = torch.compile(model)

# 设置姿态:在需要重新编译时使用 eager 模式
torch.compiler.set_stance("eager_on_recompile")

output = compiled_model(input) # 尽可能复用缓存的编译代码

可用姿态包括:

  • default:正常编译行为
  • eager_on_recompile:重新编译时回退到 eager,复用缓存代码
  • fail_on_recompile:重新编译时报错(用于调试)

FP16 支持 X86 CPU​

FP16 数据类型在 X86 CPU 上的支持从原型升级为 Beta 特性,支持 eager 模式和 Torch.compile + Inductor 模式。Intel Xeon 6 处理器的 AMX 加速器原生支持 FP16。

import torch

# 在 CPU 上使用 FP16
x = torch.randn(1000, 1000, dtype=torch.float16)
y = torch.randn(1000, 1000, dtype=torch.float16)
z = torch.mm(x, y) # CPU FP16 矩阵乘法

torch.library.triton_op(Beta)​

提供标准方式创建由用户定义 Triton 内核支持的自定义算子:

import torch
from torch.library import triton_op

@triton_op("my_lib::custom_kernel", mutates_args=())
def my_custom_kernel(x: torch.Tensor) -> torch.Tensor:
# Triton 内核实现
...

# torch.compile 可以优化 Triton 内核
compiled = torch.compile(my_custom_kernel)

AOTInductor 增强​

  • PT2 Archive:新的打包格式,包含 AOTInductor 所需的所有文件
  • Minifier:遇到错误时创建最小化的 nn.Module 复现问题
  • ABI 兼容模式:确保 AOTInductor 编译的模型在新版 PyTorch 上继续运行
重要变更

从 PyTorch 2.6 开始,torch.load 的 weights_only 参数默认值变为 True,这是一个安全性改进。如果需要加载包含非张量数据的检查点,需要显式设置 weights_only=False。

版本兼容性说明:

  • PyTorch 保持较好的向后兼容性
  • 1.x 的代码通常可以在 2.x 运行
  • 建议使用最新稳定版获得最佳性能
  • 注意 PyTorch 2.6 不再发布 Conda 包,请使用 pip 安装

准备好了吗?​

现在你已经了解了深度学习的基础概念和 PyTorch 的核心特性。点击下一章开始你的深度学习之旅,首先我们将学习 PyTorch 的核心数据结构——张量(Tensor)。

记住:深度学习是一门实践性很强的技术,多动手、多思考、多调试,你一定能掌握它!