在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合

文章目录

  • 传统的神经网络框架存在的问题
  • 一. Transformer架构综述
    • 1.1 transformer的输入
      • 1.1.1 词向量
      • 1.1.2 位置编码(Positional Encoding)
      • 1.1.3 编码器与解码器结构
      • 1.1.4 多头自注意力机制
  • 二.Transformer分步详解
    • 2.1 传统词向量存在的问题
    • 2.2 详解编解码器中自注意力机制
      • 2.2.1 缩放点积注意力机制
        • 计算步骤
      • 矩阵形式
      • 2.2.2 softmax函数
      • 2.2.3 多头机制
  • 三.FNN与MoE策略
  • 四.论文参考
    • 4.1 迈向终极专家专业化-Mixture-of-Expert 语言模型
    • 4.2 模型越狱-拒绝由LLMs单一方向调解
    • 4.3 LLM MOE策略的演化


文章学习b站
Transformer模型详解,Attention is all you need
【Transformer速通指南】三天掌握自注意力机制!

  • Transformer 是模型架构,是 LLM 和 MoE 的基础。其核心是自注意力机制(Self-Attention),摒弃了传统 RNN 和 CNN 的序列处理方式。作用实现不同维度领域的数据归一化。
  • LLM 是基于 Transformer 的大规模应用模型。
  • MoE 是一种优化架构的策略,用于扩展模型规模。

传统的神经网络框架存在的问题

传统神经网络框架存在一些局限性,具体如下:

  • 循环神经网络(RNN):RNN在处理序列数据时,需要按照时间顺序逐步迭代计算每个时间步的结果。这种串行处理方式限制了模型的并行化能力,导致训练和推理过程相对缓慢。此外,RNN在捕捉长距离依赖关系时面临挑战,如梯度消失或爆炸问题,这进一步限制了其性能。

  • 卷积神经网络(CNN):虽然CNN在处理具有局部结构的数据(如图像)方面表现出色,但在处理序列数据时存在一定的局限性。CNN通过滑动窗口机制捕捉局部特征,但难以直接建模长距离依赖关系,因为它们本质上是基于局部感受野的设计,缺乏全局视角。尽管可以通过堆叠多层卷积层来部分缓解这一问题,但这通常伴随着计算成本的增加和参数数量的增长。

  • Transformer模型:与上述两种架构不同,Transformer通过引入自注意力机制彻底改变了序列数据的处理方式。自注意力机制允许模型直接访问输入序列中的所有位置,并为每个位置分配不同的权重,即所谓的“关注度”。这种方式使得Transformer能够高效地捕捉长距离依赖关系,同时支持高度的并行化计算,从而显著提高了训练效率。在Transformer中,每个词都通过Q(查询)、K(键)和V(值)向量来计算与其他词的相关性,进而确定在整个上下文中该词的重要性。

综上所述,每种传统的神经网络架构都有其特定的应用场景和局限性。RNN擅长处理序列数据但受限于其串行特性;CNN在图像处理领域表现优异但对长距离依赖关系的支持有限;而Transformer则通过创新的自注意力机制解决了这些问题,提供了更强大的序列建模能力和更高的计算效率。这些特点使Transformer成为现代自然语言处理和其他涉及序列数据领域的首选架构之一。

一. Transformer架构综述

在这里插入图片描述
图1-1 transformer整体流程图
在这里插入图片描述
图1-2 transformer模型子结构示意图

整体分为下方输入单元、左侧编码器、右侧解码器、上侧推演结果,其中图1-1描述了transformer大致组件。图1-2描述了每个组件中重要的核心处理方法。

  • Transformer的输入和输出是什么?
    输入: Inputs,Outputs(shifted right)
    输出:Output Probabilities

下列以模型处理英译汉为例解释transformer模型的整体运作过程。

1.1 transformer的输入

