Transformer系列:1. 从RNN到Transformer
场景: 图像信息:任务为理解图像内容,采用卷积神经网络; 序列信息:任务为理解语音/文字/视频,采用循环神经网络。 对于序列信息,由于按时序输入的数据之间非独立,前后数据之间具备相关性,因此网络需要存储信息的能力。 RNN 网络结构 RNN通过使用带自反馈的神经元,能够处理任意长度的序列 时序sequence:RNN能建模序列数据,序列指的是前、后输入数据\((x^{(t)}, x^{(t+1)})\)不独立,相互影响; 循环recurrent:对每个输入的操作都是一样的,循环往复地重复这些相同操作,每时刻有相同参数W和U(参数共享); 记忆memory: 隐藏层\(h_{(t)}\)中捕捉了所有时刻t之前的信息,理论上\(h_{(t)}\)记忆的内容可以无限长,然而实际上记忆还是有限的; 正向计算 反向传播BPTT 梯度消失 / 梯度爆炸 循环神经网络的递归结构,导致梯度消失/梯度爆炸现象更明显 梯度爆炸:可采用梯度截断解决 由于梯度消失,RNN无法处理长期依赖关系。 比如,考虑一个语言模型,试图根据之前单词预测下一个; 如果要预测“The clouds...
Transformer 的 KV Cache
Problems 对于LLMs,每次矩阵乘法都由若干个浮点运算组成,因此其性能受限于GPU的FLOPS;随着输入的token长度增加,Transformer的自注意力机制与输入序列长度呈平方关系增长,产生最大的延迟开销。 为了解决推理延迟和吞吐量问题,当前的大模型服务系统通常采用KV Cache:通过缓存已计算的Key和Value矩阵,以避免在解码阶段重复计算键和值的投影(空间换时间)。然而在以下场景中KV Cache占用内存较大,影响推理性能: 处理长序列或多轮对话; 对于多个客户端请求,每个请求分别保留各自的KV Cache。 KV Cache的核心问题在于:占用大量内存和访存带宽;在生成阶段引入大量重复计算。本篇博客探讨KV Cache压缩技术。 Backgrounds 推理加速的衡量指标如下: 吞吐量:每生成一个token,服务商需要支付的算力成本。可以通过tokens per second(tps)衡量,即推理服务器单位时间内能处理针对所有用户和请求生成的输出token数。 延迟:包括两个指标: TTFT(Time To...
FSDP设计解读
Meta官方文档 FSDP(Fully Sharded Data Parallelism)将AI模型的参数分片至多个数据并行的workers上,可选择性地将训练中的计算移至CPU上。每个worker上microbatch的数据是不同的。 分片(Shard):官方文档:Scaling services with Shard Manager 通常数据并行训练要求在每个GPU上,保存模型副本(引入冗余);模型并行训练在workers(GPUs)之间增添了额外的通信负担,用于同步激活值。 激活值(activations): 神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。常见的激活函数都是非线性的,因此向神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。 常见激活函数:参见Activation Functions — All You Need...
基于图像处理的智能纤维截面分析系统:系统展示
系统演示 (function(){var player = new DPlayer({"container":document.getElementById("dplayer4"),"theme":"#FADFA3","loop":true,"video":{"url":"/posts/27b7154a/1.mp4","pic":"1.png"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})()
《算法导论》笔记
该篇为《算法导论》学习笔记,包含部分章节的理论阐释、典型问题、和代码实现。 算法 时间复杂度 1.渐近符号: θ--渐近紧确界; f(n)=θ(g(n)):g(n)是f(n)的渐进紧确界. 定义:存在c1,c2,n0,对任意n>=n0,有:0<=c1g(n)<=f(n)<=c2g(n). f(n)=θ(g(n)),当且仅当:f(n)=O(g(n))且f(n)=欧姆. O--渐近上界;[欧姆]--渐近下界 o--非紧确渐近上界;ω--非紧确渐近下界 f(n)=O(g(n))中,0<=f(n)<cg(n)对某个常量c>0成立; f(n)=o(g(n))中,0<=f(n)<cg(n)对所有常量c>0成立. 2.主定理求时间复杂度: T(n)=aT(n/b)+f(n). 比较n1和f(n):选择多项式意义上更大的。 1.f(n)=O(n(logb(a)-ε)),则:T(n)=θ(n(logb(a)). 2.f(n)=0(n(logb(a))),则:T(n)=θ(n(logb(a)lgn)....
纸翼传问平台:平台功能、CICD、降级服务、自动扩缩容展示
该平台为北航2024年秋暑期软件工程实践项目。 CICD部署 (function(){var player = new DPlayer({"container":document.getElementById("dplayer1"),"theme":"#FADFA3","loop":true,"video":{"url":"/posts/8b715a29/4-CICD.mp4","pic":"1.png"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})() 降级服务 (function(){var player = new...
纸翼学术成果分享平台:平台展示
该平台为北航2024年秋软件系统分析与设计课程团队项目,致谢我的9位伙伴们,和Bug-捉迷藏小组。 平台演示 (function(){var player = new DPlayer({"container":document.getElementById("dplayer0"),"theme":"#FADFA3","loop":true,"video":{"url":"/posts/39315f07/1.mp4","pic":"1.png"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})() 系统架构图 alt text
并行训练系列:1. Overview
该篇摘自The Ultra-Scale Playbook: Training LLMs on GPU Clusters. 在单个GPU上训练 在单个GPU上训练,通常包括三个步骤: 1. forward pass:将输入传入模型,产生输出; 2. backward pass:计算梯度; 3. optimization:使用梯度更新参数。 batch size的影响 超参数batch size:小的batch size在训练初期有助于快速完成训练过程,达到一个较优learning point;但在训练后期,小的batch size导致梯度噪声增大,模型难以收敛至最优性能点;大的batch size虽然能给出精确的梯度估计,但会降低每个训练样本的利用效率,从而导致收敛变慢,并可能浪费计算资源。 batch...
C++泛型算法
本篇隶属C++ Primer中C++标准库专题,当前关注范型算法。 标准库容器只定义了很少的操作;因此提供了一组范型算法,其中大多数独立于特定的容器,具备通用性。 范型算法 概述 大多数算法在头文件algorithm中;头文件numeric中定义了一组数值范型算法。 范型算法本身不会执行容器的操作;只会运行于迭代器之上,执行迭代器的操作。 只读算法 只读取输入范围的元素,从不改变元素 find 12int val=42;auto result=find(vec.cbegin(), vec.cend(), val); find前两个参数:表示元素范围的迭代器;第三个参数:一个值。将范围中每个元素与给定值比较: 返回指向第一个等于给定值元素的迭代器; 若范围内无匹配元素,返回第二个参数,表示搜索失败。 accumulate 1int sum=accumulate(vec.cbegin(), vec.cend(), 0); // 将sum设置为:vec中元素之和 第三个参数指定保存和的对象类型,在该类型上必须定义了"+"运算符 12// 错误:const...