- 博客(362)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 算法工程汇总(通信框架)
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
571
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 算法工程知识汇总(神经网络)
神经网络预测推理---TensorRT: (比Tensorflow的推理快20倍)1. Kernel融合: 横向融合(例如1*1卷积等), 纵向融合(卷积+bias+Relu),消除concatenate层(预分配输出缓存,跳跃式的写入);2. 量化成FP16或者INT8: 减少显存占用,加快推理速度;3. Auto-Tuning:例如,对于卷积计算有若干种算法,TensorRT会...
2020-02-06 18:21:32
496
原创 Context并行
即每张卡做1/N的sequence tokens,先计算好自己这些tokens的Q、K、V,然后每次用自己的Q,计算1/N的K和V,GPU之间达成环形来每次传输1/N的K和V;每个GPU和所有K、V计算完毕后,将N个结果向量加和起来,就得到了自己这1/N tokens的attention计算结果;N张卡参与CP,将sequence划分为2N份,GPU-0: 0+5, GPU-1:1+4, GPU-2: 2+3,这样每卡之间的计算量就均匀了;Context并行,天然就是接上Sequence并行,一起用的;
2024-08-25 00:29:38
342
转载 LLM训练的显存占用(LoRA、QLoRA)
对于llama3.1 8B模型,FP32和BF16混合精度训练,用的是AdamW优化器,请问模型训练时占用显存大概为多少?全参模型和Optimize的状态,不需要了,因为梯度更新不更新全参模型;),这会导致梯度消失无法训练,所以我们不能全都用FP16,还需要FP32来进行精度保证。梯度,不需要计算原始模型部分的梯度,也基本不占用显存。LoRA矩阵的梯度,很小,可忽略;降低显存最直观的方式:减少batch-size,由64降至1,显存降至约1GB了。(第1个2是K+V,第2个2是BP16 2个字节)
2024-08-24 12:31:45
5
原创 LLama3技术报告笔记(系统)
通用分布式存储:240PB, 共7500个存储节点(30TB/节点), 全部是SSD;稳定吞吐量2TB/s,峰值吞吐量7TB/s (平均每个节点是1GB/s);collective通信库,把每个通信查分成16个流,便于通信load balance调度;(同一次collective通信操作,可被调度至多个路径上去,经过不同的中间交换机)3层交换机(上面2层,每2个叶子之间有多个交换机);网络拓扑感知:Model并行策略,job scheduler,可根据当前job所在节点的网络拓扑,进行调度和策略调整;
2024-08-23 09:00:56
151
转载 腾讯混元大模型负责人访谈摘要
规划的能力、深度推理能力,面对一个很复杂的任务,模型需要首先把它拆分成若干个子问题,每一个子问题可能还需要联网、需要计算、需要判断,然后再串行起来,这样已经非常像人在解决一个复杂问题时的表现。这些背后我们看到的是,OpenAI 如何把模型能力跟人类解决复杂问题的分析、推理工作相结合,这也体现了 OpenAI 现在思考的一些问题的方向。当前 GPT-4 这类模型的智能所处的阶段可能类似于一个高中生,或者刚上大学的本科生的水平;L3:智能体,不仅能思考,还可以采取行动的AI系统。
2024-08-21 22:49:52
19
转载 RLHF PPO直观解释
每生成1个Token:自己这个Token就是Action,用Reward模型、Actor和Reference模型计算得到该步Reward,用Critic模型计算得到预估价值V;
2024-08-18 20:50:01
19
原创 LLama3技术报告笔记(SFT+DPO)
在原有的2类response基础上,加入一类edited:把人在chosen response上的修改;和经典方法效果是类似的,比经典方法的训练速度快;(经典方法:prompt和每个response分别当作1个样本,预测结果是1个分数)把prompt和2~3个response放在同一个样本里(response顺序打乱)reward model: 基于预训练模式,使用人工标注的Pair数据,得到;(output到底是什么?
2024-08-11 21:13:29
178
原创 LLama3技术报告笔记
2. Scale: LLama3是405B参数量,LLama2是70B,相差大约5倍;预训练数据量,相差大约10倍;计算量相差大约50倍(预训练数据量:LLama3是15.6T tokens;,他们得到,Given固定的计算量的前提下(也就是预算钱固定),405B模型这个大小,能获得最强的最终效果;使用了SFT+RejectionSampling+DPO,放弃强化学习(不稳定,难以scale)使用了经典的dense transformer,放弃稀疏MoE,为了让训练更稳定;5倍*10倍=50倍。
2024-08-07 08:41:25
150
原创 LLM推理优化
vLLM的Paged Attention:vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention | vLLM Blog
2024-07-23 20:39:37
142
原创 Pipeline并行:GPipe,1F1B, Interleaved-1F1B, Looped-BFP
1F1B等,是每个GPU负责连续的几个layers,例如:GPU1:[1,2,3,4], GPU2:[5,6,7,8], GPU3:[9,10,11,12], GPU4:[13,14,15,16]...本方法,每个GPU负责多个小段的连续layers,例如: GPU1: [1,2,9,10], GPU2:[3,4,11,12],GPU3:[5,6,13,14],GPU4:[7,8,15,16]总体目标:增大吞吐(减少气泡),减少显存(中间缓存的activation尽可能少),保持和原始计算的结果等价;
2024-07-21 20:53:46
275
原创 PyTorch Autograd内部实现
优化:如果is_leaf=False,则说明不需要该Tensor的grad,所以,grad_fn直接将output梯度传递给下一个grad_fn了,绕开对该Tensor的grad的更新;
2024-07-16 08:52:55
315
原创 PyTorch使用细节
with torch.no_grad() : 不再缓存activation,节省显存;model.eval() :让BatchNorm、Dropout等失效;
2024-07-14 22:30:16
301
原创 PyTorch论文
torch.from_numpy()和Tensor.numpy(),其返回值和原值,是share同一片内存的,改一个的值另一个的值也会改动;4. 简单而不完善的设计:目的是把有限的人力,投入到跟上AI发展的快节奏,快速支持新feature上;1. 使用算法和数据开发者熟悉的Python做编程接口,接入Python生态;方便在中间随时print中间变量(Tensor)的值,方便设断点debug;为了易用性,牺牲10%性能是可以的,牺牲太多不行;接口尽量简单,把复杂性隐藏起来;兼容Python生态,易于扩展。
2024-07-14 10:18:25
388
原创 文档去重(TF-IDF,MinHash, SimHash)
在某个hash函数上,1个doc里的所有word,在该函数上的hash值,其中最小的那个,记下来;该doc得到100个最小hash值,该100维向量,作为其signature;IDF:该词在所有文档中的多少个文档出现是DF,lg(N/(1+DF))2个doc的相似度,就是100个维度里的相等数目,除以100;2个doc有些相似有些不相似,如何衡量这个相似度;直接用Jaccard距离,计算量太大。TF:该词在该文档中的出现次数,100个hash函数;
2024-07-06 20:19:20
373
转载 LLM推理,显存都去哪儿了
Mastering LLM Techniques: Inference Optimization | NVIDIA Technical Blog
2024-06-20 11:58:43
65
转载 LLM训练,显存都去哪儿了
原文:https://medium.com/@maxshapp/understanding-and-estimating-gpu-memory-demands-for-training-llms-in-practise-c5ef20a4baffDeploying Large Language Models can yield significant accuracy improvements for specific business applications. Yet, the training proc
2024-06-20 08:39:41
40
转载 LLama2使用的BPE Tokenizer
字节对编码(Byte-Pair Encoding,简称BPE)最初是作为一种压缩文本的算法开发的,然后由OpenAI用于训练GPT模型时的标记化。它被许多Transformer模型广泛使用,包括GPT、GPT-2、RoBERTa、BART和DeBERTa。
2024-06-19 10:44:52
98
原创 用TensorRT-LLM进行LLama的推理和部署
再用TensorRT-LLM将其compile为TensorRT engine;然后可用TensorRT-LLM的C++ runtime来跑推理(或者模型放到Triton Repo上,并指定TensorRT-LLM为backend)Input的Tokenizing和Output的De-Tokenizing,视作前处理、后处理,创建"Python Model";整个流程用一个"Ensemble Model"来表示,包含以上两个"Model"以及真正的GPT-Model;
2024-06-17 10:27:31
492
原创 DeepSpeed Pipeline并行
DeepSpeed为了克服一般Pipeline并行的forward时weights,和backward时计算梯度的weights, 二者不相同的问题,退而求其次,牺牲性能,采用gradient-accumulate方式,backward时只累积梯度至local,并不更新weights;多个micro-batch完成之后,才all-reduce一把并更新weights;
2024-06-12 10:20:48
267
原创 DeepSpeed Monitoring & Comm. Logging
("Time per step", post-pre, model_engine.global_samples)],自动监控:DeepSpeed自动把重要metric记录下来。支持多种后端:Tensorboard、WandB、Comet、CSV文件;
2024-06-12 07:16:55
516
原创 DeepSpeed Mixture-of-Quantization (MoQ)
quantize_type:对称量化,量化结果为signed int(-128~127),就是float的0对应量化后int的0;非对称量化,量化结果为unsigned int(0~255),就是float的0对应INT中的某个值(不一定是127、128);我的理解是,量化版kernel目前还不是很ready。1. 从16-bit INT开始训练,逐渐减1bit,训练一些steps就减1bit,直至减至8bit INT;2. 多久减1bit,这个策略,使用模型参数的二阶特征来决定,每层独立的;
2024-06-11 22:32:00
292
原创 DeepSpeed Model Compression
减少hidden layer层数,不改变层的宽度;输入teacher model, 输出student model。目的:降低延迟,减少模型大小;
2024-06-11 10:37:00
442
原创 DeepSpeed MoE
下例,启动2个DP replica,每个DP replica包含2个MoE rank,每个MoE rank包含4个MoE FFN,每个GPU放置一个MoE rank;ep_size指定了MoE进程组大小,一个模型replica的所有MoE都分布在mp_size这些GPU卡上。计算量没有增加(gating+小FNN,比以前的大FNN计算量要小);前面的层,Experts数量少些,后面的层Experts数量多些;Residual:每层都过一个固定的MLP,并和选中的Expert输出结果,相加;
2024-06-10 21:13:52
248
1
原创 DeepSpeed Learning Rate Scheduler
训练试跑,该lr scheduler从小到大增长lr,同时记录下validatin loss;人来观察在训练多少step之后,loss崩掉(diverge)了,进而为真正跑训练,挑选合适的lr区间;如上图,灰线lr增长的块,前面学得更快,某一时刻就diverge了;橙线lr增长慢,但最终val-loss要比灰线的最低点要低;
2024-06-10 17:48:58
196
原创 DeepSpeed Profiling
通过观察上层module的参数量、计算量、延迟、吞吐量,找到包含很多”小“计算的module,从而看看有没有可能进一步优化为一个”大“计算;(kernel fusion)和PyTorch profiler的区别:DeepSpeed是从Module角度来看;PyTorch是从operator角度来看;小写flops指计算量;大写FLOPS指flops每秒;FLOPS,可以和GPU理论上界比较,看看差多少;backward计算量,是forward的2倍;乘加运算量(MAC) * 2 = flops。
2024-06-10 15:10:34
242
原创 DeepSpeed Huggingface模型的自动Tensor并行、kernel注入、训练阶段的优化版kernel
在后台,DeepSpeed会把运行高性能kernel(kernel injection),加快推理速度;
2024-06-10 09:05:27
218
原创 DeepSpeed Autotuning
optimizer, scheduler, fp16等;fast-mode试跑(大概27分钟跑完),结果:(gas是gradient accumulation steps;用不同的系统参数试跑用户的模型训练,尝试不同的参数组合,给出每种参数组合的速度,供用户去选择较块的来进行真正的训练。
2024-06-09 23:36:04
214
原创 DeepSpeed入门
分布式和mixed-precision等,都包含在deepspeed.initialize和model_engine里面了;--exclude: 黑名单节点和GPU编号;例:--exclude="worker-2:0@worker-3:0,1"--include: 白名单节点和GPU编号;例:--include="worker-2:0,1"支持transformers: --deepspeed,以及config文件;--num_nodes: 在几台机器上跑;--num_gpus:在几张GPU卡上跑;
2024-06-09 23:01:23
788
原创 Kubernetes配置文件
Kubernetes Deployment YAML File with Examples (spacelift.io)
2024-06-07 14:51:35
96
原创 Zero++原理
Zero3的Weights分片在各个rank中;在forward和backward中,用到整层weights时都要所有rank进行AllGather;我认为:最左图不太准确;4.690可以作为127,-9.220可以作为-128,FP16的0值和INT8的0值不需要重合的;对整个矩阵进行量化,误差大;分成多个子矩阵,分别量化,误差小;1. Weights在AllGather中的量化;使用FP16-->INT8量化,减少一半通信量;
2024-06-06 07:55:24
216
原创 Zero Infinity原理
如上图,一次加载一个layer的一个weights分片(一层的1/DP的参数量),Broadcast至所有rank,计算各自的梯度,再Reduce至其中一个负责的rank,offload存放至CPU Memory,释放GPU里的weights和梯度;则将其分片,每次一片的offload加载、计算、offload结果、释放,顺序执行每个分片;将用于backward的activations,offload至CPU memory;Zero-Offload是和Zero-2一起用的;
2024-06-05 08:49:22
230
原创 Adam optimizer的原理
可把E这个机制,视为自适应学习率。对梯度太大的w,把收敛速度拉得慢一些;梯度太小的w,把收敛速度拉的快一些;(太快了,怕出事故,拉慢些;太慢了,要助力,拉快些)E[gt^2]: 梯度平方的带权Moving average;在之前保持的正确的方向上,加速收敛;vt: mementum(冲量)
2024-06-04 17:46:18
303
原创 Zero Offload原理
update的时候直接把offload到CPU上的gradients以及常驻CPU内存的optimizer-states, 更新到同样在CPU内存里的模型参数,然后把模型参数swap到GPU上,最后要调GPU的allgather来让所有GPU上的weight-partition都gather到所有GPU上;Activation checkpoint: Backward时需要用到的activation,可以checkpoint到CPU内存保存一会儿,Backward用的时候再swap到GPU显存;
2024-06-04 11:34:48
267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人