例如Are you OK ? 待翻译句子和标注数据 你好吗?进入模型,经模型处理后输出 你干什么?,如图1-3所示。
在这里插入图片描述
图1-3 数据输入输出示意图

1.1.1 词向量

Are you OK ?你好吗?进入模型时,具体会被模型的第一个组件词向量处理,如图1-4所示。
在这里插入图片描述
图1-4 词向量层示意图

假设每个单词用4维向量表示,则["Are","you","OK","?"] 四个词的句子可以用4 * 4的词向量矩阵表示,每一行是一个词的词向量,如图1-5所示。
在这里插入图片描述
图1-5 待译数据词向量

同理,标注词["你","好吗","?"]也会被处理成 3* 4的词向量矩阵,如图1-6所示。
在这里插入图片描述
图1-6 标注数据词向量

1.1.2 位置编码(Positional Encoding)

得到Input Embedding和Output Embedding的词向量后,transformer会对其进行位置编码。目的是把位置信息附加到原始的信息上。如图1-7所示。
在这里插入图片描述
图1-7 从词嵌入到位置编码示意图

在没有位置编码时
在这里插入图片描述
图1-8 词向量示意图

即模型可能当成You are OK ?OK ? you are等进行处理。那么这样子就可能违背本意,如图1-8所示。

对于初学者而言,下面的讨论可能会显得晦涩难懂,不清楚其目的和实施的理由。这并不意外,因为这部分内容旨在提供一个整体框架或概览,而不会深入探讨每一个细节。现阶段,您无需过分担忧具体的实现步骤或背后的原理。当前的重点在于理解这种方法的大致轮廓以及它试图达成的目标。具体的操作细节、技术术语以及每一步骤背后的原因将会在后续章节中详细展开。

为了帮助您更好地跟随学习进度,这里将给出一个高层次的概念性描述。首先,我们采取一种系统化的方法来解决问题,这种方法依赖于一系列预先设定的步骤和规则。这些步骤被设计成能够引导用户从问题的起始点顺利到达解决方案。虽然此时您可能对其中的具体操作流程感到困惑,但随着逐步深入的学习,每一个环节都将得到清晰的解释和实例说明。

位置编码会用正弦函数和余弦函数的计算实现

位置编码的正余弦公式

其中:

  • pos 表示词在序列中的位置。

  • i 表示编码向量中的维度索引。

  • d_model 表示模型嵌入维度大小。

  • 对于偶数维度(即 i 是偶数),使用正弦函数:

    P E pos , 2 i = sin ⁡ ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i=sin(100002i/dmodelpos)

  • 对于奇数维度(即 i 是奇数),使用余弦函数:

    P E pos , 2 i + 1 = cos ⁡ ( p o s 1000 0 2 i / d model ) PE_{\text{pos}, 2i+1} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PEpos,2i+1=cos(100002i/dmodelpos)

其中,pos 表示词语在序列中的位置,i 表示该词语向量中的第 i 维度。d_model表示总维度数
例如["Are","you","OK","?"]中, "you"的索引下标为1,且前文假设词向量有4个维度(现设4个维度分别为维度0,维度1,维度2,维度3)。因此"you"的位置编码为PE(1,0),PE(1,1),PE(1,2),PE(1,3),如图1-9所示。
在这里插入图片描述
图1-9 位置编码示意图

再次说明,如上你可能看不懂为什么要这么做,后续在章节2中介绍自注意力机制,你会有所理解

1.1.3 编码器与解码器结构

在这里插入图片描述
图1-10 输入序列经过位置编码进入编解码器图

经过位置编码后,英文的待译数据和中文的标注数据分别输入到编码器和解码器中,会经过三个计算过程。如图1-11
在这里插入图片描述
图1-11 编解码器整体处理流程图

  • 编码器会基于 自注意力机制(Multi-Head Attention)前馈神经网络(Feed Forward)对"英文的待译数据"进行编码,如图1-12所示
    在这里插入图片描述
    图1-12 编码器处理流程图

  • 解码器会基于 带有掩码的(Masked)自注意力机制(Multi-Head Attention)对"中文的标注数据"进行编码,如图1-13
    在这里插入图片描述
    图1-13 解码器处理流程图

  • 编码器-解码器注意力层: 对两组数据一起解码,得到解码器最终输出。如图1-14 所示。
    在这里插入图片描述
    图1-14 从编码器-解码器注意力层到解码器最终输出图

