LogoCookLLM文档
LogoCookLLM文档
首页CookLLM

原理精讲

词元化
Tokenization 基础BPE 算法详解GPT 系列 TokenizerBPE 训练工程化
模型架构
Transformer LM
从 token ids 到 logitsEmbedding 与 LM Head
Attention 机制
Self-Attention 到 GQAAttention Sink
位置编码
位置编码基础RoPE 数学推导RoPE 代码实现长度外推
GPU 编程基础
GPU 架构基础张量布局Triton 入门:向量加法
FlashAttention
Flash Attention 原理详解从朴素实现到 Auto-TuningBlock Pointer 与多维支持Causal Masking 优化Grouped Query Attention反向传播实现
分布式训练
数据并行ZeRO 优化器全分片数据并行张量并行流水线并行多维混合并行
推理优化
KV CacheContinuous BatchingPagedAttention

动手训练

概述
预训练
预训练数据Tokenizer 训练模型架构数据流水线训练循环监控与验证
X (Twitter)
系统工程GPU 编程基础

张量布局

会员专享

深入理解张量在内存中的物理布局,Strides,View 与 Reshape 的区别,以及梯度追踪机制。

张量是什么?

当你第一次看到这个错误信息时,可能会感到困惑:

RuntimeError: view size is not compatible with input tensor's size and stride

或者你可能疑惑过,为什么 PyTorch 代码中经常出现 detach().clone() 这样的组合,而不是单独使用其中一个?

这些问题的根源在于:这里其实混合了三个不同的概念——内存布局、视图操作、以及梯度追踪。理解这些概念的起点是:

一个 PyTorch 张量 = 一块扁平的内存 + 一套解读这块内存的元数据。

这个元数据包括:

  • Shape(形状):张量有几个维度,每个维度的大小
  • Stride(步幅):在每个维度移动时,需要跳过多少个内存位置
  • Storage Offset(存储偏移):该张量的数据在存储块中的起始位置

让我们用代码验证:

import torch

x = torch.tensor([[1, 2, 3],
                  [4, 5, 6]])

print(x)
print(f"Shape: {x.shape}")    # torch.Size([2, 3])
print(f"Stride: {x.stride()}") # (3, 1)

虽然我们看到的是一个 2×3 的矩阵,但 PyTorch 实际上将数据存储为 [1, 2, 3, 4, 5, 6] 这样一个扁平数组,然后用 shape=(2,3) 和 stride=(3,1) 来解读它。

登录以继续阅读

这是一篇付费内容,请登录您的账户以访问完整内容。

GPU 架构基础

深入理解 GPU 的设计哲学、SIMT 编程模型以及硬件层级映射,建立并行计算的物理直觉。

Triton 入门:向量加法

通过一个简单的向量加法例子,学习 Triton 的基本编程模型。

目录

张量是什么?
关键概念:步幅 (Strides)
向量示例 (1D)
矩阵示例 (2D)
连续性 (Contiguity) 详解
什么操作会破坏连续性?
发生了什么?
为什么不再连续?
View vs Reshape:性能关键
View:零成本,但有限制
Reshape:更智能,更安全
梯度追踪:Clone、Detach 及其组合
clone():复制数据,保留梯度历史
detach():切断梯度,共享内存
detach().clone():常见组合
调试技巧
布局类型:行优先与列优先
测试你的理解
总结