PyTorch基础

Torch基础

1. torch

  • 就是 PyTorch 框架本体
  • 提供深度学习的核心功能:
    • 张量(Tensor)计算(类似 NumPy,但支持 GPU)
    • 自动微分(autograd,方便训练神经网络)
    • 优化器(SGD、Adam 等)(torch.optim
    • GPU 加速(CUDA / cuDNN)
    • 神经网络模块(torch.nn)
    • 数据加载器(torch.utils.data)

👉 举例:

import torch

 

x = torch.rand(3, 3)   # 随机矩阵

y = torch.ones(3, 3)   # 全1矩阵

z = x + y              # 张量运算

print(z)

 

# 自动求导

z.requires_grad_(True)

loss = z.sum()

loss.backward()

2. torchvision

  • PyTorch 的 视觉扩展库,主要用于 图像和视频处理,偏向 基础功能 和 经典模型。
  • 提供:
    • 常用 数据集(CIFAR10, ImageNet, COCO 等)
    • 图像变换(裁剪、缩放、归一化等)数据增强torchvision.transforms(随机裁剪、旋转、翻转…)
    • 预训练模型(ResNet, VGG, EfficientNet, ViT, DETR、AlexNet、MobileNet 等)
    • 图像 I/O:读写、处理图像(torchvision.io)

from torchvision import datasets, transforms, models

 

# 加载 CIFAR10 数据集

transform = transforms.Compose([

    transforms.Resize((224, 224)),

    transforms.ToTensor()

])

trainset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)

 

# 加载预训练 ResNet18

model = models.resnet18(pretrained=True)

3. torchaudio

  • PyTorch 的 音频扩展库,主要用于 语音和音频处理
  • 提供:
    • 常见 音频数据集(LibriSpeech, YESNO 等)
    • 信号处理工具(STFT,梅尔谱,MFCC 特征提取)
    • 预训练模型(Wav2Vec2, HuBERT, Whisper 等)

import torchaudio

 

waveform, sample_rate = torchaudio.load("example.wav")  # 读音频文件

print(waveform.shape, sample_rate)

 

# 提取梅尔频谱特征

mel_spectrogram = torchaudio.transforms.MelSpectrogram()(waveform)

print(mel_spectrogram.shape)

📌 总结对比

主要功能

适用领域

torch

深度学习核心框架(张量、训练、GPU、自动微分)

通用(NLP, CV, Audio, RL 等)

torchvision

计算机视觉扩展(数据集、预处理、模型库)

图像 / 视频

torchaudio

语音与音频扩展(数据集、特征提取、模型库)

语音 / 音频

 

安装注意事项清单:


1. 版本要对应

这三个库必须和 PyTorch 本身的版本对应。
👉 举例(官方匹配表):

  • torch==2.2.0+cu121
  • torchvision==0.17.0+cu121
  • torchaudio==2.2.0+cu121

如果版本不匹配,会报错,比如:

  • ImportError: DLL load failed(Windows 下常见)
  • undefined symbol(Linux 下常见)

📌 建议:
去 PyTorch 官网安装指令生成器:https://pytorch.org/get-started/locally/

2. CUDA 版本要对应

  • 如果你想用 GPU 加速,torch 编译时绑定的 CUDA 版本必须和你电脑的 CUDA 驱动匹配。
  • 比如:
    • 你电脑安装了 CUDA 12.4 驱动
    • 就应该安装 torch==2.3.1+cu124
  • 如果 CUDA 版本太旧(例如 10.1),只能装比较老的 PyTorch(比如 1.7.x)。

📌 检查方法:

nvcc --version       # 查看 CUDA 编译器版本

nvidia-smi           # 查看驱动支持的 CUDA 最高版本

3. CPU vs GPU

如果你的显卡太老(比如 Quadro K2200 只支持 CUDA 11.2 左右),
就可能跑不动新版本的 PyTorch,这时可以:

  • 安装 CPU 版本(不会用 GPU,装起来最简单):

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

或者装一个老版本,匹配你的 CUDA。

国内网络问题

  • 在国内装 PyTorch 可能会下载失败(国外源太慢)。
  • 建议使用清华源 / 阿里源 / 中科大源:

pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple

 

