【大模型理论篇】通用大模型架构分类及技术统一化

news2024/11/14 15:17:03

1. 背景    

        国内的 “百模大战” 以及开源大模型的各类评测榜单令人眼花缭乱,极易让人陷入迷茫。面对如此众多的大模型,我们该如何审视和选择呢?本文将从大模型架构的角度,对常见的开源大模型架构进行汇总与分析。资料来源于公开的学术论文、技术报告、企业官网、技术讨论等。经过深入分析可以发现,尽管参与大模型研发的机构众多,但大模型的结构大致可分为几个主要类别:Encoder-Decoder、Causal Decoder、Prefix Decoder。接下来,我们将对这几个大类模型进行一定的介绍,并由此引出当前业内常用大模型的架构分析。

         首先,有必要介绍一篇文章【1】,提出了统一语言模型预训练概述。模型参数在语言模型目标(即双向语言模型、单向语言模型和序列到序列语言模型)之间共享。使用不同的自注意力掩码来控制每个词符对上下文的访问。

 统一预训练语言模型架构描述        

        输入向量\{x_i\}_{i=1}^{|x|}首先被打包成H_0 = [x_1, \cdots, x_{|x|}],然后使用一个 L 层的Transformer将其编码为不同抽象级别的上下文表示H^l = [h_1^l, \cdots, h_{|x|}^l],其中H^l = \text{Transformer}_l(H^{l-1}), l \in [1, L]。在每个Transformer模块中,多个自注意力头被用来聚合前一层的输出向量。对于第 l 个Transformer层,自注意力头A_l的输出通过以下方式计算:

Q = H^{l-1}W_Q^l, \quad K = H^{l-1}W_K^l, \quad V = H^{l-1}W_V^l

M_{ij} = \left\{\begin{matrix} 0, \text{allow to attend} & \\ -\infty , \text{prevent from attending} & \end{matrix}\right.

A_l = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}} + M\right)V^l

        其中,前一层的输出H^{l-1} \in \mathbb{R}^{|x| \times d_h}通过参数矩阵W_Q^lW_K^lW_V^l \in \mathbb{R}^{d_h \times d_k} 线性投影为查询、键和值的三元组,掩码矩阵M \in \mathbb{R}^{|x| \times |x|}决定了一对tokens是否可以彼此关注。使用不同的掩码矩阵 M来控制计算tokens的上下文表示时可以关注的上下文,例如双向语言模型的情况,掩码矩阵的元素全为0,表示所有tokens都可以互相访问。

        Encoder-Decoder: 输入双向注意力,输出单向注意力。目前,只有少数LLM是基于编码器-解码器架构构建的(如T5)。在输入端(编码器)双向语言模型允许所有词元相互关注。能够编码来自两个方向的上下文信息。如公式M_{ij}所示,自注意力掩码矩阵M为全零矩阵,因此每个词元都可以关注输入序列中的所有位置。

        Causal Decoder:因果解码器架构采用单向注意力掩码(从左到右),以确保每个输入token只能关注过去的token和它本身。GPT、LLaMA系列模型均是基于此架构,也是目前主流的大模型架构。单向语言模型使用从左到右的语言模型目标。以从左到右的语言模型为例,每个词元的表示仅编码其左侧上下文词元及其自身。例如,在预测“x1 x2 [MASK] x4”中被遮蔽的词元时,只能使用x1、x2和该词元本身。通过对自注意力掩码矩阵M_{ij}使用一个三角矩阵来实现这一点,其中自注意力掩码的上三角部分设为−∞,其余元素设为0,如上图所示。

        Prefix Decoder: 输入双向注意力,输出单向注意力。前缀解码器架构(又称非因果解码器)修改了因果解码器的屏蔽机制,使其能够对前缀tokens进行双向关注,并仅对生成的tokens进行单向关注(如 GLM)。对于预测,第一个(源)片段中的标记可以在片段内从两个方向相互关注,而第二个(目标)片段中的标记只能关注目标片段中的左向上下文以及自身和源片段中的所有标记。例如,给定源片段 t1 t2 及其目标片段 t3 t4 t5,将输入 “[SOS] t1 t2 [EOS] t3 t4 t5 [EOS]” 输入到模型中。虽然 t1 和 t2 都可以访问包括 [SOS] 和 [EOS] 在内的前四个标记,但 t4 只能访问前六个标记。

        【2】中讨论了大模型的零样本泛化能力,即它们可以执行各种未经过明确训练的任务。然而,最先进的模型所使用的架构和预训练目标有很大差异。在文中对建模选择及其对零样本泛化的影响进行了大规模评估。特别是,对三种模型架构(因果 / 非因果仅解码器和编码器 - 解码器)进行实验,使用两种不同的预训练目标(自回归和掩码语言建模)进行训练。因此对于模型架构的讨论和对零样本泛化能力的影响,可以参考理解,进一步摸清不同的模型架构的特点。

        【3】也对这三类大模型架构进行了讨论,可以参考理解。

