论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调

摘要 

        我们提出了一种轻量级的自适应方法,可以有效地将LLaMA微调为指令遵循模型。lama - adapter采用52K自指导演示,在冻结的LLaMA 7B模型上只引入1.2M可学习参数,在8个A100 gpu上进行微调花费不到一个小时。具体来说,我们采用了一组可学习的自适应提示符,并将它们添加到更高的转换器层的单词令牌中。然后,提出了一种带有零门控的零初始化注意机制,该机制自适应地将新的教学线索注入到LLaMA中,同时有效地保留了预先训练好的知识。通过我们高效的训练,大羊驼-适配器可以产生高质量的响应,与羊驼完全微调7B参数相当。除了语言命令之外,我们的方法可以简单地扩展到用于学习图像条件的LLaMA模型的多模态指令,该模型在ScienceQA和COCO Caption基准测试上取得了卓越的推理性能。此外,我们还评估了零初始化注意机制对其他预训练模型(ViT, RoBERTa)在传统视觉和语言任务上的微调,证明了我们的方法具有优越的泛化能力。代码发布在https://github.com/OpenGVLab/LLaMA-Adapter。 

1 引言

        大规模语言模型(Large-scale Language Models, LLM)[13,52,73,53,15]已经引起了学术界和工业界的广泛关注。在庞大的语料库和先进的硬件的驱动下,LLM表现出非凡的理解和生成能力,将语言任务推向更高的水平。
        最近,指令跟随模型取得了重大进展,如ChatGPT[2]和GPT-3.5 (text-davinci-003)[4]。按照自然语言的指示,他们可以以对话的方式产生专业和上下文的反应。然而,教学模型的进一步普及在很大程度上受到了闭源限制和高昂的开发成本的阻碍。
        为了缓解这一问题,Stanford Alpaca[60]提出将LLM,即LLaMA[61]微调为一种可负担且可复制的指令遵循模型。从175对人类编写的指令输出对开始[62],Alpaca利用GPT-3.5以自我指导的方式将训练数据扩展到52K。在此监督下,Alpaca微调LLaMA中的整个7B参数,产生与GPT-3.5相似的特殊指令模型。尽管Alpaca的有效性,大规模的LLaMA的完全微调仍然是耗时的,计算量大,多模态不支持和繁琐的转移到不同的下游场景。

        在本文中,我们介绍了一种有效的微调方法lama - adapter,它将LLaMA适应为一个性能良好的指令跟随模型。我们还利用52K指令输出数据用于训练目的,但冻结了整个LLaMA模型,具有更高的资源效率。具体来说,在LLaMA的高层转换器层中,我们将一组可学习的自适应提示符作为前缀附加到输入指令令牌上。这些提示学习自适应地将新的指令(条件)注入冻结的美洲驼。为了避免早期训练阶段自适应提示的噪声,我们将插入层的香草注意机制修改为零初始化注意,并具有可学习的门控因子。在LLaMA中,门控由零向量初始化,首先保持原有知识,然后在训练过程中逐步吸收指导信号。这有助于在微调过程中稳定的学习和最终模型更好的指令跟随能力。

 

图1:LLaMA-Adapter的特性。我们的轻量级自适应方法在1小时内对LLaMA [61] 7B模型进行了有效的微调,只需1.2M个可学习参数。经过训练,LLaMA-Adapter表现出优异的指令遵循和多模态推理能力。 