transformer 是什么

  • Transformer 是一种 模型架构,最早由 2017 年《Attention is All You Need》提出。
  • 它的核心思想是 自注意力(Self-Attention),用来处理序列数据(文本、语音、时间序列、甚至图像)。
  • 现在 GPT、BERT、LLM、Vision Transformer(ViT) 等,都是 Transformer 家族。

👉 Transformer 是一个建筑设计图

  • torch 提供工具(张量、层、优化器、训练循环…)
  • transformer 用这些工具搭出来

举个比喻:

  • torch = 乐高积木
  • transformer = 用乐高搭出来的一种“机器人模型”
  • 你也可以用 torch 搭 CNN、RNN,不一定非得是 transformer。

 

你可以用 PyTorch 自己写 Transformer,比如:

import torch

import torch.nn as nn

 

class SimpleTransformer(nn.Module):

    def __init__(self, d_model=128, nhead=8, num_layers=2):

        super().__init__()

        self.encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead)

        self.transformer = nn.TransformerEncoder(self.encoder_layer, num_layers=num_layers)

 

    def forward(self, x):

        return self.transformer(x)

 

# 输入 (seq_len, batch_size, d_model)

x = torch.rand(10, 32, 128) 

model = SimpleTransformer()

out = model(x)

print(out.shape)  # torch.Size([10, 32, 128])

  • PyTorch 官方自带了 torch.nn.Transformer 模块(简单版)
  • HuggingFace Transformers 库(pip install transformers)是基于 PyTorch(也支持 TensorFlow)的 超大模型库,里面包含了 GPT、BERT、T5 等上百个预训练模型,直接调用就能用。

 

Timm (PyTorch Image Models)

  • 第三方模型库(Ross Wightman 开发)
  • 特点:
    • 提供了大量 最新的图像模型(ViT、Swin Transformer、ConvNeXt、EfficientNet、MLP-Mixer…)
    • 支持 预训练权重
    • 提供训练工具:学习率调度器、优化器、数据增强策略(RandAugment、Mixup、CutMix)
  • timm 的模型数量远超 torchvision,并且更新更快,跟踪 SOTA(state-of-the-art)模型。

👉 timm 是 torchvision 的扩展/增强版,尤其适合研究者和工程师快速试验最新模型。还提供了训练用的 数据增强、优化器、学习率调度器 等工具。

👉 timm 相当于一个模型仓库,让你不用自己手写复杂的网络结构。
👉 它 基于 torch 实现,是 torch 的“插件/扩展”。

作用

模型数量

数据处理

更新速度

适用场景

torch

深度学习核心框架

基础张量运算

稳定更新

一切的基础

torchvision

计算机视觉官方库

较少(几十个,经典模型)

内置数据集 + transforms

中速更新

基础学习、入门实验

timm

第三方图像模型库

很多(上百个最新模型)

提供部分增强策略

更新极快,紧跟 SOTA

研究、工业落地、快速实验

 

triton

  • 开发者:OpenAI
  • 作用:一种编写 GPU 内核的语言/编译器,比 CUDA C++ 更易用。
  • Triton 能用 Python 写出高效 GPU kernel,自动优化内存访问、并行等。
  • PyTorch 从 2.0 开始集成了 Triton,用于:
    • TorchInductor 编译器(加速 PyTorch 训练和推理)
    • 自定义算子(如 FlashAttention、快速矩阵乘法)

👉 triton 是 torch 的加速引擎,让 Python 用户写 GPU 代码更简单。
👉 它属于底层优化层,不是直接的模型库。

例子(一个向量加法内核):

import triton

import triton.language as tl

 

@triton.jit

def add_kernel(x_ptr, y_ptr, output_ptr, n_elements, BLOCK_SIZE: tl.constexpr):

    pid = tl.program_id(0)

    block_start = pid * BLOCK_SIZE

    offsets = block_start + tl.arange(0, BLOCK_SIZE)

    mask = offsets < n_elements

    x = tl.load(x_ptr + offsets, mask=mask)

    y = tl.load(y_ptr + offsets, mask=mask)

    tl.store(output_ptr + offsets, x + y, mask=mask)

posted @ 2025-08-25 15:56  南山星火  阅读(31)  评论(0)    收藏  举报