Transformer系列:2. Attention机制,MHA,MQA和GQA
Scaled Dot-Product Attention 只使用一个注意力头计算权重。 假设有输入序列\(X=(x_1, x_2,..., x_n)\),对于每个词\(x_i\)(维度为\(d\)),计算其与所有其他词的相关性,并赋予不同的权重,最后对这些信息加权求和,得到新的表示。 输入矩阵:\(X\in\mathbb{R^{n\times d}}\). \[ Attention(Q, K, V)=softmax(\frac{QK^{T}}{\sqrt{d_k}})V \] 这里,\(Q\in\mathbb{R^{n\times d_k}}, K\in\mathbb{R^{m\times d_k}, V\in\mathbb{R^{m\times d_v}}}\)。实质上,一个Attention层是:将\([n, d_k]\)的序列\(Q\)编码成一个新的\(n\times d_v\)序列。 从向量角度看: \[ Attention(q_t, K, V)=\sum_{s=1}^m...
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
模型并行计算
该篇摘自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...
VLM-R1源码解析
VLM-R1基于TRL框架。 GROP方法 GRPO 是一种在线学习算法,它通过使用训练模型本身在训练期间生成的数据进行迭代改进。其理念是:最大程度利用生成补全,同时确保模型始终接近参考策略。 分为4个步骤:生成补全、计算奖励、估计KL散度、计算损失。 要点 引入critic:使用预测baseline改进奖励 使用绝对奖励,单纯比较大小,会导致:奖励波动大,以及对部分改进的激励不足;因此引入Critic:使用“预测baseline”来改进奖励 对于给定状态(\(s_t\))和动作(\(o_t\)),该baseline为价值函数\((V_\psi(s))\);训练目标由单纯的reward,转为超过该baseline的程度,由优势函数表示为: \[ A_t=r_t-V_\psi(s_t) \] 即训练中优化内容为: \[ \mathcal{J}_{adv}(\theta)=\mathbb{E}[A(o)] \\ where...