2. 常见大模型架构

        在第一部分,我们介绍了目前流行的大模型架构主要分为三类:Encoder-Decoder、Causal Decoder、Prefix Decoder,并且对每一类架构做了关键差异的分析。而其中,又以Decoder-only架构最为主流,比如当前的GPT、Llama、Qwen、ChatGLM等系列模型。因此,接下来,我们主要是针对Decoder-only类型的大模型做进一步讨论分析。

2.1 GPT系列模型结构

        在文章《GPT系列预训练模型原理讲解》中,我们已经系统性讲解了GPT-1、GPT-2、GPT-3、GPT-3.5(InstructGPT)等模型的结构和各自特点。GPT系列模型,主要涉及:

  • 输入嵌入(Input Embeddings)

    • 将输入文本中的每个词或子词转换为向量表示。包括词嵌入(Word Embedding)和位置嵌入(Position Embedding),后者用于保留序列中的位置信息。
  • 多头自注意力机制(Multi-head Self-Attention Mechanism)

    • 自注意力机制是Transformer模型的核心。它允许模型在处理每个词时,关注输入序列中的其他词。多头自注意力机制则通过并行计算多个不同的注意力头,使模型能够关注序列中的不同部分,并捕捉丰富的上下文信息。
  • 前馈神经网络(Feed-Forward Neural Network, FFN)

    • 在每个Transformer层中,注意力机制的输出会通过一个全连接的前馈神经网络进行进一步处理。这个网络通常包含两层线性变换和ReLU激活函数。
  • 残差连接和层归一化(Residual Connections and Layer Normalization)

    • 每个自注意力模块和前馈网络模块都包含残差连接(即跳跃连接),将输入直接添加到输出以避免梯度消失。层归一化则有助于加快训练速度和提高模型的稳定性。
  • 层堆叠(Layer Stacking)

    • GPT模型由多个Transformer层堆叠而成,每一层都由一个多头自注意力模块、一个前馈神经网络模块及其相应的残差连接和层归一化组成。层数通常决定了模型的深度和表示能力。
  • 输出层(Output Layer)

    • 最终的隐藏状态会被映射到词汇表大小的向量,用于预测下一个词。这个映射通常通过一个线性层和一个softmax函数来实现,以计算每个词的生成概率。
  • 自回归机制(Autoregressive Mechanism)

    • GPT采用自回归方式生成文本,这意味着在生成序列中的每个词时,模型只能访问之前生成的词。这种机制通过掩码操作来实现,确保模型在生成第 t 个词时只能看到前 t-1 个词。

        详细内容这里不再赘述,有兴趣可以看下我们之前的技术分析文章。GPT系列大模型,是典型的Decoder-only模型【4,5,6,7】。

       GPT模型架构概览         

