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 编程基础

Triton 入门:向量加法

会员专享

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

在权益中心获取代码

Triton 是一种用 Python 语法编写 GPU kernel 的语言。与 CUDA 相比,Triton 自动处理了很多底层细节(如 shared memory 管理、线程同步等),让我们可以专注于算法本身。

本章通过一个最简单的例子——向量加法——来了解 Triton 的核心编程模型。

SPMD 编程模型

在开始写代码前,我们需要理解 Triton 的核心思想:SPMD(Single Program, Multiple Data)。

简单说:同一份 kernel 代码会被多个 "program" 并行执行,每个 program 处理数据的不同部分。

假设我们要对两个长度为 256 的向量做加法,BLOCK_SIZE 设为 64。Triton 会启动 4 个 program:

输入向量 (N=256, BLOCK_SIZE=64):

┌────────────┬────────────┬────────────┬────────────┐
│  0 ... 63  │ 64 ... 127 │ 128 .. 191 │ 192 .. 255 │
├────────────┼────────────┼────────────┼────────────┤
│ Program 0  │ Program 1  │ Program 2  │ Program 3  │
└────────────┴────────────┴────────────┴────────────┘

每个 program 只负责处理自己那一块数据。那么问题来了:每个 program 怎么知道自己应该处理哪一块?

答案是 tl.program_id()——它返回当前 program 的编号(0、1、2、3...)。

登录以继续阅读

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

张量布局

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

Flash Attention

深入理解 Flash Attention 的原理与 Triton 实现

目录

SPMD 编程模型
逐步构建 Kernel
第一步:定位自己
第二步:计算偏移量
第三步:处理边界
第四步:加载、计算、存储
完整 Kernel 代码
启动 Kernel
验证正确性
总结