大语言模型(LLM)入门级选手初学教程 II

模型架构

在这里插入图片描述
5.1

  1. 输入编码:
    i. 词元序列编码 Input Embedding Module
    ii. 位置编码(Position Embedding, PE),Transformer 的编码器结构本身无法识别序列中元素的顺序。
    𝒙𝑡 = 𝒗𝑡 + 𝒑𝑡
    ** 绝对位置编码局限于建模训练样本中出现的位置,无法建模训练数据中未出现过的位置,因此极大地限制了它们处理长文本的能力
  2. 多头自注意力机制
    i. 能够直接建模任意距离的词元之间的交互关系,进而有效捕获长程依赖关系,具有更强的序列建模能力,支持大规模参数的高效优化
    在这里插入图片描述
    在这里插入图片描述
  3. 前馈网络层(Feed Forward Netwok, FFN)
    前馈网络层通过激活函数引入了非线性映射变换,提升了模型的表达能力,从而更好地捕获复杂的交互关系
    在这里插入图片描述
  4. 编码器:在注意力和前馈网络后,模型使用层归一化和残差连接来加强模型的训练稳定度(残差连接(Residual Connection)将输入与该层的输出相加,实现了信息在不同层的跳跃传递,从而缓解梯度爆炸和消失的问题。而LayerNorm 则对数据进行重新放缩,提升模型的训练稳定性)
    在这里插入图片描述
  5. 解码器,自回归生成
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  1. 归一化方法-加强神经网络训练过程的稳定性
    a. LayerNorm: Batch Normalization, BN,难以处理可变长度的序列数据和小批次数据,对batch内数据样本做计算,因此,提出层归一化-计算每一层(对每个样本内)中所有激活值的均值𝝁 和方差𝝈,从而重新调整激活值的中心和缩放比例:
    在这里插入图片描述
    b. 均方根层归一化(Root Mean Square Layer Normalization, RMSNorm):仅利用激活值总和的均方根RMS(𝒙) 对激活值进行重新缩放,使模型在训练速度和性能上均具有一定优势
    在这里插入图片描述

    c. DeepNorm:稳定深层Transformer的训练,在LayerNorm 的基础上,在残差连接中对之前的激活值𝒙 按照一定比例𝛼 进行放缩,层数可以被成功地扩展至1,000 层,进而有效提升了模型性能与训练稳定性。GLM-130B使用
    在这里插入图片描述

  2. 归一化模块位置
    通常有三种选择,分别是层后归一化(Post-Layer Normalization, Post-Norm)、层前归一化(Pre-Layer Normalization, Pre-Norm)和夹心归一化(Sandwich-Layer Normalization, Sandwich-
    Norm)
    a. Post-Norm:归一化模块被放置于残差计算之后,优点:有助于加快神经网络的训练收敛速度,使模型可以更有效地传播梯度,从而减少训练时间;以降低神经网络对于超参数(如学习率、初始化参数等)的敏感性,使得网络更容易调优,并减少了超参数调整的难度。缺点:在输出层附近存在梯度较大的问题,不稳定。通常与其他策略联合使用
    在这里插入图片描述
    b. Pre-Norm:将归一化模块应用在每个子层之前,在最后一个Transformer层后还额外添加了一个LayerNorm。仅仅对输入的表示进行了归一化,从而可以防止模型的梯度爆炸或者梯度消失现象,稳定但性能却逊色于采用了Post-Norm 的模型。
    在这里插入图片描述
    c. Sandwich-Norm:在Pre-Norm 的基础上,在残差连接之前增加了额外的LayerNorm,避免Transformer 层的输出出现数值爆炸的情况。但仍然会引发训练崩溃,不如pre-norm稳定
    在这里插入图片描述

  3. 激活函数 - 引入非线性变化,从而提升神经网络的模型能力
    a. ReLU(Rectified Linear Unit)激活函数,神经元失效的问题,被置为0 的神经元将学习不到有用的信息
    在这里插入图片描述
    b. 其他
    在这里插入图片描述
    c. GLU(Gated Linear Unit):引入了两个不同的线性层,性能更好
    在这里插入图片描述
    在这里插入图片描述

  4. 位置编码 - 自注意力模块具有置换不变性,无法捕捉序列中的顺序关系
    a. 绝对位置编码
    在这里插入图片描述

    b. 相对位置编码: 根据键和查询之间的偏移量计算得,通常应用于注意力矩阵的计算中,而不是直接与词元本身的位置编码进行相加。r_j引入相对位置信息,全局参数u和v衡量语义信息和相对位置信息本身的重要程度
    在这里插入图片描述在这里插入图片描述
    r表示查询和键之前偏移的可学习标量
    在这里插入图片描述
    c. 旋转位置编码(Rotary Position Embedding, RoPE):根据绝对位置信息的旋转矩阵来表示注意力中的相对位置信息
    根据位置信息为序列中每个词元所对应的设置了独有的旋转矩阵,并和对应的查询Q和键K进行相乘进行融合,位置t的旋转矩阵可定义为:
    在这里插入图片描述
    位置索引为𝑖 的旋转矩阵和位置索引为𝑗 的旋转矩阵的转置的乘积等同于位置索引为它们相对距离𝑖− 𝑗 的旋转矩阵。注意力公式可以调整如下:
    在这里插入图片描述
    RoPE 在处理查询和键向量的时候,将每对连续出现的两个元素视为一个子空间。因此,对于一个长度为𝐻 的向量来说,将会形成𝐻/2 个这样的子空间。每一个子空间𝑖 ∈ {1, . . . , 𝐻/2} 所对应的两个元素都会根据一个特定的旋转角度𝑡 · 𝜃𝑖 进行旋转,其中𝑡 代表位置索引,而𝜃𝑖 为该子空间中的基。b=10000
    在这里插入图片描述
    每个子空间定义了波长𝜆𝑖,即在该子空间上完成一个完整周期(2𝜋)旋转所需的距离,b越大,波长越大,具有良好的外推性以及长期衰减的特性。
    在这里插入图片描述
    代码实现如下:
    在这里插入图片描述
    d. ALiBi位置编码: 通过在键和查询之间的距离上施加相对距离相关的惩罚来调整注意力分数
    在这里插入图片描述
    𝑖 − 𝑗 是查询和键之间的位置偏移量,𝑚 是每个注意力头独有的惩罚系数,惩罚分数是预先设定的,不需要引入任何可训练的参数,优秀的外推性能,能够对于超过上下文窗口更远距离的词元进行有效建模。
    在这里插入图片描述
    在这里插入图片描述

  5. 注意力机制
    a. 完整自注意力机制:对于序列长度为𝑇 的序列需要𝑂(T^2) 的计算复杂度
    b. 稀疏注意力机制:
    * 滑动窗口注意力机制(Sliding Window Attention, SWA):滑动窗口注意力设置了一个大小为𝑤 的窗口,对每个词元𝑢𝑡,只对窗口内的词元[𝑢𝑡−𝑤+1, . . . , 𝑢𝑡 ] 进行注意力计算,从而将复杂度降低到𝑂(𝑤𝑇)。通过信息的逐层传递,模型实现了随着层数线性增长的感受野,从而获取远处词元的信息。
    在这里插入图片描述

    c. 多查询/分组查询注意力(Multi-Query Attention, MQA/ Grouped-Query Attention, GQA):MQA针对不同的头共享相同的键和值变换矩阵,减少了访存量,提高了计算强度,从而实现了更快的解码速度,且对于模型性能产生的影响也比较小;GQA 将全部的头划分为若干组,并且针对同一组内的头共享相同的变换矩阵。这种注意力机制有效地平衡了效率和性能,被LLaMA-2 模型所使用。
    在这里插入图片描述
    d. 硬件优化的注意力机制:FlashAttention 通过矩阵分块计算以及减少内存读写次数的方式,提高注意力分数的计算效率;PagedAttention 则针对增量解码阶段,对于KV 缓存进行分块存储,并优化了计算方式,增大了并行计算度,从而提高了计算效率。

  6. 混合专家模型
    在这里插入图片描述

  • 随着模型参数规模的扩大,计算成本也随之增加。引入了基于稀疏激活的混合专家架构(Mixture-of-Experts, MoE),旨在不显著提升计算成本的同时实现对于模型参数的拓展。
  • 每个混合专家层包含𝐾 个专家组件,记为[𝐸1, 𝐸2, . . . , 𝐸𝐾],每个E为一个前馈神经网络。对于输入的每个词元,通过路由网络(或称为门控函数)𝐺 来计算该词元对应于各个专家的权重。在路由函数中,首先通过线性层𝑾𝐺 ∈ R^𝐻×𝐾 映射为𝐾 个专家的得分,并基于此选择出概率最高的𝑘 个专家进行激活。随后,这𝑘 个专家的得分将被送入softmax函数计算出它们的权重𝐺(𝒙𝑡 ) = [𝐺(𝒙𝑡 )1, . . . ,𝐺(𝒙𝑡 )𝑘],没有被选择的专家权重将被置为0。
    在这里插入图片描述
    在这里插入图片描述