总的来说,我们的LLaMA-Adapter展示了四个主要特征,如图1所示。 

  • 1.2M参数。我们没有更新完整的7B参数,而是冻结了预训练的LLaMA,只学习顶部有1.2M参数的自适应提示。然而,这显示了与7BLLaMA相当的指令遵循能力。
  • 一小时微调。得益于我们具有零初始化门控的轻量级适应模块,LLaMA-Adapter的训练收敛在8个A100 gpu上花费不到一个小时,比Alpaca快三倍。
  • 专业插头。对于不同的场景,可以灵活地插入各自的适配器,并赋予LLaMA不同的专家知识。因此,在每个上下文中存储一个1.2M适配器就足够了,而不是7B模型的完整副本。
  • 多模态指令。除了文本指令外,我们的方法还可以将图像作为多模态推理的输入。通过将图像令牌添加到适应提示符中,LLaMAAdapter在ScienceQA[41]和COCO Caption[8]基准测试中具有竞争力。

        除了指令跟随模型之外,我们的零初始化注意力可以推广到其他视觉和语言模型中,用于参数有效的微调。对于视觉模型,我们利用我们的方法对预训练好的ViT[16]进行微调,用于下游图像分类,在各种图像分布的VTAB-1k[67]基准上获得了优异的性能。对于其他语言模型,我们评估了我们在ReBERTa[40]上对抽取式问答的微调效果,在SQuAD [54] v1.1和v2.0基准测试中取得了领先的结果。通过这些实验,我们证明了LLaMA-Adapter在传统视觉和语言任务中的有效性。

2 相关工作 


        指令跟随型语言模型。语言模型学习指令跟随能力的子领域旨在根据自然语言命令生成响应,这一领域在语言[64, 63, 3, 46]和多模态[59, 42]领域得到了广泛研究。这些方法通常通过使用高质量指令-输出数据对对预训练的语言模型(LLMs)进行微调来提升模型性能。这种微调过程使模型能更好地理解用户意图并更准确地遵循指令。其中,FLAN [64]提出了一种指令调整方法,该方法在未见任务上优于未调整的LLMs。PromptSource [3]提供了一个基于网页GUI的开发环境,用于创建和管理零样本和基于梯度的少量样本学习的自然语言提示。SUP-NATINST [63]建立了一个包含1,616个多样化语言任务的大型基准,并在T5模型上进行了多任务训练。InstructGPT [46]显著提升了指令跟随能力,可能被集成到闭源的GPT-3.5 [4]和GPT-4 [45]中。斯坦福Alpaca [60]以端到端的方式对LLM的所有7B参数进行微调,即LLaMA [61],它是开源且可复制的。然而,这种全模型微调在时间和内存上可能效率低下,限制了其向下游应用的迁移性。相比之下,我们的LLaMA-Adapter旨在仅在冻结的LLaMA之上微调轻量级适配器,而不是更新整个模型的参数。与同时期的Alpaca-LoRA [1]相比,我们的方法进一步降低了计算需求,并可推广到多模态推理的视觉指令跟随。
        参数高效微调。预训练和微调范式在多种语言和视觉任务中已被证明非常有效。与全微调相比,参数高效微调(PEFT)[47]方法冻结了预训练模型的大部分参数,但仍能在下游任务上展现出相当的能力。已探索了多种PEFT技术,包括提示调整[35, 30, 39, 38, 50, 72]、低秩适应(LoRA)[23, 69, 20]和适配器[22, 48, 37, 9, 55]。提示调整在预训练的大型模型中添加了可训练的提示令牌集合,这些令牌仅插入输入嵌入[30, 39],或者插入所有中间层[35, 38]。LoRA [23]在每个网络权重中引入了可训练的秩分解矩阵[25],这在大生成模型上显示了有前景的微调能力[12, 61]。适配器[22]在每个预训练的变压器层中插入轻量级适配模块,并已在众多领域得到扩展[19, 18, 70, 71]。在本文中,我们提出了一种新的PEFT方法,LLaMA-Adapter,专为LLaMA [61]和指令跟随微调设计。现有的PEFT方法可能通过直接插入随机初始化模块,潜在地干扰预训练的语言知识。这导致早期训练阶段出现不稳定微调和大损失值。为此,LLaMA-Adapter采用带有门控因子的零初始化注意力来很好地缓解这一问题,逐步将指令线索与冻结的LLaMA相结合。此外,我们还验证了我们的方法在微调其他领域大型模型的有效性。借助零门控的适配提示,我们对ViT [16]和RoBERTa [40]的高效微调分别在视觉和语言任务上展现出了有竞争力的下游性能,证明了卓越的泛化能力。