2.2 Llama系列模型结构

        在《关于LLaMA 3.1 405B》、《LLaMA3结构关键模块分析》两篇文章中,我们对Llama大模型的架构、关键模块都进行了详细的介绍。Llama大模型的整体结构与GPT基本保持一致,同样涉及上述提到的关键模块内容。但它进一步做了改进,分别为:新增Pre-Norm、Layer Norm换成了RMSNorm、  Self-Attension采用了Group Query Attention、Positional Embedding采用了ROPE、FFN结构采用了SwiGLU。

        首先是Pre-Norm,归一化模块置于注意力和前馈层之前。Pre-norm 可以使每一层的输入分布更加稳定。有助于防止梯度在反向传播过程中出现剧烈的变化,减少梯度消失或爆炸的风险。

        其次是位置嵌入不同,Llama 使用旋转位置嵌入。注意力机制不同,Llama 使用分组多查询注意力。前馈网络(FFN)中的激活函数是 SwiGLU。这些模块的算法原理介绍,可以参考 《LLaMA3结构关键模块分析》,另外也可以参考讲解视频【8】。

        此外,【9】专门讨论了GPT模型与LLama模型的差异,也可以关注。除了我们讨论的关键模块,还针对具体的分类能力、架构的学习效能做了对比。        

GPT模型与Llama模型架构差异对比

2.3 Qwen2模型结构

        关于Qwen2-72b大模型的资料,来自于阿里云官方分享以及其官方技术报告【10, 11】。

Qwen2-72b模型架构图

        从模型架构图来看,Qwen2与Llama模型结构一致,使用的关键模块也都一样。可能与Llama的差异,主要就是参数量设置以及使用的训练预料不同。【12】中提到通义千问基于LLaMA结构调整,其中tied embeddibg改为untied embedding,然后在其他层去除bias,在QKV的注意力机制层加入bias 。不过这种小范围的参数调整不影响大的层面学习,本质上还是一样的结构。不过在【13】中提到Llama-3 不能有效地处理多语言提示,暗示Qwen可能在提示词的处理方便可能会更优。

        以下是Qwen2的参数列表。

{
  "architectures": [
    "Qwen2ForCausalLM"
  ],
  "attention_dropout": 0.0,
  "bos_token_id": 151643,
  "eos_token_id": 151645,
  "hidden_act": "silu",
  "hidden_size": 8192,
  "initializer_range": 0.02,
  "intermediate_size": 29568,
  "max_position_embeddings": 32768,
  "max_window_layers": 80,
  "model_type": "qwen2",
  "num_attention_heads": 64,
  "num_hidden_layers": 80,
  "num_key_value_heads": 8,
  "rms_norm_eps": 1e-06,
  "rope_theta": 1000000.0,
  "sliding_window": 131072,
  "tie_word_embeddings": false,
  "torch_dtype": "bfloat16",
  "transformers_version": "4.40.1",
  "use_cache": true,
  "use_sliding_window": false,
  "vocab_size": 152064
}

2.4 ChatGLM模型结构

        本章节会重点对GLM模型进行展开分析讲解,以便更好地理解该模型底层原理。