Mixtral 每一层都配备了8 个专家(7B),并对每个词元选择2 个专家进行后续计算。在每次计算被激活的参数仅仅有13B的情况下,其性能超越了更熟规模更大的LLaMA-2 (70B),代码如下:
在这里插入图片描述

  1. LLaMA 的详细配置
    在这里插入图片描述
    在这里插入图片描述

5.2 主流架构

在这里插入图片描述

  1. 编码器-解码器架构
  2. 因果解码器架构:绝大部分主流的大语言模型采用了单向的掩码注意力机制,使得每个输入的词元只关注序列中位于它前面的词元和它本身,进而自回归地预测输出的词元
  3. 前缀解码器架构:GLM-130B和U-PaLM,输入(前缀)部分使用双向注意力进行编码,于输出部分利用单向的掩码注意力利用该词元本身和前面的词元进行自回归地预测。在编码和解码过程中是共享参数

5.4 长上下文模型

给定一个预训练后的大语言模型,如何有效拓展其上下文窗口以应对更长的文本数据成为当前学术界的研究焦点

  1. 扩展位置编码:训练集数据长度分布范围外的位置编码无法充分训练,导致处理长文本性能下降,所以要对位置编码进行扩展,超出原始上下文窗口的文本上,也能够表现出较好的建模能力,即外推(Extrapolation)能力。RoPE 在未经特殊修改的情况下并不具备良好的外推能力,旋转角度超过其训练中的角度分布范围需要进行改进,旨在提升其在不经过训练或继续训练的情况下对于长文本的建模能力。
  • 在RoPE 的每个子空间𝑖 上,对于相对位置𝑡,旋转角度𝑓 (𝑡, 𝑖) = 𝑡 · 𝜃𝑖 的修改可以分解为对距离𝑡 的修改𝑔(𝑡) 和对基𝜃𝑖 的修改ℎ(𝑖)
    在这里插入图片描述
  • 直接微调:不修改RoPE,使用相应的长文本数据对于模型进行微调,但旋转角度增大可能导致收敛缓慢,并需要大量数据进行继续预训练
  • 位置索引修改:修改位置索引𝑔(𝑡) 来调整所有子空间的旋转角度,从而保证其不超过原始上下文窗口所允许的最大值
    • 位置内插:对于位置索引进行特定比例的缩放,保证旋转角度不会超过原始上下文窗口的最大值,优点是训练代价小,缺点是在处理较短的文本时,由于位置索引的缩放,可能会对模型的性能产生一定的负面影响。
      在这里插入图片描述

    • 位置截断: 针对不同距离采用了不同的处理方式。对模型中近距离敏感的位置索引进行保留,同时截断或插值处理远距离的位置索引。先设定一个小于原始上下文窗口长度的窗口大小𝑤 (𝑤 ≤ 𝑇max)。窗口内位置索引不变,超出部分截断或者线性插值(将目标上下文窗口长度的位置索引映射回原始上下文窗口长度)
      在这里插入图片描述

  • 基修改:每个子空间𝑖 都有一个对应的波长𝜆𝑖,表示在该子空间上旋转一周所需要的距离。某些子空间的波长可能会超过上下文窗口的长度(𝜆𝑖 > 𝑇max),导致模型在这些子空间上无法对完整的旋转周期进行训练(关键子空间),面临长文本时旋转角度对应的正余弦函数值并没有在训练阶段出现过,注意力值会出现异常。所以需要对子空间的基ℎ(𝑖) 进行缩放,可以通过对基的底数修改以及对基的截断实现
    在这里插入图片描述
    • 底数调整:𝛼 是一个大于等于放缩比例的数,通过对底数进行增大,实现缩小基来处理更长文本的能力
      在这里插入图片描述

    • 基截断:修改关键子空间来避免产生过大的旋转角度
      在这里插入图片描述

  1. 调整上下文窗口
    采用受限的注意力机制来调整原始的上下文窗口,从而实现对更长文本的有效建模
  • 并行上下文窗口:分而治之,将输入文本划分为若干个片段,每个片段都进行独立的编码处理,共享位置编码,无法有效地区分不同段落之间的顺序,可能会限制模型的表现能力
  • Λ 形上下文窗口:有选择性地关注每个查询的邻近词元以及序列起始的词元,同时忽略超出这一范围的其他词元。无法充分利用所有的上下文信息。
  • 词元选择:挑选出最重要的𝑘 个词元,以实现对于完整注意力的有效拟合
    • 查询与词元相似度:可以首先选定若干层,针对这些层从外部存储中检索到最相关词元的键值对,进一步将其送入注意力计算模块中,为模型补充远程语义信息;而在其他层中,模型仍然针对上下文窗口内的词元进行注意力计算。
    • 查询与分块相似度:从分块序列中选择出最相关的部分分块,所有的隐状态压缩为一个键向量表示,然后利用𝑘 近邻方法选出与查询最相关的𝑘 个分块,并保证这些块中的总词元数目至多为𝑇max
      在这里插入图片描述
  1. 长文本数据
  • 长文本数据量:采用少量长文本数据进行轻量化的继续预训练,仅需使模型适应更长的上下文窗口,只需在约1B 级别的词元上执行数百步的训练,就可以将7B 或者13B 大小的LLaMA 系列模型的上下文窗口至100K 词元以上的长度,并具有较好的长上下文利用能力
  • 长文本数据混合:长文本的领域分布和长文本的类型,长文本数据的领域应尽可能多样化,并且与预训练数据集的分布保持相似。整体型(完整的有意义的长文)、聚合型(多篇相关文本的聚合)和杂乱型(杂乱无章的文本),去除杂乱型可以提升模型能力
  1. 新型模型架构
    在这里插入图片描述
  • 参数化状态空间模型

