软硬件结合
文章平均质量分 81
简vae
这个作者很懒,什么都没留下…
展开
-
Quantitative Analysis: PIM Chip Demands for LLAMA-7B inference
在decode过程,推理出一个token的时延 = bank内并行访存(GEMV)的时延 + Controler-bank 通信的时延 + Controler 内访存(softmax、Norm 和 reduction 等)的时延。定量分析decode过程,也就可以分析出在给定访存带宽下,模型推理的速度。bank内并行访存(GEMV)的时延包含两部分:模型参数相关的GEMV的时延和kv cache相关的GEMV的时延。在decode阶段,Controller和bank内的算力均可以吃满访存带宽。原创 2024-02-17 14:36:26 · 1452 阅读 · 0 评论 -
Benchmarking PIM-attention: A Puncture Experiment on a Real Processing-in-Memory Architecture
大语言模型(LLM)的高吞吐量服务需要一次批处理足够多的请求。然而,现有的推理系统面临着巨大的挑战。一方面,每个请求的键值缓存(KV cache)占用大量的内存,而且会动态增长和收缩,显存容量不足限制了批处理的大小;另一方面,attention算法中大量使用访存密集型的GEMV算子,显存带宽成为了系统瓶颈。为了解决这个问题,我们提出了PIM-attention。PIM提供了更大的内存容量和bank级并行的访存带宽,为加速attention算子提供了机遇。原创 2024-02-17 14:22:27 · 817 阅读 · 1 评论 -
PagedAttention: from interface to kernal
如果sequence中context比较长,cuda block承担的任务量将会比较大,甚至有可能出现硬件资源(共享内存,寄存器)不够的情况。我们来看一下paged_attention_v1_kernel中的并行计算任务划分,其实就是搞清楚cuda block、warp和thread各自承担了那些计算任务。因此,paged_attention_v1_kernel将一个head中的attention任务交给一个cuda block完成。这样的话,不涉及不同cuda block间的同步,通信开销会比较小。原创 2024-01-12 17:21:25 · 1772 阅读 · 1 评论 -
Memory Wall in Neural Network Inference
目前,ALU算的很快,把内存中数据加载到cache的带宽有限,这时候,ALU的算力就会被浪费,性能瓶颈卡会在内存带宽上,这就是“内存墙”。如下图,简单来讲,当thread 8运行的时候,其他的线程(比如thread 1, 3)也没闲着,它们正在取数据。然而,TPU是一个专用的加速器,只能用来加速GEMM算子,其他的活统统干不了。简单来讲,GPU的架构就是堆很多的寄存器和ALU,获取高算力。MLPs (Multi-Layer Perceptions) ,多层感知机,大家应该都挺熟悉的,里面的算子是GEMV。原创 2024-01-11 14:42:27 · 931 阅读 · 0 评论 -
高速缓存与局部性原理
一个编写良好的程序常常具有局部性原理。这儿的局部性表现为两方面:时间局部性和空间局部性。时间局部性即为,如果一个内存位置被引用,则在不久的将来,它很有可能将被再次引用;空间局部性即为,如果一个内存位置被引用,则在不久的将来,它附近的内存位置很可能被引用。正是因为程序局部性原理,计算机设计者增加了高速缓存存储器这个硬件,从而提高程序对主存的访问速度。一般来说,高速缓存设计为3层,容量依次增大,访问速度依次减小。如果没有在高速缓冲中命中数据,程序再访问主存获取数据。原创 2023-02-08 11:33:08 · 743 阅读 · 0 评论 -
冷热字段分离提升程序局部性
突然想起了上学期课堂上的一个提升程序局部性的案例,我觉得非常有意思,写篇博客记录一下。原创 2023-12-17 17:14:19 · 99 阅读 · 0 评论 -
计算复杂性理论习题及解答
计算复杂性理论习题及解答。原创 2023-02-03 12:51:32 · 1922 阅读 · 0 评论 -
软件架构优化不匹配硬件架构:iTLB miss成为性能瓶颈
为了降低代码耦合度,提升代码可读性,某业务进行微服务改造,每一个模块拆分成一个库,对应一个so动态库文件,共拆分出来300+动态库(300+MB的代码)。主要原因是,so动态库文件众多,且代码在内存中离散分布,需要大量的iTLB entry,而iTLB entry数量有限,远远小于需求量。一般来说,软件架构需要与硬件架深度契合,这时候才可以充分压榨出硬件的性能。一个老生常谈的例子是,与最简单的python程序相比,矩阵×矩阵算子可以通过循环并行化、访存优化和SIMD等优化,得到63000倍的性能提升。原创 2023-12-16 22:24:28 · 112 阅读 · 0 评论