总体来说编解码器通过自注意力机制,和前馈神经网络将输入数据中的全局信息附加到解码结果并最终输出。如图1-15所示。
在这里插入图片描述

1.1.4 多头自注意力机制

在这里插入图片描述
图1-16 多头自注意力机制整体示意图

其中自注意力机制(Muti Head Self Attention)会分别使用多个自注意力机制对Q,K,V 三个线性层(Linear)对输入数据进行线性变换并使用缩放点积注意力机制(Scaled Dot Product Attention)将特征变换后的Q,K,V进行结合,最后使用fc线形层整合多头结果。 如图1-17所示。
在这里插入图片描述
图1-17 自注意力机制计算流程图
在这里插入图片描述
图1-18 自注意力机制源码实现图

在章节2,我们会详细介绍Q,K,V参数的作用,为什么是这样搞。

以编码器中的自注意力机制层,说明自注意力机制是如何工作的。首先输入的数据是经过位置编码后的["Are","you","ok","?"],其黄色表示["Are","you","ok","?"]的词向量矩阵,分别于Q,K,V进行线性变换得到,三组结果qx,kx,vx。如图1-19所示。
在这里插入图片描述
图1-19 举例说明自注意力机制计算流程图

接着将三组结果交给缩放点积注意力机制整合成最终结果。

关于自注意力机制和缩放点积注意力机制将在第二章详细介绍。


二.Transformer分步详解

在之前的概述中,您可能对编码器与解码器之间的映射关系感到困惑,不明白为何需要通过Q(查询)、K(键)和V(值)来进行信息处理和统一归一化为啥是softmax函数处理,以及为何位置编码采用了正余弦函数的形式,。接下来,我们将详细探讨这些问题,以期为您提供清晰的理解。

首先,让我们明确编码器和解码器在序列到序列(Seq2Seq)任务中的角色。编码器的任务是将输入序列转换为一个固定长度的内部表示形式,通常称为上下文向量或特征向量。这个内部表示捕捉了输入序列的关键信息,并将其压缩成一个抽象表达。而解码器则接收这个内部表示,并逐步生成输出序列,每一步都可能依赖于前一步的输出以及从编码器传递过来的上下文信息。这种结构使得模型能够处理不同长度的输入和输出序列,适用于如机器翻译、文本摘要等任务。

接下来,讨论Q、K、V的概念及其在自注意力机制中的应用。在Transformer架构中,为了有效处理输入序列中不同位置之间的关系,每个输入都需要经过线性变换,从而生成Q、K、V三个不同的向量。这些向量分别代表查询、键和值,它们的作用在于计算序列中元素间的相似度并确定权重,以便实现对不同位置信息的有效区分。

最后,我们来解释为什么位置编码采用正余弦函数。由于Transformer模型缺乏像循环神经网络(RNNs)那样的递归结构或卷积神经网络(CNNs)那样的卷积结构,它无法直接识别序列中元素的位置信息。因此,位置编码被引入,其目的是赋予模型关于序列中各元素相对位置的知识。位置编码通常由正弦和余弦函数生成,确保每个位置都有独特的表示。选择正余弦函数的原因在于,这种方法可以保证对于任何给定的位置偏移,都可以通过固定的数学运算获得对应的编码,这有助于模型学习到位置间的相对距离关系。此外,正余弦函数的周期性特性允许模型处理任意长度的序列,而不会因为位置过远而导致位置信息丢失或混淆。