3 LLaMA-Adapter 

         在3.1节中,我们首先介绍如何将可学习的自适应提示符插入到LLaMA的[61]变压器中。然后,我们在第3.2节中介绍了带有零门控的零初始化注意机制的细节,并在第3.3节中推广了用于多模态推理的LLaMA-Adapter。最后,我们将在第3.4节扩展我们的方法来实现视觉和视觉语言模型的有效微调。

3.1 可学习的适应提示 

        给定52K指令输出数据[62]和预训练的带有n层变压器的LLaMA[61],我们采用一组可学习的自适应提示符进行指令跟随微调。我们将L层变压器的提示符记为\left \{ P_{l} \right \}_{l=1}^{L},其中P_{l} \epsilon \mathbb{R}^{K \times C}, K表示每层的提示符长度,C表示LLaMA变压器的特征维数。请注意,我们将提示插入到转换器的最顶层L层(L≤N)中。这可以更好地调整具有更高级别语义的语言表示。
        以第l插入层为例(l≤l),我们将m长度的词令牌记为T_{l} \epsilon \mathbb{R}^{M\times C},表示输入指令和已经生成的响应。可学习的自适应提示符沿着令牌维度与T_{l}连接作为前缀,表示为

 

        这样,在P_{l}中学习到的指令知识,可以通过变压器块中的注意层,有效地引导T_{l}产生后续的上下文响应。 

 3.2 零初始化注意力

        如果随机初始化自适应提示,可能会在训练开始时给单词标记带来干扰,影响微调的稳定性和有效性。考虑到这一点,我们将最后一个L转换器层的普通注意机制修改为零初始化注意,如图2所示。

图2:LLaMA-Adapter的细节。我们将具有可学习提示的轻量级适配器插入到LLaMA的N个变压器层中的L层。为了逐步学习教学知识,我们采用零初始化注意和门控机制进行早期稳定训练。
        假设模型正在生成\left [ P_{l} ;T_{l}\right ]顶部的第(M + 1)个单词;在第l个插入层,我们将对应的(M + 1)个单词标记为t_{l} \epsilon \mathbb{R}^{l \times C}。在注意机制中,首先应用几个线性投影层将输入令牌转换为查询、键和值。

 

         然后,计算softmax函数前Q_{l}K_{l}的注意力得分为

 

        它记录了新词t_{l}与所有K + M + 1标记之间的特征相似性。同时,S_{l}可以由两个组分重新表述为

  

        式中,S_{l}^{K} \epsilon \mathbb{R}^{K\times l}S_{l}^{M+1}\epsilon \mathbb{R}^{(M+1)\times 1}分别表示K个适应提示和M+1个词令牌的注意得分。前者表示可学习提示对生成tl贡献了多少信息,这可能会在训练早期引起干扰。
        为此,我们采用可学习的门控因子g_{l}来自适应控制S_{l}^{K}在注意力中的重要性。g_{l}初始化为零,可以首先消除欠拟合提示的影响,然后增加其大小,为LLaMA提供更多的指令语义。因此,我们将softmax函数独立应用于式(6)中的两个分量,并将第一项乘以g_{l},表示为

 

        单独的softmax函数确保第二项与适应提示无关。当g_{l}接近于零时,它可以将最初预训练的LLaMA知识传递给令牌tl,从而生成可信的代。在实践中,我们采用多个g_{l}对注意内的不同头部进行独立学习,有利于多头机制的学习多样性。最后,我们用线性投影层计算第l个注意层的输出为

 

        利用我们提出的零初始化注意力,自适应提示可以逐步将新获得的指示信号注入变压器,同时结合预先训练的LLaMA知识来提供高质量的响应。 

