自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(420)
  • 收藏
  • 关注

原创 算法工程汇总(通信框架)

Infiniband: 8GB/s为什么快:自己是一套协议,不需要窗口流控,路由更直接;接收方空间够,发送方才发送; 无需CPU介入;NVLink: 60GB/s!CUDA-aware MPI:用了拆小包Pipeline;用了GPUDirect直达;忽略CPU和主存,忽略Host buffer、CUDA buffer、网卡buffer;例子:OpenMPI;Ri...

2020-02-06 20:00:50 641 1

原创 算法工程知识汇总(神经网络)

神经网络预测推理---TensorRT: (比Tensorflow的推理快20倍)1. Kernel融合: 横向融合(例如1*1卷积等), 纵向融合(卷积+bias+Relu),消除concatenate层(预分配输出缓存,跳跃式的写入);2. 量化成FP16或者INT8: 减少显存占用,加快推理速度;3. Auto-Tuning:例如,对于卷积计算有若干种算法,TensorRT会...

2020-02-06 18:21:32 550

原创 FlashAttention-1、2、3的区别

均采用分块策略将输入矩阵划分为小块(Tile),在GPU的快速SRAM(共享内存)中完成局部计算,通过逐块迭代累积全局结果,避免将完整注意力矩阵写入HBM。在批次(batch)和注意力头(head)维度并行化,但对长序列的并行支持有限,导致GPU利用率较低(如A100上仅达理论FLOPs的25-40%)。在反向传播时,不存储前向传播的中间矩阵,而是通过保留的统计量(如softmax的归一化系数)重新计算中间结果,以节省显存。,并减少HBM读写次数。),从而解决注意力计算中序列长度的平方复杂度(

2025-02-24 08:25:05 656

原创 async checkpointing

异步CPU->Disk步骤,有用到组播通信,会干扰训练中的AllReduce等组播通信。解决方法:更换了Communication Group。核心思想:GPU->CPU,用的是blocking;CPU->Disk,用的是异步不阻塞训练。最初来源:IBM Research。

2025-02-21 00:08:53 222

原创 训练数据为什么需要Shuffle

**批训练**:在实际训练中,通常采用批训练的方式,即每次训练使用一个批次的数据。- **稳定训练过程**:通过打乱数据顺序,模型在每轮训练中都会遇到各种类型的样本,从而平滑地调整参数,减少模型抖动,提高训练过程的稳定性[3]。- **打乱数据顺序**:通过每轮都打乱数据顺序,模型无法依赖数据的顺序特征,从而被迫学习到更泛化的特征,提高模型的泛化能力[3]。- **确保独立性**:通过打乱数据顺序,每个样本在每轮训练中都以相同的概率出现,从而满足独立同分布假设,提高模型的训练效果[3]。

2025-02-17 22:24:36 432

原创 VLLM历次会议(2024.9)

多模态上做了很多新功能。

2025-02-15 09:56:45 134

原创 FlashInfer: Cascade Inference

requests之间的prompts呈现是一棵前缀树时,除了叶子,枝干部分都是被多个requests所共享的,可以每个枝干只计算1次。每个SM上的thread block,可以计算1份共享前缀,或1份叶子(非共享的后缀)。多组并行在多个SM上。batch里requests之间有共享前缀时,可以将共享前缀的Q*K*V只计算1次。

2025-02-15 00:22:13 197

原创 VLLM历次会议(2024.7)

vllm git下的子项目:llm-compressor。CPU-GPU之间有NVLink。的机器上,变慢的幅度小。

2025-02-13 23:25:32 178

原创 VLLM历次会议(2024.6)

NCCL和custom allreduce(应该就是指one-shot和two-shot以及half-bufferfly那些,小数据量通信情况下,降低延迟用的)原理就是新到request的prefill,不阻塞正在decode的request。和continous batching一起使用时,为什么加速比和qps有关?qps上来以后,延迟能有明显的优化。

2025-02-13 00:29:53 172

原创 FlashDecoding

每个SM block上的Q,负责和所有K和所有V进行计算,得到对应的结果。但是,在decoding阶段,因为Query的seqLength=1,且batchSize=1,因此SM block数目无法都利用上。缺点:最后需要将不同SM block上的中间结果,进行通信,进行归一化的softmax和结果Reduce。在prefill阶段,seqLength*batchSize*Heads足够多,所以每个SM block上有足够多的Query。期间,SM block彼此之间,不需要通信。

2025-02-12 20:49:17 229

原创 VLLM历次会议(2024.4)

latency可以显著减少。VLLM continous batching是prefill优先。Sarathi-Serve用了chunked-prefill。VLLM后续会做这个。预先算好KV cache,遇见公共前缀,复用之,避免再计算一遍。增加Marlin Kernel,INT4 quantization时可加速。场景:1. 多轮对话。2.公共的system prompt。支持正则表达式、JSON格式等。通过Outlines工具实现。

2025-02-12 18:29:13 196

原创 VLLM历次会议(2024.1)

two-shot的实现,是先reduce-scatter,每个node读取所有node上的一部分数组,加和之后,再all-gather广播到所有node使得每个node上有完整的加和后数组。one-shot的实现,是all-to-all,每个node一把读取所有node上的整个数组。传输数据量小时,latency-bound,因此NCCL的double-tree和ring-allreduce的延迟较大。3. 支持量化:GPTQ,AWQ,SqueezeLM,FP8-E5M2 KV cache。

2025-02-09 22:56:46 305

原创 VLLM历次会议(2023.10)

PagedAttention: 类似OS的虚存分页那样,管理KV Cache显存。

2025-02-09 10:19:51 147

原创 CUDA Graph

CUDA Graphs 是编程模型中的一种技术,旨在优化 GPU 程序的性能。它允许将一系列连续的 GPU 操作(如计算和数据传输)连接成一个“图”结构,并一次性提交给 GPU 来执行8。这样做可以减少 kernel launch 的开销,因为传统的 CUDA 程序中,每个 kernel 都需要单独提交给 GPU,而这些提交操作本身也会产生一定的开销。

2025-02-08 21:24:44 451

原创 FLOPS计算

【代码】FLOPS计算。

2025-02-08 11:56:42 151

原创 多种量化方式联合使用

SmoothQuant是W8A8,GPTQ是W8A16,两者一起使用,可以得到精度损失更小的W8A8量化。

2025-02-05 13:32:07 376

原创 Guided Decoding (借助FSM,有限状态自动机)

即把要求的输出格式,编译为自动机;LLM decode阶段,根据当前自动机状态,只采样(或贪心选择)自动机允许的那些tokens,不允许的那些tokens采样概率强制设为0。输出格式里规定好的字符串,可以强制交给LLM,无需LLM自己去生成。以上指定输出格式,可以通过有限状态自动机“辅助”LLM来实现。

2025-02-04 23:10:48 221

原创 Speculative Decoding多篇主流论文的总结

先用小且快的draft模型,生成几个tokens。再用大而慢的模型,将这些input+output tokens批量输入,一次forward得到每个token的下一个token,只保留前面和draft结果完全相同的部分,不同的部分扔弃。把draft模型的最后一层激活,除了经过原本的LM Head预测1个token,还要经过多个Medusa Head预测N+1, N+2, N+3等位置上的tokens。选那条预测结果和draft结果的前缀相同最长的那条,作为最终结果。MEDUSA(美杜莎)

2025-02-03 07:35:53 237

原创 Automatic Prefix Caching

APC技术,遇到新prompt和老prompt前缀完全相等的,则复用老prompt的KV cache,避免重新计算。3. 只要前面有1个字符不同,后面完全相同的部分,也不能被视为公共前缀。2. prefill公共前缀较长,且decode output较短时,KV cache复用的威力才能发挥出来。则把长文档放到前面,可以复用KV cache。enable_prefix_caching,prompt的KV cache都会被复用。多轮对话聊天历史,放到前面,可以复用KV cache。

2025-02-01 20:13:58 376

原创 Sarathi的chunked prefill论文

3. 耗时大的部分:2个FFN,preproj,postproj。1. Prefill阶段,batch size为1时,GPU算力已满(saturate),所以提高batch size不能减少单个request的耗时。4. 它的实验里,batch-size为1时,1个decode的平均耗时,是1个prefill的平均耗时,的200倍。(似乎没有打成batch,是一个一个独立计算的)。2. Decode阶段,因为是memory-bound,提高batch size几乎可以让单个request的耗时线性减少。

2025-02-01 06:55:59 325

原创 continuous batching、chunked-prefill相关概念

decode那个batch的token较少填不满batch时,才会把prefill加进来。DeepSpeed是chunked prefill,即把input拆分,和decode阶段的batch到一起。continuous batching是每完成1个request,就让1个新request加入到batch里。好处:可以让decode阶段的一个batch的token数目不减少,确保计算密度。batching是所有requests的output都生成完毕之后,才能开始处理下一个batch。

2025-01-30 22:49:18 477

原创 VLLM性能调优

减少max_num_seqs或max_num_batched_tokens。减少一个batch里的请求、token个数,从而减少KV cache占用。显存不够的时候,某些request会被抢占。其KV cache被清除,腾退给其他request,下次调度到它,重新计算KV cache。可以查看VLLM自带的Prometheus指标,查看抢占的请求数量。- 增大gpu_memory_utilization。提高KV cache占用的显存百分比。- 增大tensor_parallel_size。

2025-01-30 21:40:40 827

原创 LLM大模型推理中的常见数字

1. 聊天机器人Chatbot,一般,input tokens : output tokens = 1100:15。4. 4张带有NVLink的A100,在70B模型上的推理加速比,大约是3x(即是单张A100卡吞吐量的3倍)。3. prefilling阶段的吞吐量(tokens/s),一般是decoding阶段的50~100倍。2. LLama2的tokenizer,中文情况下,token:汉字=1:1.01。

2025-01-26 23:35:33 208

原创 NCCL的多种通信拓扑

节点内先AllReduce一把,结果再在跨机器上AllReduce;优点:减少速度较慢的跨机器通信的数据量;大集群:Double-Tree;优点:hop数是lg(N),延迟减少;缺点:GPU多了以后,延迟太大,N;

2025-01-22 18:13:43 856

原创 DeepSeek-v3在训练和推理方面的优化

4.MoE的load-balance:训练中,边训练,边调整每个MoE的路由权重。负载高的减少权重,负载低的增加权重。缺点是影响模型训练的主目标)。可以一次推理多个tokens。3.基础架构:MoE,同等参数量(模型的”能力“)下,训练、推理的计算量大幅减少。2.基础架构:MLA,大幅减少了KVcache大小。训练的时候就是一次预测多个tokens,推理时也这样,所以效果更好。限制每个token最多和M个GPU上的experts进行通信。训练中,用旁路loss来鼓励句子中命中expert更均匀。