综上所述,通过对编码器和解码器的工作原理、QKV在自注意力机制中的作用以及位置编码为何采用正余弦函数的深入解析,希望能帮助您更准确地理解这些概念背后的逻辑和技术细节。

2.1 传统词向量存在的问题

预训练好的词向量一旦生成就保持不变,这意味着它们无法根据不同的语境灵活调整。例如:

  • “它无法通过这条河,因为它太累了。” 在这句话中,“它”指的是某个行动者,比如一个人或动物,表明是由于疲劳导致无法过河。
  • “它无法通过这条河,因为它太窄了。” 而在这句话里,“它”指的是河流本身,表示由于河道狭窄而不能通过。

如果词向量固定不变,那么在处理这两个句子时就会遇到问题,因为“它”这个词在两个句子中的含义完全不同。第一个句子中的“它”指的是执行动作的主体,而在第二个句子中则是指物体(河流)的一个属性(宽度)。这种情况下,固定的词向量无法准确捕捉到“它”在不同语境下的具体含义。

因此,虽然预训练词向量能够提供一个良好的起点,为词汇赋予基于大规模文本数据学习得到的通用意义,但它们并不足以应对所有情况。为了更好地理解和区分词语在不同上下文中的意义,我们需要采用更先进的模型,如ELMo、BERT等,这些模型可以根据词语所在的特定环境动态调整词向量,从而更加精准地反映词语的实际用法和意义。这样,即使是像“它”这样的代词,在不同的句子中也能被正确理解。

2.2 详解编解码器中自注意力机制

主要目标是使计算机能够在处理文本时,从上下文语句中识别并关注最关键的信息。Transformer模型通过其自注意力机制实现了这一目标,该机制允许模型根据输入序列的上下文动态地为每个词分配相应的权重。这意味着在解析一个句子或段落时,Transformer能够自动判断哪些词语对于理解整体意义最为重要,并给予这些词语在上下文词语中的关注度。如图2-1所示。
在这里插入图片描述
图2-1 transformer的自注意力词热度权重图

具体来说,在Transformer架构中,每个词首先被转化为三个向量:查询(Query)、键(Key)和值(Value)。通过计算查询向量与所有键向量之间的相似度得分,模型可以确定当前词与其他词的相关性,从而形成一个注意力分布。这个分布随后用于加权求和所有值向量,生成一个反映整个上下文中关键信息的新表示形式。这样,Transformer不仅能够捕捉到词汇间的直接联系,还能够理解更为复杂的依赖关系,确保了对文本深层次含义的准确把握。因此,借助于这种机制,Transformer可以在各种自然语言处理任务中更有效地利用信息,提高理解和生成文本的能力。

2.2.1 缩放点积注意力机制

Q用于“查找”,即寻找与当前位置相关的信息;K存储序列中每个位置的信息,供Q进行查询时使用(每个词的Q会跟整个序列中每一个K计算得分,然后基于得分再分配特征,如图2-2);V包含了实际的信息内容,根据Q和K的相似度(即注意力权重)进行加权求和。通过这种方式,模型能够动态地聚焦于输入序列中最相关的部分,从而更好地捕捉序列数据中的复杂依赖关系。
在这里插入图片描述
图2-2 与Q,K,V线性变换的关系图

假设我们有一个输入序列,其对应的查询向量为 Q Q Q,键向量为 K K K,值向量为 V V V。这些向量通常由线性变换从原始输入嵌入得到。

