Skip to main content

PyTorch

PyTorch 是一个开源的深度学习框架,由 Facebook AI Research 开发,广泛应用于学术研究和工业界。

安装

自动安装

访问官网选择配置: https://pytorch.org/get-started/locally/

手动安装 GPU 版本

下载地址: https://download.pytorch.org/whl/torch/ 需要下载三个包(注意 Python 版本和 CUDA 版本):
  • torch-2.4.1+cu124-cp312-cp312-win_amd64.whl
  • torchvision-0.19.1+cu124-cp312-cp312-win_amd64.whl
  • torchaudio-2.4.1+cu124-cp312-cp312-win_amd64.whl

验证安装

基础概念

Tensor 张量

自动求导

构建神经网络

简单模型

卷积神经网络

训练模型

先测量,再优化训练

GPU 利用率高,不代表训练高效。NVIDIA 的 GPU 利用率衡量的是采样时间里有 kernel 执行的比例,不是达到峰值算力的比例。Databricks 的一个 Qwen 微调案例在基线平均利用率已达 98% 时,仍把训练时间缩短到约六分之一。这是特定任务的案例,不是你的模型也能提速六倍的承诺。

采集短窗口 CPU/GPU trace

用 torch.profiler 查看算子数量、CPU 调度、设备执行和 kernel 之间的空隙。下面是一个独立的小例子,需要已安装 PyTorch;有 CUDA 时记录 GPU,否则只记录 CPU。它不下载模型或数据,会在当前目录写出一份 trace。
这个 schedule 跳过一步、预热 profiler 一步,再记录三步。真实任务要调整采样窗口,覆盖有代表性的阶段;profiler 预热不等于编译和模型启动已经完成。示例输入已在设备上,因此没有测量数据加载和主机到设备的复制。接入真实循环时,也应为这些阶段设置采样范围。分布式运行时,每个 rank 使用不同的 trace 文件名。 Trace、shape 记录和可选的内存分析都会增加开销。用 trace 定位瓶颈,再关闭 profiler 单独测吞吐。CUDA 是异步执行的:测墙钟耗时时,在计时开始前和结束前同步相关设备,而不是每轮内部都强制同步。不要把嵌套 CPU 耗时与重叠 GPU 耗时相加后,当作实际总时长。

按瓶颈选优化手段

Modal 的 GPU 术语手册把工作分为计算、内存搬运和其他开销。先把它们当作假设,再通过时间线或设备 profiler 验证: Databricks 案例中,已有的 flash-linear-attention 和 causal-conv1d 内核消除了大量小算子,减少 padding 又带来额外收益。这不代表这些包适合所有模型,也不代表编译和 CUDA Graphs 普遍不适合分布式训练。 启用快路径前,核对模型/后端支持、GPU 架构、PyTorch/CUDA 兼容性,以及前向和反向是否都已实现。固定可用的环境,并在 trace 中确认目标 kernel 真的出现:安装成功不等于正在使用。用适当的数值容差,与参考路径对照 loss 和梯度。

打包序列时保留训练语义

序列打包能减少 padding,但直接拼接样本可能改变训练语义。只重置 position_ids 不是通用的样本隔离机制。 模型和注意力后端必须支持相应的边界元数据或 mask;混合循环层还需要在样本边界隔离状态。 固定版本的 Databricks 实现同时使用了重置后的 position_ids、供完整注意力使用的累计序列长度、供 gated-delta 层使用的分段 ID,以及防止移位后的目标跨样本计算 loss 的掩码;response-only SFT 还会屏蔽 prompt token。这些都是后端相关输入,不能原样照搬到任意模型。 测速度之前,先对照打包与未打包样本,覆盖边界和截断情况。记录非 padding tokens/s、padding 占比、有效 batch size、序列长度分布与验证集质量。打包改变每次优化器更新的 token 数时,还要考虑 batch 与优化调度的变化。比较等量训练工作,并把冷启动/编译耗时与稳态吞吐分开报告。

数据加载

Dataset 和 DataLoader

图像数据增强

保存和加载模型

Jupyter Notebook 配置

创建 PyTorch 专用内核:
参考: https://blog.csdn.net/ccaoshangfei/article/details/126521809

常用技巧

设置随机种子

查看模型结构

冻结部分层

参考资料

学习资源

最后修改于 2026年10月15日