3.3 多模态推理 

         除了文本指令外,LLaMA-Adapter还能够基于其他模态的输入回答问题,这为语言模型增添了丰富的跨模态信息。如图3所示,我们以ScienceQA基准[41]为例,它类似于COCO Caption数据集[8]。给定视觉和文本上下文,以及相应的问题和选项,模型需要执行多模态理解以给出正确答案。
        对于作为视觉上下文的输入图像,我们首先利用预训练的视觉编码器,例如CLIP [51],来提取其多尺度全局特征,记为\left \{ Im_{} \right \}_{m=1}^{M},其中I_{m} \epsilon \mathbb{R}^{1\times C_{m}},M表示尺度数量。然后,我们将M尺度的特征沿着通道维度进行拼接,并在其上应用一个可学习的投影网络,公式如下:

 

        其中I_{p}\epsilon \mathbb{R}^{1\times C},被视为与我们的自适应提示具有相同特征维度的整体图像令牌。在此之后,我们重复I_{p} K次,并明智地将其添加到所有L个插入的变压器层的K长度自适应提示中。对于第1层,我们将获得的多模态提示表示为 

 

        其中P_{l}^{v}表示结合给定图像上下文的视觉信息的自适应提示符。通过这种方式,LLaMA经过微调,可以在视觉语言输入的条件下生成响应,并可以通过多模态理解处理更具挑战性的生成任务。

 3.4 其他大型模型的零初始化注意

        我们的方法,即具有零初始化注意力的自适应提示,不仅局限于指令模型领域,而且可以进一步用于传统视觉和语言任务中的大型模型微调,发挥出优越的泛化能力。
        视觉模型。我们选择预训练的ViT[16]作为下游图像分类任务的基础视觉模型。与LLaMA类似,我们将自适应提示符作为前缀插入到ViT中最顶层的L变压器层中,并将所有插入层的注意操作修改为零初始化。通过不断注入下游视觉语义,我们只在冻结的ViT上引入少量参数,就可以在VTAB-1k[67]基准上获得与完全微调相当的分类精度,这表明我们的注意力算子在视觉领域的有效性。
        语言模型。我们使用RoBERTa[40]在大规模未标记文本语料库上进行预训练,并在SQuAD[54]基准上评估我们提出的零初始化注意力用于抽取式问答。我们在P-tuning v2[38]的基础上实现了零初始化注意力,P-tuning是一种高效适应大型语言模型的快速调优方法。同样,我们只启用P-tuning v2中的提示符号和我们的零门控因子在微调期间是可学习的。领先的结果证明了我们在传统语言任务中的优势。关于将零初始化注意力机制应用于更大的模型和任务,请参阅补充材料。

 4 实验

        在第4.1节中,我们首先评估LLaMA-Adapter的指令跟随能力。然后,我们在4.2节中展示了我们在ScienceQA[41]基准上的多模态性能,并在4.3节中对ScienceQA的验证集进行了消融研究。最后,我们在4.4节中报告了我们的方法在其他视觉和语言模型上的微调结果。 

4.1 指令后续评价 

        设置。遵循斯坦福Alpaca [60]的方法,我们使用了52K条指令跟随数据用于训练,这些数据是从175条指令-输出对[62]扩展而来的。我们在8个A100 GPUs上对LLaMA-Adapter进行了5个周期的微调。预热周期、批量大小、学习率和权重衰减分别设置为2、64、0.009和0.02。默认情况下,我们使用了具有7B参数和N = 32个变压器层的预训练LLaMA模型。我们采用了提示长度K = 10,并将适配提示插入到最后L = 30层中。在生成阶段,我们采用top-p采样[21]作为默认的解码方法,温度为0.1,top-p = 0.75。对于定量评估[10],我们请GPT-4 [45]对指令跟随模型在80个问题上的响应质量进行评估。由于我们观察到GPT-4倾向于给第一个响应更高的分数,我们也交换了两个响应的位置,总共进行了160个评估项。