计算步骤
  1. 计算点积:对于每个查询 q i ∈ Q q_i \in Q qiQ,计算它与所有键 k j ∈ K k_j \in K kjK的点积。获取当前词与每个词的相关程度。

    score ( q i , k j ) = q i T k j \text{score}(q_i, k_j) = q_i^T k_j score(qi,kj)=qiTkj

  2. 缩放分数:由于点积的结果大小与向量维度 d k d_k dk有关,为了防止梯度消失或爆炸,我们需要将得分除以 d k \sqrt{d_k} dk 进行缩放。

    scaled score ( q i , k j ) = q i T k j d k \text{scaled score}(q_i, k_j) = \frac{q_i^T k_j}{\sqrt{d_k}} scaled score(qi,kj)=dk qiTkj

  3. 应用softmax函数:对每个查询 q i q_i qi对应的键分数应用softmax函数,以获得最终的注意力权重 α i j \alpha_{ij} αij

    α i j = softmax j ( q i T k j d k ) = exp ⁡ ( q i T k j d k ) ∑ k exp ⁡ ( q i T k d k ) \alpha_{ij} = \text{softmax}_j\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right) = \frac{\exp\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right)}{\sum_{k}\exp\left(\frac{q_i^T k}{\sqrt{d_k}}\right)} αij=softmaxj(dk qiTkj)=kexp(dk qiTk)exp(dk qiTkj)

  4. 加权求和:最后,利用注意力权重对值向量 V V V进行加权求和,得到上下文向量 c i c_i ci

    c i = ∑ j α i j v j c_i = \sum_{j} \alpha_{ij} v_j ci=jαijvj

矩阵形式

在实践中,我们通常会同时处理多个查询,因此上述操作可以表示为矩阵运算的形式:

Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

其中, Q ∈ R n × d k Q \in \mathbb{R}^{n \times d_k} QRn×dk K ∈ R m × d k K \in \mathbb{R}^{m \times d_k} KRm×dk V ∈ R m × d v V \in \mathbb{R}^{m \times d_v} VRm×dv分别是查询、键和值的矩阵, n n n是查询的数量, m m m是键/值的数量, d k d_k dk d v d_v dv分别是键和值的维度。

2.2.2 softmax函数

Softmax函数是一种归一化指数函数,它能够将一个K维向量z“压缩”到另一个K维实向量σ(z),使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。这样,输出就可以被解释为概率分布 1,即百分率占比,可以得出当前词与其余词的关系热度占比。

对于输入向量 Z = [ z 1 , z 2 , z 3 . . . . . z k ] Z = [z_1,z_2,z_3.....z_k] Z=[z1,z2,z3.....zk],Softmax函数定义如下
σ ( z ) i = e z i ∑ j = 1 K e z j \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} σ(z)i=j=1Kezjezi

数值稳定性的改进
为了避免数值溢出问题(例如上溢或下溢),通常会对输入进行平移操作,即从每个 z i z_i zi中减去最大值 max ⁡ ( z ) \max(z) max(z):
σ ( z ) i = e z i − max ⁡ ( z ) ∑ j = 1 K e z j − max ⁡ ( z ) \sigma(\mathbf{z})_i = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^{K} e^{z_j - \max(\mathbf{z})}} σ(z)i=j=1Kezjmax(z)ezimax(z)
示例代码块

import numpy as npdef softmax(x):"""Compute softmax values for each sets of scores in x."""e_x = np.exp(x - np.max(x))  # 防止溢出return e_x / e_x.sum()# 测试数据
x = np.array([-3, 2, -1, 0])
print(softmax(x))

2.2.3 多头机制

在Transformer架构中,为了模拟CNN能够从不同角度提取多种特征的能力,采用了“多头注意力机制”(Multi-Head Attention)。这一机制通过不同的注意力头(Attention Head)并行地执行多个独立的自注意力过程。每个头都使用各自的学习参数来处理输入数据的不同子空间,从而允许模型捕捉到输入序列内的各种复杂依赖关系 。通常情况下,设置8个这样的头已经足够有效。

在完成多头注意力计算后,每个头会输出一个特征表示。这些独立的特征表示随后会被拼接在一起,形成一个综合的特征表示。接下来,为了整合这些信息并减少维度,通常会在拼接后的特征上应用一个全连接层(Fully Connected Layer),这一步骤有时也被称为降维处理。这样做的目的是将多头注意力机制得到的高维特征映射回模型需要的较低维度,以便后续处理或预测任务的执行。


