CUDA:从null到0
本篇为 CUDA 入门的扫盲篇,以下 GPU 均默认为支持 CUDA 的 GPU,在正式写算子之前,我们先简单梳理下 CUDA 是个什么东西。 在机器学习中,存在大量简单且相似的运算,这天生适合有大量流处理器 GPU 来完成,随着 CUDA ,Tensor Core 和其他模块的完善,大量主流机器学习训练和推理任务都可以利用 GPU 加速。且常比 CPU 更快。而把他们搬到 GPU 去计算,其底层由 CUDA 算子实现。 CUDA 执行的周期 CUDA 编程模型包含 host 和 device 两个执行端。host 是 CPU 端,负责程序控制;device 是 GPU 端,负责并行计算。kernel 是运行在 device 上、由大量线程并行执行的函数。 一个典型的生命周期如下 12345CPU 准备数据 -> 数据进入 GPU 可访问的内存 -> CPU 发射 kernel -> GPU 线程执行 -> CPU 或下一个 kernel 等待结果 kernel launch 相对于 CPU 默认是异步的。发射调用返回时,GPU 可...
张量并行Tensor Parallelism
张量并行(Tensor Parallelism,TP)就是把同一层神经网络中的张量(权重或计算)拆分到多张 GPU 上,并行完成一次层计算。 张量并行并不是 LLM 时代才提出的概念,在深度学习中很早就存在。不过早期模型通常只有几百万到几千万参数,单层参数规模远小于单卡显存容量,因此几乎没有使用张量并行的需求。 训练瓶颈 随着模型大小越来越大,一个 70B 的稠密模型单层就有 1B 左右,在 FP16+Adam 下面训练,则会存储这些东西 项目 字节 FP16 模型权重 2 FP16 梯度 2 FP32 master weight 4 FP32 Adam 一阶矩 #mjx-0c39dd2{ display:contents; mjx-assistive-mml { user-select: text !important; clip: auto !important; color: rgba(0,0,0,0); ...
PagedAttention原理
为什么会有 KV cache 在 LLM 的 decode 阶段,需要计算当前 token 与历史 token 的注意力。 计算这些 token 注意力,实际是计算最后一个 token 的 #mjx-98465c38{ display:contents; mjx-assistive-mml { user-select: text !important; clip: auto !important; color: rgba(0,0,0,0); } mjx-container[jax="SVG"] { direction: ltr; } mjx-container[jax="SVG"] > svg { overflow: visible; min-height: 1px; min-width: 1px; } mjx-container[jax="SVG"] > svg a { fill: blue;...
FlashAttention -1 原理
在介绍FlashAttention之前,先介绍 LLM 推理的两个阶段,一个是 prefill 阶段,一个是 decode 阶段。 假设输入为[Batch_size=1,句子长度len,模型隐藏维度d],数据类型为FP16 标准 Attention 在做什么 首先,计算计算 #mjx-0cc9b9f8{ display:contents; mjx-assistive-mml { user-select: text !important; clip: auto !important; color: rgba(0,0,0,0); } mjx-container[jax="SVG"] { direction: ltr; } mjx-container[jax="SVG"] > svg { overflow: visible; min-height: 1px; min-width: 1px; } mjx-c...
面试积累 - FFN 层激活函数
在 FFN 层中,有几个常见的激活函数,这次我们尝试梳理它们。 GLU 变体公式 #mjx-39268598{ display:contents; mjx-assistive-mml { user-select: text !important; clip: auto !important; color: rgba(0,0,0,0); } mjx-container[jax="SVG"] { direction: ltr; } mjx-container[jax="SVG"] > svg { overflow: visible; min-height: 1px; min-width: 1px; } mjx-container[jax="SVG"] > svg a { fill: blue; stroke: blue; } mjx-assistive-mml { position: ab...
LLM学习计划
本文章由 AI 辅助生成,作学习路线参考以及知识清单。 title: LLM学习计划 date: 2026-07-20 20:19:03 tags: LLM, AIinfra 本文章由 AI 辅助生成,作学习路线参考以及知识清单。 数学 线性代数 矩阵乘法、转置、逆、行列式 矩阵分解:SVD、QR、Cholesky 特征值与特征向量 张量运算:broadcast、reshape、einsum 正交性、投影、子空间 概率与信息论 条件概率、贝叶斯定理 分布:高斯、伯努利、分类分布 KL散度、交叉熵、互信息 最大似然估计(MLE)、最大后验估计(MAP) 信息熵、互信息在特征选择中的应用 优化理论 SGD、Momentum、Nesterov Adam / AdamW:自适应学习率 + 权重衰减解耦 学习率调度:Warmup、Cosine Decay、OneCycle 凸优化与非凸优化的区别 梯度消失与梯度爆炸 二阶方法:Newton法、L-BFGS(了解即可) 数值计算 浮点表示:FP32、FP16、BF16、FP8(E4M3/E5M2)、INT8、INT4、NF4 混...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick Start Create a new post 1$ hexo new "My New Post" More info: Writing Run server 1$ hexo server More info: Server Generate static files 1$ hexo generate More info: Generating Deploy to remote sites 1$ hexo deploy More info: Deployment
Digital VLSI Design-lecture 7
Lecture 7: Placement 引入
Digital VLSI Design-lecture 6
Lecture 6: Moving to the Physical Domain 我们已经完成了设计流程的前端部分,现在开始完成后端部分 我们将通过绘制布局图(floorplan),为我们的设计打下物理基础。 这包括决定“重要”或“较大”的模块放置位置,比如 IP 核、I/O、供电网格、特殊布线等。 接下来,我们可以放置(place)逻辑门,同时考虑拥塞(congestion)和时序(timing)因素。 有了触发器之后,我们就可以设计时钟树(clock-tree)。 最后,我们可以根据设计规则检查(DRC)、时序(timing)、噪声(noise)等因素,对所有网络进行布线(route)。 在流片(tapeout)之前,我们还需要清理设计、验证等等。 开始物理设计 为了从理论设计走向物理芯片,我们先在理论上定义了: 定义设计 .v 定义设计约束/目标 .sdc 定义工作条件/模式 (MMMC) 定义工艺和库信息 .lef 定义物理信息(Floorplan) 在之前的理论设计中,我们用的是一个理想的模型,因此忽略了以下内容: 不考虑电源供电 综合时只认为有一个完...