图4:LLaMA[60]和LLaMA-Adapter的指令遵循比较。

 

图6:LLaMA-Adapter、Alpaca[60]和Alpaca- lora[1]的定量比较,采用GPT-4评估[45] 

         性能。我们在图4中比较了LLaMA-Adapter和Alpaca [60]生成的响应,并在图6中报告了定量结果。请参考补充材料以获取与Alpaca-LoRA [1]、GPT-3 [4]和LLaMA-I [61]的完整比较。对于图4中的不同类型的指令,我们的方法可以输出与完全微调的Alpaca相当合理的响应,包括问题回答、语言翻译和代码生成。在图6的GPT-4评估中,LLaMA-Adapter相比于Alpaca和Alpaca-LoRA获得了更多的“胜利”。这完全证明了我们带有零初始化注意力机制的适配器有效性。
效率。在表1中,我们比较了不同指令跟随方法的可学习参数、存储空间和训练时间。作为一个轻量级的即插即用模块,LLaMA-Adapter具有优越的训练效率,仅需要1.2M参数、4.9M存储空间和一小时的训练时间。

 表1:不同指令遵循方法的效率比较。训练时间在8个A100 gpu上进行测试。

          这使得我们能够在移动设备上对大规模语言模型,例如LLaMA,进行微调。LLaMA-Adapter的效率优势可以通过多节点训练进一步体现,因为只需要在节点之间传输1.2M参数的梯度,而不像Alpaca需要传输7B参数的梯度。
        这使得我们能够在移动设备上对大规模语言模型,例如LLaMA,进行微调。LLaMA-Adapter的效率优势可以通过多节点训练进一步体现,因为只需要在节点之间传输1.2M参数的梯度,而不像Alpaca需要传输7B参数的梯度。

 4.2 多模态评估

        设置。对于多模态LLaMA-Adapter,我们采用CLIP的[51]视觉编码器提取输入图像的多尺度全局特征,并利用简单级联mlp作为可学习的投影网络。我们采用贪婪搜索作为解码方式生成,其他超参数保持与遵循指令的LLaMA-Adapter相同。我们使用两个多模态数据集来训练我们的模型并评估其性能:ScienceQA[41]和COCO Caption[8]。
        ScienceQA是一个从各个知识领域收集的大规模多模态科学问答数据集。每个示例都包含一个可视化上下文、一个文本上下文、一个问题、多个选项和一个答案。我们将给定的问题、文本上下文和选项顺序连接在一个句子中,作为LLaMA-Adapter的输入。COCO标题数据集包含0.6M训练图像数据(120k图像,每张图像5个标题),分布范围很广。我们使用“为此图像生成标题”作为LLaMA-Adapter的文本指令输入。

表2:ScienceQA[41]测试集的问答准确率(%)。我们报道了GPT-3[4]、ChatGPT[2]和GPT-4[45]用于零样本推理。CoT指的是利用额外的思维链来回答问题。T表示纯文本输入的单模态模型。 

         表现。在表2中,我们在ScienceQA数据集上将LLaMA-Adapter与现有流行的VQA方法[65,33,34]和大型语言模型[27,4,74]进行了比较。如图所示,我们的单模态变体(' LLaMA-AdapterT ')仅使用1.2M参数即可获得78.31%的准确率。

