KaiSpace

Personal blog

Share interesting technologies or academic thoughts

What I learn and write for a living.

tech

从 GQA 例子读懂 Mirage 的 muGraph 搜索与后端生成链路

本文只讨论 Mirage(OSDI 25'),不讨论 python/mirage/mpk 下的 MPK 子系统(这个更偏向于runtime scheduling)。请注意,这两个项目几乎没有联系,我并不清楚为什么要放在同一个repo下。(当然也有可能是我没看出来联系) 文章按真实执行顺序展开:先用 Python 构造 highlevel graph,再进入 Cython/C++ search 生成候选 muGraph,随后 verifier 判断语义等价,最后由 CUDA 或 Triton backend 尝试 lower、compile、profile,并选出最快的 runnable graph。 1. 从 GQA benchmark 进入 benchmark/groupqueryattention.py 是一个适合读 Mirage 主线的入口。它构造的 highlevel graph 很短: 这条 graph 对应的 attention 形态是: 默认 batchsize=1 时,Q 是 (2, 256,

Read note
0 comments0 likes
tech

多种代码范式详解

C++侧给python写接口 mirage/python/mirage/kernel.py .pyx .pyx 的开发范式可以概括为:Python 负责易用接口,Cython 负责跨语言 binding,C++ 负责真正逻辑。在这类代码里,Python 用户看到的是 DTensor、CyKNGraph 这种高级对象;但这些对象内部实际保存的是 CppDTensor、CppKNGraph 之类的 C++ 指针。每个 .pyx 方法通常都遵循同一个模式:先检查 Python 参数类型,把 list/tuple/str/dtype 等 Python 对象转换成 C++ 能接受的 vector/char/enum/raw pointer,然后调用 C++ core 的方法,最后把 C++ 返回的指针重新包装成 Python 对象返回。因此 .pyx 层不是主要算法实现层,而是 marshalling + thin wrapper + API facade:它让 Python 能自然地调用底层 C++ 编译器/IR/search/transpiler,同时避免把核心系统逻辑写在 Python 里。

Read note
0 comments0 likes
tech

CS3210 Parallel Computing Note

CS3210 Parallel Computing Note 第 1 部分:导论与并行计算基础 (Introduction to Parallel Computing) 1. 为什么我们需要并行计算? 在过去,程序员通常依赖硬件制造商提高单核 CPU 的时钟频率(例如从 800 MHz 升级到 1 GHz)来自动提升程序的运行速度。然而,由于功耗和散热的物理限制,单核时钟频率的增长已经停滞。 当今,对于天气预报、机器学习、流体模拟等复杂问题,即使单线程代码在算法上已经做到了极致优化,其运行速度仍然无法满足需求。因此,“让程序变快”的唯一途径就是并行计算:利用更多的物理处理单元(Cores)同时处理任务。 2. 并行化问题的核心步骤 将一个串行程序转化为并行程序,通常需要经过以下三个核心步骤(在后续章节中这也演变为了 Foster 的 PCAM 设计方法学): 1. 分解 (Decomposition / Partitioning):将庞大的应用问题拆分成更小、更离散的部分,称为任务 (Tasks)。 2. 调度 (Scheduling):决定这些任务应该以何种顺序运行,必须严格遵守任务

Read note
0 comments0 likes
tech

Flash Attention 3/4 笔记

Flash Attention笔记 在 FlashAttention(以及几乎所有现代 GPU 算子)中,计算绝不是一个 token 一个 token 算的,而是用masked attention一个tile一个tile算 硬件瓶颈:GPU 的 Tensor Core(MMA 单元)非常“饥渴”。如果你只给它算一个 token 的注意力,它的计算密度太低,根本跑不满,大部分时间都在等内存传输 。 分块(Tiling):FlashAttention 的核心就是将 N 个 token 划分成若干个 Tile 。在 Blackwell 架构上,由于第 5 代 Tensor Core 的硬约束,这个 Tile 的大小通常被固定为 128×128 。 并行维度:GPU 会同时启动成百上千个线程块(CTA),每个 CTA 负责处理一个 128×128 的小矩阵块 Flash attention 3 1. 数学定义与性能目标 FlashAttention3

Read note
0 comments0 likes
tech

[转载] 在 H100 上超越 cuBLAS:一份工作日志

在 H100 上超越 cuBLAS:一份工作日志 CUDA 矩阵乘法内核 从零开始 作者:Pranjal Shankhdhar | 2024年11月29日 来源: 在这篇文章中,我们将在最新一代 NVIDIA 硬件 H100 上,迭代地实现一个 CUDA 矩阵乘法内核。 我们将深入理解 H100 的架构,并一步步展示这些优化。最终内核在 N=4096 时比 cuBLAS 快 7%。它可以装进一个 C++ 文件中,没有任何依赖。 这篇文章可以看作是 Simon 的经典博客的续篇,该博客展示了在 A6000 GPU 上的类似优化。然而 H100 GPU 是完全不同的怪兽,需要完全不同的算法。举个例子,Simon 博客中的算法在 H100 上只能达到 cuBLAS 性能的 4%。在这篇文章中,我们将从 Simon 的博客出发,迭代地达到 cuBLAS 的 107%。 我所有的代码都可以在

Read note
0 comments0 likes
tech

[转载] How to Optimize a CUDA Matmul Kernel for cuBLAS-like Performance: a Worklog

如何优化一个 CUDA Matmul Kernel 以达到类 cuBLAS 的 Performance:一份 Worklog 搬运自: 2022年12月 在这篇文章中,我将迭代地优化一个用 CUDA 编写的 matrix multiplication 实现。 我的目标不是构建一个 cuBLAS 的替代品,而是深入理解用于现代 deep learning 的 GPUs 最重要的 performance 特性。 这包括 coalescing global memory 访问、shared memory caching 和 occupancy 优化等。 你可以从 下载所有 kernels 的代码。也可以查看 ,我从那里复制了 benchmarking 设置。 这篇文章比我通常上传的内容少了一些润色,包含了更多的 sidenotes。我在编写 kernels 时将其用作 ideas 和草图的笔记本。这就是为什么我称之为

Read note
0 comments0 likes
tech

CS2105 Computer Networks

CS2105 Note Lecture 0 Welcome to CS2105 0.1 课程核心目标与哲学 CS2105 并不是一门教你如何插网线、配置Cisco router hardware,或者考取网络工程师认证(如 CCNA)的职业培训课。这门课的核心目的是教授计算机网络的核心原理与概念 (Principles and Concepts),并以当今最成功的网络系统——Internet (互联网) 作为主要案例进行深度剖析。 不会涉及的内容:底层硬件的具体配置(这属于 CS3103 实验课的内容);移动与无线网络(Mobile and wireless networks,如 3G/4G/5G/WiFi 物理层细节,这部分在高级课程 CS4222 中讨论)。 教授的期望:不要只盯着分数(Grades),而是要理解网络架构的演进。现有的网络架构是几十年前的工程师在当时的视野下设计的(可能存在短视),作为新一代的计算机科学家,你们的目标是发现现有架构的缺陷,并思考如何构建更好的下一代网络。 0.2 课程考核分配与政策细则 期末考试 (Final Exam):50%。允许携带 Cheat

Read note
0 comments0 likes