云镜收藏

稍后阅读

清单保存在当前浏览器,方便下次回来继续阅读。

清单还是空的

在笔记卡片或正文页点击“加入稍后阅读”即可收藏。

展开课程与本章目录
12 章学习路线01零基础准备:Python、NumPy 与正确安装02起步:环境、设备与第一枚 Tensor03张量基本功:索引、广播与线性代数04自动求导:从计算图到反向传播05神经网络工程:Module、损失与训练循环06数据管线:Dataset、DataLoader 与批处理07亲手搭 Transformer:从 Embedding 到注意力08稳定训练:初始化、AMP、裁剪与排错09性能与显存:Profiler、compile 与检查点10分布式训练:从 DDP 到 FSDP 与 TP11大模型生态:Transformers、PEFT、torchao 与 TorchTitan12方向实战:训练并优化一个迷你语言模型本章课程01只学够用的 Python:变量、函数、容器与循环02NumPy 到 Tensor:先理解数组再理解框架03按机器安装 PyTorch,并读懂 CUDA 版本

第 01 章 · 入门

零基础准备:Python、NumPy 与正确安装

只补后续课程真正会用到的 Python 与 NumPy,并学会按自己的机器选择 PyTorch、判断 CUDA 是否可用。

3 节课程校订于 2026年8月31日
PythonNumPy安装CUDA

预计用时70 分钟

前置知识无需编程基础

完成标准能读懂后续 Python 示例 · 能选择正确 PyTorch 安装方式 · 能报告 CUDA 环境

本章进度0 / 3

只学够用的 Python:变量、函数、容器与循环

本节目标

读懂后续教程中的 Python 变量、函数、列表、字典、循环和类型提示,并能修改一个训练配置。

清晰讲解

PyTorch 代码仍然是 Python。零基础阶段不需要先学完整语法,只要掌握四类东西:用变量保存配置,用函数封装步骤,用列表或字典组织数据,用循环重复训练。缩进表示代码块,冒号后的下一行必须缩进。

代码示例

config = {"epochs": 3, "learning_rate": 1e-3}
losses = [1.2, 0.8, 0.5]

def summarize(values: list[float]) -> float:
    return sum(values) / len(values)

for epoch, loss in enumerate(losses, start=1):
    print(f"epoch={epoch}/{config['epochs']} loss={loss:.2f}")
print("mean loss:", summarize(losses))

运行结果与观察

程序应打印 3 行 epoch/loss 和均值 0.8333...。把 epochs 改成 4 并不会凭空增加一条 loss,借此区分“配置”和“真实数据”。

常见错误

  • 混用 Tab 与空格导致缩进错误;把字典键写成未定义变量;误以为类型提示会在运行时自动转换数据。
  • 一次背大量语法,却不能解释训练循环里每个变量的生命周期。

与大模型方向的连接

真实训练脚本会把模型、数据、并行和优化器参数放进嵌套配置;先会读配置,才能安全修改大模型配方。

动手练习

给配置增加 batch_size,并打印 epochs × batch_size 表示的样本槽位数。

查看参考答案与验收点

验收:代码可运行,输出符合本节记录,并能说明“只学够用的 Python:变量、函数、容器与循环”中的关键语法、依赖或设备信息。

官方资料


NumPy 到 Tensor:先理解数组再理解框架

本节目标

掌握数组的形状、轴、切片和向量化,理解 NumPy 与 PyTorch 的相同点和边界。

清晰讲解

NumPy 数组与 Tensor 都用 shape 描述多维数据,也都支持广播和切片。Tensor 额外提供加速器设备与自动求导。数据清洗阶段常使用 NumPy,进入模型前再转换为 Tensor。

代码示例

import numpy as np
import torch

array = np.arange(12, dtype=np.float32).reshape(3, 4)
tensor = torch.from_numpy(array)
print("shape:", array.shape, tensor.shape)
print("column mean:", tensor.mean(dim=0))
array[0, 0] = 99
print("shared value:", tensor[0, 0].item())

运行结果与观察

两者 shape 都是 (3, 4),列均值输出 4 个数;修改 NumPy 后 Tensor 首项也变为 99,说明 from_numpy 在 CPU 上共享底层内存。

常见错误

  • 不理解轴就反复试 dim;共享内存时意外修改原始数据;把 NumPy 数组直接送入 CUDA 模型。
  • 用 Python 双重循环替代向量化运算,导致数据预处理很慢。

与大模型方向的连接

分词结果、评测指标和离线数据分析经常在 NumPy、Arrow 与 Tensor 之间流转,边界上的复制与 dtype 会影响内存和速度。

动手练习

计算每一行的均值,并验证输出 shape 是 [3] 而不是 [4]

查看参考答案与验收点

先把每个轴写成语义:例如 [B,T,C] 分别是批次、序列和隐藏维;再用 assert tensor.shape == (...) 固化预期。

官方资料


按机器安装 PyTorch,并读懂 CUDA 版本

本节目标

从官方安装选择器获得正确命令,并能区分显卡驱动、PyTorch 自带 CUDA runtime 与本地 toolkit。

清晰讲解

安装命令会随操作系统、Python 版本和计算平台变化,因此教程不应硬编码一个“永远正确”的 CUDA 命令。进入官方选择器,依次选择系统、pip、Python 和 CPU/CUDA;没有 NVIDIA GPU 时选 CPU。多数预编译 PyTorch wheel 自带所需 CUDA runtime,本地 nvcc 主要在编译自定义扩展时才重要。

代码示例

import torch

print("PyTorch:", torch.__version__)
print("CUDA available:", torch.cuda.is_available())
print("wheel CUDA runtime:", torch.version.cuda)
if torch.cuda.is_available():
    print("GPU:", torch.cuda.get_device_name(0))
    x = torch.randn(1024, 1024, device="cuda")
    print("allocated MiB:", torch.cuda.memory_allocated() / 1024**2)
else:
    print("当前走 CPU 路径;这不是安装失败。")

运行结果与观察

CPU 安装应显示 CUDA available: False 和 CPU 提示;CUDA 安装且驱动可用时应打印显卡名称。torch.version.cuda 为空只说明安装的是 CPU wheel。

常见错误

  • 看到 nvidia-smi 就认定当前 Python 环境能用 CUDA;在旧博客里复制不匹配的 wheel 地址;同时混用多个 Python 环境。
  • nvcc --version、驱动支持上限和 wheel runtime 当成同一个版本。

与大模型方向的连接

混合精度、FlashAttention、FSDP 与量化都有硬件和版本边界;先准确报告环境,才谈得上复现实验。

动手练习

把版本检查输出保存为文本,并写出你机器的 Python、PyTorch、CUDA 可用性与显卡名称。

查看参考答案与验收点

验收:代码可运行,输出符合本节记录,并能说明“按机器安装 PyTorch,并读懂 CUDA 版本”中的关键语法、依赖或设备信息。

官方资料

章末资料

小测、项目与相关面试题

1. 类型提示会自动把字符串转换成浮点数吗?

不会。类型提示主要服务阅读和静态检查,运行时仍需显式转换。

2. nvidia-smi 正常是否等于当前 Python 能用 CUDA?

不等于,还要确认当前环境装的是 CUDA wheel,且 torch.cuda.is_available() 为 True。