2025-01-18 09:46:44 907

原创 Lora理解&QLoRA

Parameter-EfficientFine-Tuning(PEFT):节约开销的做法,fine-tune少量参数,而不是整个模型;Low-RankAdaptation(LoRA):是PEFT的一种;冻结原参数矩阵,只更新2个小参数矩阵。

2025-01-17 23:01:19 339

原创 Triton+TensorRT-LLM在70B模型上的多组实验

2. tp并行,增大并发数,吞吐量显著增大。400个请求,串行:225秒全部完成,4路并行:128秒全部完成。因此,W4的显存读取加速,并不明显。特别是高并发的时候,吞吐量增加明显。分析:聊天任务input长output短,计算密集任务,因此W8A8的int8矩阵乘法,相比W8A16的bf16乘法,5. 中文xiaoice chat的calibration数据集,相比英文的数据集,精度不升反降。3. context并行,基本和tp并行的性能持平,没有变化。1. 单机内部,tp并行,速度比tp并行,要快。

2025-01-13 18:34:38 235

原创 LLama的FFN里有gate

2025-01-12 00:32:37 135

转载 DeepSeekV3技术创新

其他值得关注的细节还包括,DeepSeek V3的MoE由256个路由专家和1个共享专家组成。这种重叠能确保随着模型的进一步扩大,只要保持恒定的计算和通信比率,就仍然可以跨节点使用细粒度专家,实现接近于0的all-to-all通信开销。具体而言,该策略为MoE中的每个专家引入了一个偏置项(bias term),并将其添加到相应的亲和度分数中,以确定top-K路由。研发团队在DeepSeek-V2架构的基础上,提出了一种无辅助损失的负载均衡策略,能最大限度减少负载均衡而导致的性能下降。