2.4.1 ChatGLM模型介绍

        ChatGLM是智谱AI的大模型。受 GPT-3 的启发,该团队提出了通用语言模型(GLM)架构,其特点是具有自回归空白填充目标,并在 2021 年开源了 GLM-10B 模型。随后推出了GLM-130B的千亿参数大模型。与此同时,一个较小的版本 ChatGLM-6B 在同一天开源。2024GLM-4已通过 GLM-4 API对外提供服务。 

        【14】介绍了在 ChatGLM 中采用和开发的预训练和后训练技术,包括模型架构、预训练数据、对齐等。预训练数据。预训练语料库由来自不同来源的多语言(主要是英语和中文)文档组成,包括网页、维基百科、书籍、代码和论文。数据处理流程主要包括三个阶段:去重、过滤和tokenization。去重阶段通过去除重复或相似的文档来提高数据多样性,包括精确去重和模糊去重。过滤阶段通过去除包含攻击性语言、占位符文本、源代码等的噪声文档来提高数据质量。tokenization阶段将文本转换为一系列token。预训练数据中的token数量直接影响模型训练速度。采用字节级字节对编码(BPE)算法分别学习中文和多语言token,并将它们与 tiktoken 中的 cl100k_base tokenizer的token合并为一个大小为 150,000 的统一词汇表。在最终的训练集中,对不同的来源进行重新加权,以增加像书籍和维基百科这样的高质量和教育性来源的比例。预训练语料库由大约十万亿个token组成。数据质量和多样性对于构建有效的大型语言模型非常重要。

        GLM 系列大型语言模型基于 Transformer 构建。GLM-130B 采用 DeepNorm 作为层归一化策略,并在 FFN 中使用旋转位置编码(RoPE)以及带有 GeLU 激活函数的门控线性单元。在 GLM-4 模型中,架构上的关键模块技术与Llama有所趋同

  • 除 QKV 外无偏置:为了提高训练速度,去除所有偏置项,除了注意力层的查询(Query)、键(Key)和值(Value)(QKV)中的偏置。这样做在长度外推方面略有改进。
  • RMSNorm 和 SwiGLU:采用 RMSNorm 和 SwiGLU 分别替代 LayerNorm 和 ReLU。这两种策略具有更好的模型性能。
  • 旋转位置嵌入(RoPE):将 RoPE 扩展为二维形式以适应 GLM 中的二维位置编码。
  • 分组查询注意力(GQA):用分组查询注意力(GQA)替代多头注意力(MHA),以减少推理过程中的 KV 缓存大小。鉴于 GQA 比 MHA 使用更少的参数,增加了 FFN 的参数数量以保持相同的模型大小。

        模型的上下文长度从 2K(ChatGLM)扩展到 32K(ChatGLM2 和 ChatGLM3),再到 128K 和 1M(GLM-4)。这种扩展通过上下文扩展(位置编码扩展和在长文本上的持续训练实现),还通过长上下文对齐实现,使 GLM-4 能够有效地处理长上下文。预训练为大型语言模型奠定基础,而后训练进一步细化这些模型以与人类偏好对齐,例如理解人类意图、遵循指令和促进多轮对话。对于 GLM-4,对齐主要通过有监督微调(SFT)和基于人类反馈的强化学习(RLHF)实现。不过目前针对RLHF对于模型的性能影响在业内有一些争议。对于第一代模型(ChatGLM-6B 和 ChatGLM-130B),提示 - 响应对主要由模型开发人员标注。对于后续模型,对齐数据是内部标注数据和从第三方获取的专有数据的组合,并受到相对严格的质量控制措施。

2.4.2 GLM模型介绍      

        GLM (General Language Model) 是一种预训练语言模型,它结合了自回归和填充缺失的方法,称为“Autoregressive Blank Infilling”。该模型的核心思想是通过一个混合的自回归和填充策略进行预训练,以提高模型在生成和理解文本方面的能力【15,16】。   

关键特点:

  • 自回归 (Autoregressive) 生成:

    GLM 结合了自回归的生成方式,即从左到右逐步生成文本。这使得模型能够在生成过程中考虑到上下文信息,从而生成连贯的文本。
  • 填充缺失 (Blank Infilling):

    在预训练阶段,模型会随机掩盖一些词或片段,并要求模型填充这些空白。这种方法类似于 BERT 的掩码语言模型,但不同之处在于 GLM 可以在不同位置填充多个连续的空白,而不仅仅是单个词汇。
  • 统一的框架:

    GLM 的框架将生成和理解结合在一起,既可以用于生成任务(如文本生成)又可以用于理解任务(如问答、文本分类等)。这种统一的预训练目标使得 GLM 在不同的下游任务中表现优异。