三.FNN与MoE策略

MoE模型中的每个专家(Expert)通常采用前馈神经网络结构( FeadFoward Network 如全连接网络或卷积网络)。例如,在Transformer模型中,MoE层替换了传统的前馈子层,每个专家独立处理输入数据的子集,通过并行计算提升模型容量。门控网络(Gating Network)负责动态分配输入到不同专家,其本身也是一个前馈网络,通常包含Softmax或Gating Tree结构,用于生成专家选择的概率分布。

混合专家模型(Mixture of Experts,MoE)是一种先进的机器学习策略,它通过将多个专门训练的子模型(称为“专家”)结合起来,并使用一个或多个门控网络来控制这些专家输出的权重。这种方法旨在提高模型性能和效率,特别是在处理复杂数据模式时的大模型训练。

在MoE架构中,有三个关键组件:专家、门控网络和稀疏激活。每个专家都是针对特定任务或数据特征而训练的子模型。例如,在图像分类任务中,一个专家可能专门识别纹理,而另一个专家可能识别边缘或形状。这种分工有助于整个模型更高效地处理问题,因为每个专家只处理它最适合的数据类型。

在这里插入图片描述

图3-1 Figure 2 | DeepSeekMoE的示意图

由于论发表已经非常详尽,因此不再赘述。以下将会给出论文地址

四.论文参考

4.1 迈向终极专家专业化-Mixture-of-Expert 语言模型

DeepSeekMoE: Towards Ultimate Expert Specialization in
Mixture-of-Experts Language Models

4.2 模型越狱-拒绝由LLMs单一方向调解

Refusal in LLMs is mediated by a single direction

4.3 LLM MOE策略的演化

LLM MOE的进化之路,从普通简化 MOE,到 sparse moe,再到 deepseek 使用的 share_expert sparse moe

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

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

相关文章

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取1k个用户token,使用jmeter压力测试

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取用户token,使用jmeter压力测试 3.1 需求3.2 实现3.2.1 环境配置3.2.2 修改登录接口UserController和实现类3.2.3 测试类 3.3 使用jmeter进行测试3.4 测试结果3.5 将用户登录逻辑修改回去3.6 批量删除生成的用户…

【安全靶场】信息收集靶场

靶场:https://app.hackinghub.io/hubs/prison-hack 信息收集 子域名收集 1.subfinder files.jabprisons.com staging.jabprisons.com cobrowse.jabprisons.com a1.top.jabprisons.com cf1.jabprisons.com va.cobrowse.jabprisons.com vs.jabprisons.com c…

springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

(一)获取数据和读取数据

获取公开数据 下载、爬虫、API 一些公开数据集网站: 爬虫: 发送请求获取网页源代码——解析网页源代码内容,提取数据 通过公开API获取: API定义了两个程序之间的服务合约,即双方是如何使用请求和响应来进行通讯的…

在MacBook Air上本地部署大模型deepseek指南

随着大模型技术的兴起,越来越多的人开始关注如何在本地部署这些强大的AI模型。如果你也想体验大模型的魅力,那么这篇文章将指导你如何在你的MacBook Air上本地部署大模型. 工具准备 为了实现本地部署,你需要以下工具: Ollama&a…

Windows中使用Docker安装Anythingllm,基于deepseek构建自己的本地知识库问答大模型,可局域网内多用户访问、离线运行

文章目录 Windows中使用Docker安装Anythingllm,基于deepseek构建自己的知识库问答大模型1. 安装 Docker Desktop2. 使用Docker拉取Anythingllm镜像2. 设置 STORAGE_LOCATION 路径3. 创建存储目录和 .env 文件.env 文件的作用关键配置项 4. 运行 Docker 命令docker r…

git学习【个人记录b站尚硅谷】

