KaiSpace

Personal blog

Share interesting technologies or academic thoughts

What I learn and write for a living.

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
tech

Git Note

Git Note git init: 将当前文件夹作为git根目录 git add:将某个文件加入到staged中 git restore staged:将某个文件从staged中去除,但是不改变原有文件 git reset:上一条指令可能因为没有还任何commit而失败,这时用git reset.但是git reset有很多种语义,务必当心使用 git rm:从磁盘删除文件,并将删除动作放入staging area。若你后悔了,不想在下次操作中包含删除,执行restore staged <file(但是并不能恢复磁盘文件) git restore:从staged area中删除,并且恢复文件 git commit m "" git仓库下的文件夹里如果还有git仓库,它不会递归进入,两者隔离 git log:查看commit history setup github repo git remote add <anynameyouwant (preferred origin) <repo git remote v: 查看是否添加成功 git remote rename origin up

Read note
0 comments0 likes
life

科研想法

我的目标已经不是证明我是最聪明的了,因为我就不是最聪明的。我做科研所需要的是做出有价值的,让我满意的成果就可以了。我不期待自己发明什么算法,更重要的是如何将已有的算法融入到工程中,如何看见算法在工程中的价值。既然天赋并不突出,我所应该做的就是积累经验。积累解决问题的经验,积累工程实践的经验,慢慢地凸显自己的价值。 我并不认为做AI的测评类科研有任何价值,那种东西谁都可以做,它并不是在搭建一个东西,而是在为一个已有的产品做注释。看起来容易,做起来也容易,那么这种东西没有任何锻炼的目的,没有任何积累经验的用处。当然,它是能赚钱的,但是等我工作了,可能还有六年,AI已经发展到不知什么地步了。我作为一个system工程师,和作为一个agent工程师,到底谁更有能力,谁能替代谁,一目了然。 WhyNotTV给了我很大的感触,确实与我所想很相似,只是他们作为顶尖从业人员,让我更相信自己所想。 如果你想进工业界,那么读PhD就是浪费生命。你完全可以以master为跳板,来凑够PhD进工业界的标准。比如你可以在master,或者在本科的时候攒够citation,然后做出一些能够让你与众不同的一些项目,

Read note
0 comments0 likes