模型预训练

一、预训练任务

  1. 语言建模(Language Modeling, LM)
    在这里插入图片描述
  • 前缀语言建模
    在这里插入图片描述

  • 中间填充任务
    在这里插入图片描述

  1. 去噪自编码(Denoising Autoencoding, DAE)
    在这里插入图片描述
    输入文本经过一系列随机替换或删除操作,形成损坏的文本,根据这些损坏的文本恢复出被替换或删除的词元片段
    在这里插入图片描述

  2. 混合去噪器(Mixture-of-Denoisers, MoD)

  • S-去噪器与前缀语言建模的目标相同
  • R-去噪器和X-去噪器与去噪自编码任务的优化目标更为相似,在被掩盖片段的跨度和损坏比例上有所区别(15%,50%)
  • 实现上,输入句子会以特殊词元(如[R], [S], [X])作为开头,辨别使用哪一个去噪器

二、优化参数设置

在这里插入图片描述

  1. 基于批次数据的训练
    通常Batch size设置为较大的数值,例如1M 到4M 个词元,从而提高训练的稳定性和吞吐量。动态批次调整策略,即在训练过程中逐渐增加批次大小,最终达到百万级别,可以有效地稳定大语言模型的训练过程。较小的批次对应反向传播的频率更高,训练早期可以使用少量的数据让模型的损失尽快下降;而较大的批次可以在后期让模型的损失下降地更加稳定,使模型更好地收敛。
  2. 学习率
    预热阶段和衰减阶段
  • 预热阶段一般占整个训练步骤的0.1% 至0.5%,预热阶段使用较小的学习率使得训练较为稳定,通常使用线性预热逐步调整学习率,最大阈值通常设定在5 × 10^−5 到1 × 10^−4 之间。
  • 然后学习率便开始进行衰减,一般会衰减到其最大阈值的10%
    在这里插入图片描述
  1. 优化器
    Adam & 其变种AdamW,Adam 优化器使用梯度的“动量”作为参数的更新方向
  2. 稳定优化技术
  • 梯度裁剪(Gradient Clipping):损失的突增,当梯度的模长超过给定的阈值后,便按照阈值(通常为1.0)进行截断
  • 训练恢复:每隔固定的步数设置一些模型存档点,便于异常恢复
  • 权重衰减:AdamW在更新模型参数的时候引入衰减系数,这个系数通常设置为0.1。稳定训练过程,提高模型的泛化能力
  • Dropout:考虑到大规模的训练数据和模型中存在的归一化结构,已有工作很少用Dropout技术。