表5:Karpathy等人[26]在COCO Caption[8]验证集上的性能(%)。PT表示在附加数据集上的预训练[8,29,58,7,57],FT表示在COCO Caption上的微调。 

        通过进一步注入0.6M投影网络的视觉条件,我们的多模态变体(“LLaMA-Adapter”)的回答准确率提高了6.88%。与传统的VQA方法相比,它们需要用域内数据集来训练整个网络,需要大量的资源预算,而LLaMA-Adapter只需要微调几个参数就可以获得更好的性能。尽管GPT系列[4,2,45]在没有微调的情况下实现了零样本应答,但它们包含的参数比我们使用轻量级适配器的LLaMA 7B模型多得多。此外,MM-CoT[74]与我们的方法相当,但它高度依赖于一个复杂的两阶段推理。因此,我们的LLaMA-Adapter在实现具有竞争力的问答能力的同时,展示了优越的参数效率。在表5中,我们报告了COCO Caption数据集上图像字幕的结果。BLIP[32]和BLIP-2[31]都在额外的数据集上采用了昂贵的预训练阶段,以获得更好的性能,包括Visual Genome[29]、Conceptual Captions[58,7]和LAION[57]。相比之下,我们的LLaMA-Adapter只需要COCO Catption的0.6M数据的训练集就可以获得比ClipCap更好的准确率[43]。

4.3 消融研究 

        插入层。我们首先研究要插入LLaMA-Adapter中的变压器层的数量。如表3所示,增加层数会引入更多的参数,但会导致ScienceQA的验证集的准确性有很大的提高,例如从10到30增加了+17.41%,从20到30增加了+10.49%。这表明,在不同的层次上增加更多的自适应提示,可以为预训练的LLaMA提供更强的任务导向。 

表3:LLaMA变压器插入层消融情况。 

 

表4:零初始化注意的消融。蓝色表示收益。 

        Zero-initialized关注。我们提出的注意力机制对LLaMA-Adapter的早期训练稳定性和最终生成能力至关重要。如表4所示,它有助于在验证集上获得+43.08%的性能增益。相比之下,随机初始化基线的准确率仅为40.77%,几乎与“随机选择”相同(见表2的第一行)。这个比较证明了零初始化注意力在我们的方法中的决定性作用。

图7:有(蓝色)和没有(橙色)零初始化注意力的损失曲线。 

         在图7中,我们绘制了有零初始化和没有零初始化的损失曲线,其中“零初始化注意力”收敛得更快,并且达到了比“rand-init注意力”更低的损失界限。

表6:对过拟合的稳健性。比较了LLaMA-Adapter在不同训练阶段的训练损失、验证损失和验证精度。 

        对过拟合的稳健性。由于大型语言模型的微调数据通常比预训练数据的规模小得多,研究人员必须仔细调整一组超参数以避免过度拟合。在表6中,我们展示了LLaMA-Adapter对于过度拟合问题的相对健壮性。与[46]的结论相似,即使我们的模型对微调数据进行了过拟合,例如验证损失在0.136(15个epoch)到0.282(60个epoch)之间变化不大,但验证精度仍然在增加,例如从82.08%增加到83.94%。这是因为,lama - adapter保持预先训练的LLaMA 7B模型冻结,并且只学习具有几个参数的轻量级适配器。

4.4其他大型模型的零初始化注意 

        设置。对于图像分类,我们在有监督的ImageNet-21k[14]数据集上对预训练的ViT-B/16[16]进行微调。我们采用VTAB-1k[67]进行评估,它是19个不同视觉任务的集合,并根据图像域分为三组:自然、专门和结构化。对于抽取式问答,我们遵循P-tuning v2 (PT2)[38],在SQuAD [54] v1.1和v2.0基准上对RoBERTalarge[40]模型进行微调。在开发集上报告精确匹配(EM)和F1分数。我们将名称实体识别(NER)和语义角色标记(SRL)任务的评估推迟到补充材料中。

表7:在VTAB-1k上使用ViTB/16[16]进行视觉模型微调[67]。我们报告了三个任务组的平均准确率(%)。 

 
        表演。我们分别在表7和表8中给出了微调ViT和RoBERTa的结果。对于具有不同图像分布的三个数据集组,例如自然图像、医学图像和卫星图像,我们的方法比VPT实现了+3.26%、+2.00%和+1.77%的改进[24]。在SQuAD v1.1和v2.0开发集上,零初始化注意力都可以以不同的幅度提高P-tuning v2,这表明具有较强的语言理解能力。与现有的微调方法相比,这表明我们在传统的视觉和语言任务上具有优势。