2025-01-11 22:21:00 169

原创 TensorRT-LLM中的MoE并行推理

限制:二者的乘积,必须等于模型并行(不是指moe_tp_size,而是整个模型的tp_size)的卡数。moe_ep_size: 按照Expert切分,每个GPU有用一部分Expert的所有权重。moe_tp_size:按照维度切分,每个GPU拥有所有Expert的一部分权重。二者可以搭配一起使用。

2025-01-08 23:20:07 350

原创 大模型性能随笔

1. 如果开了accumulate gradient更新,则pipeline并行的bubble会变小很多。因为每foward好多个batch,才开始backward。2. chat聊天任务上,可以把prefix KV cache reuse功能利用起来;然后把同一个session的对话,路由到同一张卡上。

2025-01-06 20:18:18 128

原创 Sarathi-Serve:chunked-prefills

decode-maximal batching原则:即优先往batch中添加需要做decode的序列,直到添加不动为止(即我们预留给decode的KV cache空间已经不足了,无法存放新的KV cache了)。然后我们再根据这个batch中剩余的tokens预算,对需要做prefill的序列做chunk切割,把对应的prefill tokens添加进batch中。左图,Prefill阶段,因为是Compute-bound的,计算单元已经打满了,再增大batch也不会增大吞吐量了。