三、可扩展的训练技术

提高训练效率 & 如何将庞大的模型有效地加载到不同的处理器中

  1. 3D 并行训练,包括数据并行(DataParallelism)、流水线并行(Pipeline Parallelism)和张量并行(Tensor Parallelism)。
  • 数据并行:提高训练吞吐量,将模型参数和优化器状态复制到多个GPU 上,然后将训练数据平均分配到这些GPU 上,每个GPU 只需要处理分配给它的数据,然后执行前向传播和反向传播以获取梯度。所有GPU 都执行完毕后,该策略会将不同GPU 的梯度进行平均,以得到整体的梯度来统一更新所有GPU 上的模型参数
  • 流水线并行:将大语言模型不同层的参数分配到不同的GPU 上,配合梯度累积(Gradient Accumulation)技术进行优化,计算一个批次的梯度后不立刻更新模型参数,而是累积几个批次后再更新,这样便可以在不增加显存消耗的情况下模拟更大的批次
  • 张量并行:与流水线并行是两种将大模型参数加载到多个GPU 上的训练技术,张量并行的分配粒度更细,它进一步分解了模型的参数张量(即参数矩阵),以便更高效地利用多个GPU 的并行计算能力,𝑾𝑯拆为[𝑾1𝑯,𝑾2𝑯]。常见的张量并行策略是分解模型注意力层的𝑾𝑄,𝑾𝐾,𝑾𝑉,𝑾𝑂 矩阵参数和前馈网络层的𝑾𝑈,𝑾𝐷 矩阵参数
    在这里插入图片描述
  1. 零冗余优化器(Zero Redundancy Optimizer, ZeRO)
    主要用于解决数据并行中的模型冗余问题,即每张GPU 均需要复制一份模型参数。仅在每个GPU 上保留部分模型参数和优化器参数,当需要时再从其它GPU 中读取。如上图所示,模型被均分在两张GPU 上,当需要使用第一层计算时,两张卡分别从对方获取相应的模型参数进行计算,使用完之后便可以释放相应显存,从而降低了显存冗余度完全分片数据并行(Fully Sharded Data Parallel, FSDP)。
  2. 激活重计算(Activation Recomputation)
    即梯度检查点(Gradient Checkpointing),是一种用于优化反向传播时显存占用的技术。常见方法是将Transformer 的每一层的输入保存下来,然后在反向传播时计算对应层内的激活值。
  3. 混合精度训练
    早期模型使用单精度浮点数(FP32)表示模型参数并进行优化计算,同时使用半精度浮点数(2 个字节)和单精度浮点数(4 个字节)进行运算,以实现显存开销减半、训练效率翻倍的效果。
    在训练过程中,会先将这些32 位参数转换为16 位参数,随后以16 位精度执行前向传播和反向传播等操作,最后在参数更新时再对32 位模型进行优化。
  • 半精度浮点数表示方式FP16:1 位符号位、5 位指数位和10 位尾数位,表示范围为−65504 到65504
  • 半精度浮点数表示BF16:1 位符号位、8 位指数位和7 位尾数位,表示范围可以达到10^38 数量级