GLM Pretraining:

GLM 预训练过程如下:

(a) 原始文本为 [x1, x2, x3, x4, x5, x6],从中选取了两个片段 [x3] 和 [x5, x6]。

(b) 在 Part A 中,将选取的片段替换为 [M],并在 Part B 中对这些片段进行打乱。

(c) GLM 自回归地生成 Part B。每个片段在输入时前置 [S],在输出时后置 [E]。二维位置编码用于表示片段间和片段内的位置。

(d) 自注意力掩码中,灰色区域表示被掩盖部分。Part A 的标记可以互相注意(蓝色框),但不能关注 Part B。Part B 的标记可以关注 Part A 及其在 Part B 中的前置部分(黄色和绿色框分别对应两个片段)。[M] 表示 [MASK], [S] 表示 [START], [E] 表示 [END]。

        在这里,给定输入文本 x=[x1, …, xn],从中采样多个文本片段 {s1, …, sm},其中每个片段 si 对应于文本 x 中一系列连续的标记 [s_i,1; … ; s_i,li]。每个片段都被替换为一个 [MASK] token,从而形成一个被破坏的文本 x_{corrupt}。在预测片段中的缺失token时,模型可以访问被破坏的文本和之前预测的片段。这些片段的顺序会被随机打乱。形式上,设 Zm 为长度为 m 的索引序列 [1, 2, , …, m] 的所有可能排列的集合,而s_z < i 为[s_{z_1},...,s_{z_{i-1}}],则预训练目标定义为:

        在 Part A 中,将采样的片段替换为 [M],并在 Part B 中打乱这些片段。输入 x 被分为两部分:Part A 是被破坏的文本 x_{corrupt},Part B 包含被掩盖的片段。GLM 以自回归方式生成 Part B。每个片段在输入时前置 [S],在输出时后置 [E]。二维位置编码用于表示片段间和片段内的位置。为了实现自回归生成,每个片段在输入和输出时分别填充特殊标记 [START] 和 [END]。通过这种方式,GLM 自动在一个统一的模型中学习到一个双向编码器(用于 Part A)和一个单向解码器(用于 Part B)。对该模型有兴趣的话,可以看看原论文。

        综上所述,虽然目前各厂家都在力推自己的大模型,但是从模型架构来看,差异并不大,从当前的形势看,可能会越来越统一。反而在输入token的长度、输出文本的长度、多任务能力、多模态能力、垂直领域的商用能力等这类功能层面的能力提升,各厂家会逐步形成了自身的壁垒。

3. 参考文献 

【1】Unified Language Model Pre-training for Natural Language Understanding and Generation

【2】What Language Model Architecture and Pretraining Objective Work Best for Zero-Shot Generalization?

【3】Exploring Architectures and Configurations for Large Language Models

【4】gpt-4-research

【5】A brief on GPT-2 and GPT-3 models

【6】The GPT-3 Architecture

【7】The Transformer architecture of GPT models

 【8】LLaMA explained: KV-Cache, Rotary Positional Embedding, RMS Norm, Grouped Query Attention, SwiGLU

【9】Towards Optimal NLP Solutions: Analyzing GPT and LLaMA-2 Models

【10】QWEN TECHNICAL REPORT    

【11】预训练一个72b模型需要多久(阿里云开发者公众号)

【12】LLM大语言模型-ChatGPT、LLaMA、ChatGLM、文心一言、通义千问

【13】Hello Qwen2

【14】ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools

【15】GLM: General Language Model Pretraining with Autoregressive Blank Infilling

【16】acl-GLM: General Language Model Pretraining with Autoregressive Blank Infilling

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

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

相关文章

创建vue组件时高度为100vh时出现纵向滚动条