表8:在SQuAD[54]上使用roberttalarge[40]对语言模型进行微调。*表示P-Tuning v2的再现结果[38]。 

5 结论 

        在本文中,我们提出了LLaMA-Adapter,一种训练指令跟随模型的有效自适应方法。我们的方法只需要120万个参数和1个小时的训练,就能有效地对LLaMA进行微调,与7b个参数的LLaMA相比,效率更高。为了获得更好的训练稳定性和最终性能,我们引入了带有门控机制的零初始化注意力,该机制在保留预先训练的知识的同时,自适应地吸收了教学信号。LLaMA-Adapter可以推广到多模态推理的图像条件,在ScienceQA和COCO Caption基准测试上取得具有竞争力的结果。在传统的视觉和语言任务上,我们的零初始化注意力也获得了良好的微调性能,显示出较强的泛化能力。限制:由于我们的多模态变体提供了一个整合外部语义的通用范例,我们将进一步扩展LLaMA-Adapter,使其成为一个统一的多模态框架,以广泛的指令为条件,如视频、音频和点云。我们预计拟议的工作不会产生负面的社会影响。 

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

armbian安装docker

最近又搞了台瑞莎Radxa 3E ,从零开始部署unbuntu环境,发现是真曲折啊,虽然有点前车之鉴了 在Armbian上安装Docker,可以按照以下步骤操作: 1、更新软件包列表: sudo apt-get update 2、安装必要的软件包…

【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧

文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数?1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例:静态数组的实现 第二章: 模板的特化2.1 什么是模板特化?2.1.1 模板…

安防监控/智慧安防EasyCVR视频汇聚监控平台无法启动并报错“no space left on service”是什么原因?

视频汇聚/安防监控/智慧安防EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。平台可以引入AI智能分析能力,能够实现对视频中的特…

DRF实操——支付宝的介绍与对接支付宝

DRF实操——支付宝的介绍与对接支付宝 1. 支付宝的介绍实际上线环境:开发环境: 2. DRF对接支付宝1. 创建配置文件2. 在setting文件中,做支付宝配置3. 安装支付宝第三方库4. 在setting文件中实例化支付宝对象5.创建模型,保存订单的…

【以图搜图代码实现2】--faiss工具实现犬类以图搜图

第一篇:【以图搜图代码实现】–犬类以图搜图示例 使用保存成h5文件,使用向量积来度量相似性,实现了以图搜图,说明了可以优化的点。 第二篇:【使用resnet18训练自己的数据集】 准对模型问题进行了优化,取得了…

【完-网络安全】Windows用户

文章目录 内置账号用户组通过命令行管理用户 内置账号 通过注销切换用户账号 Administrator用户 该帐号为系统默认的管理员帐号,该帐户具有Windows的最高管理权限,默认禁用。 Guest用户,来宾账户 可运行部分抵权限程序,查看部分文…

【STM32单片机_(HAL库)】4-0【定时器TIM】定时器中断配置步骤

定时器工作原理 定时器计数模式 定时器溢出时间计算 定时器中断实验配置步骤 msp 函数是对 MCU 相关的硬件进行初始化设置,通常被设计用于处理特定硬件外设或功能的底层初始化工作。

redis的数据结构,内存处理,缓存问题

redisObject redis任意数据的key和value都会被封装为一个RedisObject,也叫redis对象: 这就redis的头信息,占有16个字节 redis中有两个热门数据结构 1.SkipList,跳表,首先是链表,和普通链表有以下差异&am…

前端工程规范-2:JS代码规范(Prettier + ESLint)