四、模型参数量计算与效率分析

  1. 参数量计算
    词表V,L层,维度H,前馈网络H’
  • 输入嵌入层:V*H
  • 多头注意力层:QKV矩阵共3HH个参数,线性变换H*H
  • 前馈网络层:三个线性变换,3 × 𝐻𝐻′
  • 归一化层:自注意力和前馈网络前各一个归一化,2*H,最后一层输出H
  • 输出层:V*H
    在这里插入图片描述
    在这里插入图片描述
  1. 训练运算量估计
    模型在训练过程中,需要进行的浮点运算次数(Floating Point Operations, FLOP)。模型总参数量为𝑃,批处理大小为𝐵,输入序列长度为𝑇,因此训练词元总数为𝐶 = 𝐵𝑇;多头注意力机制包含𝑁 个头,每个头的维度为𝐷,因此和中间状态维度𝐻 满足关系𝐻 = 𝑁𝐷。
  • 多头注意力:𝑸′𝑲′⊺ 的矩阵乘法+放缩+softmax+𝑽′ 矩阵乘法,后向传播的运算量大致为前向传播的两倍
    在这里插入图片描述

  • 线性变换:四个映射+前馈网络层的变换+输出层映射
    在这里插入图片描述
    多头注意力的运算量约为线性变换运算量的𝑇/6𝐻 ,考虑到大模型训练场景下序列长度𝑇 小于等于中间状态维度𝐻,因此多头注意力运算量最多为线性变换运算量的1/6,线性变换的参数量通常占总参数量的95% 以上

  • 参数量为𝑃 的模型在𝐶 个词元上进行预训练的总体运算量可以按照下式进行估计:
    在这里插入图片描述

  1. 训练时间估计
    主要包括浮点数运算、数据读写以及多进程同步等,GPU 每秒浮点运算数通常是GPU 理论浮点运算能力的30% 到70%
    在这里插入图片描述

  2. 训练显存估计
    模型参数与优化器、训练中需要保存的激活值和其他显存占用

  • 模型参数与优化器的显存占用
  • 训练激活值的显存占用
    在这里插入图片描述
    激活重计算:激活重计算在前向传播时仅保存Transformer 每一层的输入和最后层softmax 函数的输入,在反向传播时按需重新计算激活值来减少显存使用
    在这里插入图片描述
  • 其他显存占用:代码库内核. PyTorch 框架在加载其自身的代码库内核时,大约会占用0.8GB至1GB 的显存。这是框架运行所必需的基本开销。ZeRO 优化技术实现:用于优化训练过程中的显存管理和通信效率,1-4G。训练过程中的中间结果和显存碎片:0.5GB 到1GB
    在这里插入图片描述
    在实践中,至少需要有16倍参数数量的显存资源,才能进行全量的参数训练。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、注意力掩码、多头注意力机制

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、多头注意力机制 注意力机制简单示例:单个元素的情况简单示例:计算所有输入词元的注意力权重推广到所有输入序列词元: 注意力掩码代码实现多头注意力测试 注意力机制 简单示例…