<style scoped>.loginBox{padding: 0;width: 100%;min-height: 100vh;background: #c3c4c5;} </style> 原因body自带margin属性 解决方法 在index.html中添加 margin: 0;padding: 0;属性

Spring核心概念复习IOC与DI

Spring IOC概念 控制反转&#xff08;Inversion of Control&#xff09;&#xff1a;这是一种设计原则&#xff0c;用于降低代码之间的耦合度。在传统的编程模式中&#xff0c;对象之间的依赖关系是由对象自身创建和维护的。而在控制反转模式下&#xff0c;对象的创建和依赖关系…

华为eNSP:静态路由配置、浮动路由配置

静态路由&#xff1a; 一、拓扑图 二、路由器配置 2.1&#xff1a;配置接口 R1&#xff1a; [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [r1-GigabitEthernet0/0/0]qu [r1]int g0/0/1 [r1-GigabitEthernet0/0/1]ip add 10.1.1.1 24 [r1-GigabitEth…

汽车功能安全--TC3xx LBIST触发时机讨论

目录 1. LBIST架构 2. LBIST寄存器配置 3. LBIST触发时机 LBIST&#xff0c;全称Logic Built-in Self Test。 在TC3xx中&#xff0c;LBIST是一种硬件功能安全机制&#xff0c;目的是为了探测MCU内部逻辑电路的潜伏故障(latent faults)。 从使用者角度来看&#xff0c;只需…

celery笔记1

2 Celery介绍 2.1 Celery是什么 # 1 celery 是一个灵活且可靠的&#xff0c;处理大量消息的分布式系统&#xff0c;可以在多个节点之间处理某个任务-现在干一堆活&#xff0c;如果一个人&#xff0c;需要一件件来做-招了几个人&#xff0c;分别安排不同人干活-并发效果--》同…

如何评估超低排放除尘器的长期运行成本和维护成本?

评估超低排放除尘器的长期运行成本和维护成本涉及多个方面&#xff0c;朗观视觉小编认为&#xff0c;以下是一些关键因素&#xff1a; 初始投资成本&#xff1a;首先考虑设备的购买成本&#xff0c;包括除尘器本身及其所有必要的配件和安装费用。 能源消耗&#xff1a;评估除尘…

智能楼层导视软件:提升楼宇导航体验的技术解决方案

亲爱的技术爱好者、开发者及楼宇管理者们&#xff0c;您是否曾为大型建筑内复杂多变的楼层布局而烦恼&#xff1f;是否希望为访客和员工提供更加直观、高效的导航服务&#xff1f;今天&#xff0c;我们向您介绍我们的最新产品——楼层导视软件&#xff0c;一款专为解决现代楼宇…

全渠道营销:SaaS行业的制胜之道

1. 什么是全渠道营销 全渠道营销&#xff08;Omnichannel Marketing&#xff09;是一种综合性的营销策略&#xff0c;旨在通过整合多个线上和线下渠道&#xff0c;实现销售和品牌推广的目标。这种策略强调在不同渠道间提供一致的品牌体验和无缝的过程&#xff0c;确保消费者在…

ssm 汽车的销售平台---附源码96800

目 录 摘 要 1 绪论 1.1 研究背景与意义 1.2研究开发现状分析 1.3主要研究内容 1.4论文章节安排 2 相关技术介绍 2.1Web编程语言 2.2 MySQL数据库 2.3 SSM框架介绍 3 系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 市场可行性分析 3.1.3 操作可行性分析…

上半年首次扭亏为盈,极兔中报背后藏着超预期成长潜力

快递行业的“黑马”极兔速递&#xff0c;如今跑出了新成绩。在近日公布的2024年中期业绩中&#xff0c;其上半年收入达到48.62亿美元&#xff0c;同比增长20.6%&#xff0c;领跑整个快递行业。 更令人眼前一亮的是利润&#xff0c;极兔上半年净利润首次转正为3102.6万美元&…

打造敏捷开发环境:JNPF低代码平台的实践与探索

在数字化转型的浪潮中&#xff0c;企业对软件开发的敏捷性和效率提出了更高的要求。传统的软件开发模式通常耗时长、成本高昂&#xff0c;难以迅速适应市场变化。低代码平台的出现&#xff0c;为解决这一问题提供了新的视角。本文将探讨如何运用JNPF低代码平台构建敏捷开发环境…

Linux远程管理—SSH协议

SSH协议是远程连接的安全性协议&#xff0c;该协议可以有效防止远程管理过程中的信息泄漏&#xff0c;是西安传输数据加密&#xff0c;能够防止DNS和IP欺骗&#xff0c;传输数据压缩&#xff0c;加快传输速度。 安全验证方法有口令验证和密钥验证两种实现手段&#xff0c;该协…

CentOS7 mysql-cluster安装与配置

目录 下载安装: #拷贝ndb_mgm和ndb_mgmd #创建并编辑配置文件 #初始化管理节点 安装数据节点和sql节点 #初始化mysql #启动mysql #登录并设置新密码 #启动ndbd节点: #启动和停止管理节点 mysql-cluster安装与配置 下载安装: 下载工具包地址:https://dev.m…

JAVA毕业设计165—基于Java+Springboot+vue3的二手房交易管理系统(源代码+数据库+11000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的二手房交易管理系统(源代码数据库11000字论文)165 一、系统介绍 本项目前后端分离(还有ssm版本)&#xff0c;分为用户、卖家、管理员三种角色 1、用户&a…

基于SSM的零食商城系统

1.项目介绍 基于SSM的零食商城系统&#xff0c;前端采用Bootstrap框架。 后台采用经典SSM框架。数据库采用MySQL。 包括用户前台和管理后台&#xff0c;后台管理又可以分为店员&#xff08;或客服&#xff09;和超级管理员&#xff0c; 会员可以通过商城门户进行查看商品、选…

N5171B EXG X 系列射频模拟信号发生器,9 kHz 至 6 GHz

N5171B 射频模拟信号发生器 产品综述 N5171B EXG X 系列中档性能射频模拟信号发生器可以提供 9 kHz 至 6 GHz 的频率范围&#xff0c;并针对制造测试进行了优化&#xff0c;具有更快的吞吐量、更长的正常运行时间以及适合的价格。 功能特点 ◆ ◆出色的硬件性能有助于最大…

朵拉朵尚和法国著名药企原料商Seqens正式签约建立战略合作

共探美丽新未来 朵拉朵尚和法国著名药企原料商Seqens正式签约建立战略合作 当前&#xff0c;正值全球生物医药产业爆发式增长的时期&#xff0c;在追求自然与科学完美融合的美丽征程中&#xff0c;国内知名护肤品牌朵拉朵尚再次迈出坚实步伐&#xff0c;与享誉全球的法国药企原…

Linux下qt程序缺少中文字库,中文显示为框框

现象 Linux下qt5.9编译程序&#xff0c;运行时候界面上的中文显示一个一个的框框。 如图 原因 开发板里缺少中文字库或者qt字库环境未正常配置导致的。 解决方法一&#xff1a; 如果系统中存在中文字库&#xff0c;一般是在/usr/share/下有一个fonts文件夹 配置qt中文字库路…

基于信号量和环形队列的生产者消费者模型

文章目录 POSIX信号量信号量接口初始化信号量销毁信号量等待信号量发布信号量 基于环形队列的生产者消费者模型单生产单消费多生产多消费 POSIX信号量 POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的。 但POSIX可以…

网络安全之渗透测试实战-DC-3-靶机入侵

一、下载靶机DC-3&#xff0c;解压后导入Vmware Workstation https://pan.baidu.com/s/17BcSH6RqC7wuyB7PRNqOow?pwdkc12启动DC-3靶机&#xff0c;由于不知道密码&#xff0c;无需登录 二、靶机的网卡采用的是NAT模式自动获取IP地址&#xff0c;此时我们需要先获取其MAC地址…