Parallel Reduction Optimization with CUDA
Jun 19, 2024
reduce(归约) 是并行计算中的一个经典问题,他的做法如下:给定一个数组,计算其sum(总和)、min(最小值)、max(最大值)或mean(平均值),这一操作是基本的data parallel primitive。
reduce 最简单的实现是采用 for 循环的方式遍历每个元素并计算结果,但这种方法的效率非常低,那么如何使用 CUDA 来加速和优化这个过程呢?
在这篇文章中,我们将通过 1D reduce 的例子,来一步一步优化程序的性能,将带宽打满,对应的 github repo cuda-reduce-example。
在这篇文章开始之前,我想碎碎念一下。cuda 学习一直都在我 …
W4A8KV4 的一些思考
May 30, 2024
TL;DR KV4 W4A8 Introduction 论文走读 SqueezeLLM Sensitivity-Based Non-uniform Quantization Dense-and-Sparse Quantization KVQuant QServe: W4A8KV4 Why W4A8KV4 量化方案的 GEMM 分析 Progressive Quant SmoothAttention General LLM Quant Optimization Results 方案总结和讨论 KV4 W4A8 TL;DR KV4 总结了几种优化 KV4 量化的方法,优先级 …
量化评估 Proposal
May 6, 2024
现状 评估指标选择 后续评估 TODO 现状 目前在 crossing 中支持两大类型的评测,一类是基于 lm-evaluation-harness prefill-like task,比如 MMLU 等测试;第二类是基于 bigcode-evaluation-harness decode-like task,比如 humaneval 等测试。
目前的测试需求主要是两种,一种是对齐 crossing 在 fp16 下和 huggingface transformers 的精度,确保框架推理的正确性;第二种需求是评估各种量化方法对模型的影响。对于第一种需求,采用目前的测试方案已经可以满足要 …
LLM Speculative Sampling
May 5, 2024
背景介绍 算法介绍 数学推导 Reference 背景介绍 在 LLM 推理过程中,主要采用了 AutoRegressive Sampling(ArS) 的方式来执行的,也就是说没有办法通过一次 forward pass 就可以获得最终的推理结果,这是和其他模型推理(比如图像检测,分类等)相比最大的区别。
下面是 ArS 推理过程中的算法描述
对于 target model 来说,在初始的 prompt 推理结束之后,就进入 for 循环开始 ArS 过程,直到生成到目标长度的为止。
由于每次推理只会生成一个 token,但是需要把所有的模型权重都 load 到 SRAM 进行计算,所以 …
SmoothQuant 优化记录
Apr 25, 2024
SmoothQuant 原理 Recap 当前的问题 一些 Fixup Greedy Search FC-FC Smooth Reverse Greedy Search 实验结果 SmoothQuant 原理 Recap 可以用下面这张图简要描述 SQ 的工作原理,由于 LLM 中间的 activation 在某些维度存在 outlier,可以通过对 activation 做 scaling down 来将 outlier 值变小,但是为了保证输出不变,对 weight 做反向的 scaling up。
具体来说,对于输入 X: [token, C_in],linear weight …
Apr 18, 2024
在工作中如果我们写了一个 cuda kernel,需要去计算他的理论利用率和理论带宽,这样我们才能知道这个 kernel 还有多少的优化空间。
搞清楚两个定义,tflops 和 memorybandwidth 分别是什么? memory bandwidth 是单位时间 HBM 到寄存器的访问量。
在 llm 中,最重要的一个 kernel 就是 attention,下面针对 causal LM,计算 self attention 在前向过程中的 tflops 和 bandwidth。
首先回顾一下 attention 的计算流程,假设 query,key 和 value 分别为 QKV,那么整 …
Triton Tutorial #2
Apr 17, 2024
Triton Tutorial #2 This is the third blogpost of Triton tutorial series.
In this tutorial, we will write a high-performance matrix multiplication kernel that achieves performance on parallel with cuBLAS step by step.
Triton Tutorial #2 Motivations Naive GEMM L2 Cache Optimization Hyperparameters …