数据库(31)——事务

事务 数据库事务(Database Transaction)是数据库管理系统(DBMS)中执行的一组逻辑操作单元,这些操作要么全部成功执行,要么全部不执行,以保持数据的一致性和完整性。事务是确保数据可靠性的重要机…

Android 获取OAID

获取OAID 老规矩,直接上: implementation com.huawei.hms:opendevice:6.11.0.300 // 要获取华为vaid 和aaid,还需添加opendevice 依赖implementation(name: oaid_sdk_2.5.0, ext: aar) import android.content.Context; import android.util.…

每日互动基于 Apache DolphinScheduler 从容应对ClickHouse 大数据入库瓶颈

引言 大家好,我叫张琦,来自每日互动,担任大数据平台架构师。今天我将分享我们团队在基于Apache DolphinScheduler实现ClickHouse零压入库过程中的实践经验。 这个实践项目涉及到两个关键组件:Apache DolphinScheduler和ClickHous…

[vulnhub] Brainpan1

https://www.vulnhub.com/entry/brainpan-1,51/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的,所以靶机IP是166 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-1…

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法,它们不仅帮助我们理解和描述复杂系统的行为,还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发,逐步深入到各种优化算法,并探讨它们在实际问题中的应用。 思维导图文件可获取:https:…

基于Intel Gaudi AI加速器的大语言模型微调与推理优化赛题等你挑战 | CCF BDCI进行时

