- 博客(18)
- 资源 (3)
- 收藏
- 关注
原创 llm推理相关
我们知道llm推理是个自回归过程,所以模型会迭代地输入一个序列,采样下一个token,将该token附加到输入序列中,并继续此过程,直到LLM生成一个表示生成结束的token。(7)gpu加速和缓存,这其中注意力计算会占用很大的计算资源,尤其在多头注意力和长序列输入过程中,因此llm会利用gpu进行并行计算,在gpu内存中缓存query,key和value等矩阵提高计算效率。然后在gpu的支持下llm会逐步生成输出,每次生成一个token后,这个token会作为输入再次输入到llm中。这里的IO开销很大。
2025-02-17 16:50:22
778
原创 高性能leature9知识蒸馏
知识蒸馏,一个教师模型,一个学生模型。我们首先要清楚教师模型和学生模型需要match的点有哪些:第一点比较好理解,就是两个模型的输出要一致,不能一个模型输出A,另个模型输出B。蒸馏过程如下:(1)输入的数据会同时输入到Teacher和student模型中。(2)教师模型根据输入数据产生一个软标签(soft target),这是一个概率分布,反映了每个类别的可能性。这与硬标签(hard target)不同,硬标签是标准的类标签(如:0, 1, 2等)。
2024-12-08 18:15:15
1126
原创 vllm2 架构解析
vllm1中讲了paged attention相关,这是整个vllm推理的原理基础。接下来我们看下vllm的推理架构。VLLM的核心组件:可以看到有两部分构成,左边是Scheduler,右边是worker。Scheduler负责请求调度,从等待队列中选择接下来要处理的请求。Worker负责模型推理,使用模型对被调度的请求进行推理。
2024-12-02 15:48:49
586
原创 vllm(1) paged attention
它的做法是预先分配一大块显存,并将大块显存划分成较小的块(block),每块可以存放固定数量 token 的 key 和 value 值,为请求的 KV cache 分配空间时按需分配,且无需存储在连续的内存空间。接下来,开始生成第一个 token “and”,它存储在 Logical KV cache blocks 的 Block 1,实际存储在 Physical KV cache block 的 Block 1,同时更新 Filled slots 为 3,如下图。
2024-11-29 15:15:42
461
原创 Lecture5量化
在IEEE 754标准中表示32位浮点数方法,分为标准化和非标准化。左边是标准化浮点数,分为符号位,指数位和尾数位,−1sign∗1Fraction∗2Exponent−127这里的1 + Fraction表示还原出实际的尾数值。图中的例子表示一个具体的32位浮点数,符号位0表正数,指部分01111101->二进制转10进制是125,减去偏移量127,得到指数为-2。尾数部分00010000000000000000000,表示0.0625。
2024-10-06 15:09:26
912
原创 Lecture3剪枝蒸馏
剪枝问题的目标是通过保留尽可能少的权重(WPW_PWP)来最小化网络的损失函数Lx;WPL(x;W_P)Lx;WP:这个公式表示我们希望在剪枝后的权重WPW_PWP 下最小化损失函数 L,即保证模型的预测误差尽可能小。
2024-09-25 14:38:40
972
原创 高性能Lecture2
分组卷积将输入通道和输出通道按照一定数量的组数 g 划分开来,每一组的输入通道只与同一组的输出通道相连,而不是像普通卷积那样,所有输入通道都与所有输出通道进行卷积操作。逐通道操作:在图的右侧展示了这个操作,输入通道(蓝色方框)中的每一个通道都与一个对应的卷积核(黄色方框)进行卷积操作,结果会生成相应的输出通道(绿色方框)。例如,在常规卷积中,你的卷积核会对输入做缩小操作(如 3×33×3 的卷积核会将特征图缩小),而在转置卷积中,你可以通过反向操作恢复更大尺寸的特征图。图示:左侧展示的是标准卷积的过程。
2024-09-24 20:45:05
895
原创 大模型量化常用方法
大模型权重值模型的部署的文件,叫权重。例如LAMMA 70B,权重的参数就有70B个。中间激活值a,就是在推理过程中的中间值。KVcache ,transformer中有K,Q,V三个矩阵。Q是每个token进来,K,V是需要重复计算的,例如我们已经输出了一个token,在输出第二个token的时候还需要计算第一个token的K V计算,说白了就是用内存换取速度的决定。,gradient是梯度,可能也会被量化。但是不一定。
2024-09-18 21:26:36
1937
原创 cuda事件计时和影响GPU加速关键因素
数据传输比例较小核函数的算数强度高核函数中定义thread数目足够多减少host和device的数据传输提高核函数的算数强度增大核函数的并行规模。
2024-09-03 12:31:23
208
原创 CUDA内存初始化小记
所以cudaMalloc(void **address,size_t size)的作用就是在Device上开辟一段大小为size的内存空间,然后将这个内存空间的地址赋值给address。清楚了这些后,就知道我们上面在device上开辟的是M大小的内存空间。这个也显而易见,cudaMemcpy是把h_x所指的内存空间值直接赋值给d_x,d_y所值的内存空间值,这样的话CPU的数据就迁移到GPU数据上了。到这里为止,CPU上的d_x,d_y,d_z的值是GPU上的三个大小为M的内存地址。
2024-08-31 16:03:15
627
原创 KMP相关
当我们在f不匹配后,我们要找f前面的最长相等前后缀 也就是2,2意味着这里有个后缀aa,前面也有一个相等的前缀aa。如果我们在后面不匹配了冲突了,那么我们就要找到与其相等的前缀aa的下一个元素重新开始匹配。那么这个重新开始匹配的元素坐标是多少呢,其实就是其最长相等前后缀的长度.这就是前缀表的作用。前面是模式串的子串,子串的后缀是aa,我们就找到与这个后缀相等的前缀的后面——也就是b。所以我们要知道最长相等前后缀,这样我们在遇到不匹配的位置的时候呢,我们就找前面的这个子串的最长相等前后缀。
2024-08-09 16:56:39
303
原创 错误记录verilog
逻辑同或运算,运算规则:相同为一,相异为零。与异或运算规则相反。即两个操作数值相同时结果为1,两个操作数不一样时结果为0。最外层带“{ }**”,否则就是错误的。值得注意的是**{2{a,b,c}}
2023-12-22 14:18:41
63
原创 【无标题】
docker login nvcr.io Username: $oauthtoken Password: aXE2azBiZG90N2JzNTRvdGt1NnR1OHJpZ2o6NTQwZjQyNjYtMDlhNS00YWQ0LWFmMzYtMmM5ZGM3ZmZjYjM4
2021-11-16 22:15:57
210
原创 手写线性回归预测波士顿房价
机器学习课程的实验import pandas as pdimport numpy as npfrom sklearn import datasetsfrom matplotlib import font_manager as fm, rcParamsimport matplotlib.pyplot as pltfrom sklearn.model_selectio
2021-11-14 23:59:06
1129
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人