git学习 Git基本命令操作设置用户签名初始化本地库添加文件从工作区到暂存区将文件从暂存区添加到本地库修改文件重新提交 Git分支Github操作创建远程库上传到远程库克隆到本地文件夹拉取远程库最新版本到本地 总结 Git基本命令操作 设置用户签名 git config --global user.n…

【R语言】t检验

一、基本介绍 t检验(t-test)是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式: t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…

TDengine 产品由哪些组件构成

目 录 背景产品生态taosdtaosctaosAdaptertaosKeepertaosExplorertaosXtaosX Agent应用程序或第三方工具 背景 了解一个产品,最好从了解产品包括哪些内容开始,我这里整理了一份儿 TDegnine 产品包括有哪些组件,每个组件作用是什么的说明&a…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图,我的百度网盘已登录设备列表,有一个手机,2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的?下面分别给出android APP中采集手机信…

使用 Docker 安装 Open WebUI 并集成 Ollama 的 DeepSeek 模型

文章目录 使用 Docker 安装 Open WebUI 并集成 Ollama 的 DeepSeek 模型前提条件1. 安装ollama2. 拉取deepseek的模型3. Open-WebUI 说明4. 启动容器文档的方法如下优化命令(可选)1. 增加了健康检查机制(--health-cmd)2. 使 WebUI…

Untiy3d 铰链、弹簧,特殊的物理关节

(一)铰链组件 1.创建一个立方体和角色胶囊 2.给角色胶囊挂在控制脚本和刚体 using System.Collections; using System.Collections.Generic; using UnityEngine;public class plyer : MonoBehaviour {// Start is called once before the first execut…

【NLP 21、实践 ③ 全切分函数切分句子】

当无数个自己离去,我便日益坦然 —— 25.2.9 一、jieba分词器 Jieba 是一款优秀的 Python 中文分词库,它支持多种分词模式,其中全切分方式会将句子中所有可能的词语都扫描出来。 1.原理 全切分方式会找出句子中所有可能的词语组合。对于一…

团结引擎 OpenHarmony 平台全面支持 UAAL,实现引擎能力嵌入原生应用

团结引擎1.4版本已于近日正式发布!在这一版本中,OpenHarmony 平台迎来了一个具有里程碑意义的更新:全面支持 Used as a Library(UAAL)。UAAL 这一技术方案,具有将引擎嵌入原生应用的独特能力,其…

自己部署DeepSeek 助力 Vue 开发:打造丝滑的标签页(Tabs)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 自己…

DeepSeek渣机部署编程用的模型,边缘设备部署模型

DeepSeek渣机部署编程用的模型,边缘设备部署模型 文章目录 DeepSeek渣机部署编程用的模型,边缘设备部署模型前言一、python代码二、构建一个简单的前端来接入接口2.读入数据 总结 前言 也许大家伙都想完成一些部署DeepSeek的东西,不过部署并…

VS2019打开《喜缺全书算法册》附带代码的方法兼述单元测试

下载地址(大量的题目和测试用例) 下载:地址一,几乎实时更新 GitCode下载。 下载地址二,不定期更新csdn打包下载 如果这两个链接打不开,可能是这两个资源处于审核状态,快则几分钟,慢则2天。 可以加本文末的&#xff31…

急停信号的含义

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是确认设备按钮的急停…

小白学网络安全难吗?需要具备哪些条件?

作为一名零基础小白,想要转行IT学习一门新技术,且上手难度低、就业前景好、薪资待遇高、入行门槛低,网络安全是最值得的选择,掌握它之后你可以获得一份收入不错的工作。那么零基础学网络安全好学吗?以下是具体内容介绍。 首先&am…

IEEE期刊Word导出PDF注意事项

在系统上提交论文时候一般要求PDF文档,但是word直接转PDF可能存在一些问题: 部分图片不清晰。字体未嵌入PDF。间距发生了变化。字体发生了变化。一张图片显示不完全。 下面介绍word转PDF最稳妥的技巧以及如何实现全部字体的嵌入。 1. 操作流程 ① 另…