一年一度的行业盛事2024 CCF大数据与计算智能大赛(简称2024 CCF BDCI)又在激烈进行中啦! 多个赛题等你挑战还没有报名的伙伴们抓紧时间咯,叫上你伙伴练起来吧! 2024 CCF大数据与计算智能大赛 CCF大数据与计算智能大…

使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人

如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHub Issues 一般都是开发者和用户反馈问题的主要渠道。 然而,随着 Issue 数量的增加,及时跟进每一个问题会变得越来越困难。 为了解决这个痛点,我们开发了…

Unreal Engine 5 C++(C#)开发:使用蓝图库实现插件(一)认识和了解Build.cs

目录 引言 一、创建一个C插件TextureReader插件 二、Build.cs文件 三、ModuleRules 四、TextureReader插件的构造 4.1ReadOnlyTargetRules的作用 4.2TextureReaderd的构造调用 4.3设置当前类的预编译头文件的使用模式 4.4PublicIncludePaths.AddRange与PrivateInclude…

探索C嘎嘎:初步接触STL

#1024程序员节|征文# 前言: 在前文小编讲述了模版初阶,其实讲述模版就是为了给讲STL提前铺垫,STL是C中很重要的一部分,各位读者朋友要知道它的份量,下面废话不多说,开始走进STL的世界。 目录&am…

指令系统 I(指令的格式、寻址)

一、指令系统 1. 指令集体系结构 指令(机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。 指令系统是指令集体系结构(ISA&#xf…

如何精准选择Yandex关键词

Hey小伙伴们👋,今天来聊聊如何精准选择Yandex关键词,让你的广告投放效果最大化!🔍 1.使用Yandex关键词工具:Yandex提供了关键词工具,如Yandex Keyword Planner和Yandex Wordstat&#xff0…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

jmeter附件上传

可以采用录制的方式获取附件上传的http请求 普通参数 附件参数 文件名称: 方式一:如果只添项目名称,默认充jmeter的bin目录下获取 方式二:点击文件名称,再点击浏览,可以自己选择文件信息

OpenCV视觉分析之目标跟踪(7)目标跟踪器类TrackerVit的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 VIT 跟踪器由于特殊的模型结构而变得更快且极其轻量级,模型文件大约为 767KB。模型下载链接:https://github.com/opencv/…

如何用Python同时抓取多个网页:深入ThreadPoolExecutor

背景介绍 在信息化时代,数据的实时性和获取速度是其核心价值所在。对于体育赛事爱好者、数据分析师和投注行业而言,能否快速、稳定地抓取到实时比赛信息显得尤为重要。特别是在五大足球联赛中,能够在比赛进行时获得比分、控球率等实时数据&a…

【UBuntu20 配置usb网卡】 记录Ubuntu20配置usb网卡(特别是建立热点)

【UBuntu20 配置usb网卡】 Ubuntu20配置usb网卡(特别是建立热点) 一、 闲言碎语的前言 usb的外置网卡,相比Windows即插即用,Linux买回来一顿折腾,准备把过程梳理一下记录起来。 网卡的方案其实就那几家,…

前端开发模块VUE-Element UI学习笔记

前端开发模块VUE-Element UI学习笔记 文章目录 前端开发模块VUE-Element UI学习笔记 1、Element UI 简介2、Element UI 安装3、Icon 图标4、Button 按钮5、Link 超链接6、Radio 单选框7、Checkbox 多选框8、Input 输入框9、Select 下拉框10、Switch 开关 1、Element UI 简介 基…

Java面试经典 150 题.P169. 多数元素(005)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解: class Solution {public int majorityElement(int[] nums) …

如何在Python爬虫等程序中设置和调用http代理

在Python爬虫中为了更好地绕过反爬机制,获取网页信息,有时可能需要在Python中应用代理服务,这样做的目的就是防止自己的ip被服务器封禁,造成程序运行时中断连接,那么如何在python中设置代理呢? 我们通过几个…