2025-01-06 00:08:02 450

原创 Flash Attention

答:类似activation checkpointing,重新计算一遍。解决:中间结果不保存,1个kernel顺序算完多个操作。反向传播时用到这些中间结果要求导,怎么办?痛点:多次读取、写入显存。

2024-12-23 19:13:51 263

原创 A100 GPU架构、Compute Intensity、Tensor Cores原理

INT32、FP32、FP64、TensorCore,这些是各自独立的计算单元。L1 cache/Shared Memory,是SM内共享的。一个SM里,有4个processing block。GPU: 并行计算任务,高吞吐。CPU: 多类型任务,低延迟。

2024-12-15 08:00:36 545

原创 Perplexity(PPL)和大模型评测

整个句子,所有N个token的概率相乘,再开N次方,可视为每个token的“平均概率”,越大越好;(可以视为,生成这个句子的可能性,相当于从PPL个选项里蒙对的可能性,越小表示越确定)再求倒数,即为困惑度perplexity(PPL),越小越好。注意:有的大模型倾向选择前面的选项。因此要实现把选项顺序打乱。

2024-12-14 17:38:25 483

原创 PPO系列5 - PPO具体实现

内层循环:GAE优势和P'保持不变,用训练模型计算该序列,得到每个token的P,加和至PPO loss里;状态价值模型计算该序列,得到每个token的状态价值V,用外循环计算好的Return做label, 计算L2损失,加入V的loss里。更新一次模型(训练模型和状态价值模型因为是共享参数,都被更新了)。外层循环:用训练模型采样一个序列(并得到每个token的P'),用状态价值模型得到每个token的状态价值V, 结合Reward打分和KL散度得到的加和Reward,得到每个token的GAE优势。

2024-12-14 11:07:19 401

原创 PPO系列4 - Reward模型训练

因此,Reward模型,只需要把生成式模型的最后一层(LM Head),替换成生成1个得分的层(Score Head),即可。例如:我来评判一篇文章《赤兔之死》是否写得好,比自己写出这种水平的文章,要容易很多。不能使用太差的模型,因为Reward模型是“老师”的角色,差老师教不出好学生。但可以使用和生成模型能力差不多的模型。因为:Reward打分任务,比生成任务,可以使用和生成模型能力差不多的模型(或者更强的模型),作为Reward模型。,SFT和强化学习,都只是让大模型能力尽量发挥出来。

2024-12-13 22:31:16 340

原创 PPO系列3 - PPO原理

Off Policy: 小明上课玩手机,老师批评了小明,和小明同样喜欢上课玩儿手机的小王,看到小明因为这个被批评后,做了改正不玩手机了。行为是小明产生的,改正是小王做的,所以是Off Policy。On Policy: 小明上课玩手机,老师批评了小明,小明做了改正不玩手机了。行为是小明产生的,改正也是小明做的,所以是On Policy。采集数据的模型,和训练的模型,是同一个。缺点:慢,生成一批样本数据,训练一次,又要重新生成下一批。采集数据的模型,和训练的模型,不是同一个。以上就是PPO的梯度。

2024-12-13 21:45:57 231

原创 PPO系列2 - GAE优势函数

痛点:好的局势下,所有action产生的轨迹,都拿到正的reward;坏的局势下,都拿到负的reward;解决:Return减去"平均Return",用这个"差异"("优势"),代替纯的Return。,其只会影响t时刻之后得到的Reward,和之前的无关。,对接下来邻近的几个Reward关系较大,跟远的关系小。1. 只累加t时刻之后的Reward。B是"平均Return"

2024-12-13 10:07:27 417

原创 PPO系列1 - 强化学习、策略梯度的原理

该游戏中,State就是游戏画面,Reward就是吃的分、通关等奖励(或者被打死等惩罚),Action就是超级玛丽下一步的动作。Action给到Environment,Environment给出State和Reward,给到Agent去做下一步Action;Agent根据上一步Environment给出的State和Reward,以及自己的内在策略,做出Action;,不能只看这一步的Reward,而要尽量使今后的长远Reward之和,也就是Return,最大化。

2024-12-13 08:12:37 204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除