Prettier 和 ESLint 是两个在现代 JavaScript 开发中广泛使用的工具,它们结合起来可以提供以下作用和优势: 代码格式化和风格统一: Prettier 是一个代码格式化工具,能够自动化地处理代码的缩进、空格、换行等格式问题,…

【STM32单片机_(HAL库)】4-2【定时器TIM】定时器输出PWM配置步骤

PWM介绍 PWM波形(Pulse Width Modulation,脉冲宽度调制波形)是一种占空比可变的脉冲波形。 频率 1/Ts 占空比 Ton / Ts 分辨率 占空比变化步距 定时器输出PWM配置

2024年十大热门人力资源管理系统对比与推荐

本文介绍了ZohoPeople、金蝶云、用友、北森等10款热门HRMS系统,包括各自特点如ZohoPeople的全球化管理、北森的全面人才管理等。建议企业先试用再决定购买,以找到最适合的系统。 一、Zoho People Zoho People 是一个基于云的全球化人力资源管理系统 (HR…

啤酒在文学中的浪漫形象:精酿啤酒的诗意之旅

在文学的浩瀚星空中,啤酒并非仅仅是醉人的琼浆,它更是一种情感的载体,一种浪漫的符号。尤其是当提及Fendi Club精酿啤酒时,我们仿佛能闻到那从古老酒窖中飘出的馥郁香气,感受到它在文字间流淌的诗意与温情。 一、啤酒…

鸿蒙开发(NEXT/API 12)【请求用户授权】手机侧应用开发

为保护用户隐私,Wear Engine的API需要用户授权才可以正常访问。建议开发者在用户首次调用Wear Engine开放能力的时候执行本章节操作。 申请用户穿戴设备权限 应用拉起华为账号登录和授权界面,由用户授权相应的数据访问权限。用户可以自主选择授权的数据…

建筑中的文化表达与地方特色:演绎地域之魂

在浩瀚的城市风貌中,每一座建筑都是文化的载体,无声地讲述着地域的故事与精神。建筑不仅需要满足功能需求,更应成为文化传承与创新的舞台。本文旨在深度剖析建筑设计如何在尊重与弘扬地方文化的基础上,巧妙融合现代元素&#xff0…

【含文档】基于Springboot+Vue的公园管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

前端css样式设置元素的绝对定位和相对定位,要注意宽度和高度的设置

vue3子div position absolute,父div positon relative 。如果不设置子div的 width 和height,那么子div中如果数据变长,子div相对父div位置会变化。子div数据超过&#xff0c;显示... 如何实现 <template><div class"parent"><div class"child&q…

开源实战分享 | 新书:《大型语言模型实战手册》随书代码分享

《大型语言模型实战手册》(英文版)目前电子版在亚马逊有售&#xff0c;纸质版预计在2024年10月15日开售。该书通过超过275张定制插图&#xff0c;深入探索大型语言模型的世界&#xff0c;为Python开发者提供使用大型语言模型所需的实用工具和概念。 如果对于插图没有特别执念的…

商务英语口语柯桥外语学习|ass是“屁股”,save是“救”,那 save my ass是什么意思?

有些人活着&#xff0c;屁股却已经“死”了 工作工作&#xff0c;上工就“坐”&#xff0c;“久坐”几乎是无法避免的事情&#xff0c;但你知道吗&#xff0c;长期久坐可能会患上死臀综合症&#xff08;Dormant Butt Syndrome&#xff09;&#xff01; 如果你坐久了就觉得屁股痛…

PCL库简单的icp配准

#include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/registration/icp.h>int main(int argc, char** argv) {// 确保提供了两个PCD文件作为输入if (argc ! 3) {PCL_ERROR("请提供两个PCD文件作为输入。\n");return (-1);}// …

Spring系列 BeanPostProcessor

文章目录 BeanPostProcessor注册时机执行时机 InstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessor 本文源码基于spring-beans-5.3.31 参考&#xff1a;https://docs.spring.io/spring-framework/reference/core/beans/factory-extension.html#beans…