【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型

news2024/12/25 10:38:00
GLM-130B:一个开源双语预训练语言模型
《GLM-130B: An open bilingual pre-trained model》

论文:https://arxiv.org/pdf/2210.02414.pdf

相关博客
【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型
【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍
【自然语言处理】【大模型】BLOOM:一个176B参数且可开放获取的多语言模型
【自然语言处理】【大模型】PaLM:基于Pathways的大语言模型
【自然语言处理】【chatGPT系列】大语言模型可以自我改进
【自然语言处理】【ChatGPT系列】WebGPT:基于人类反馈的浏览器辅助问答
【自然语言处理】【ChatGPT系列】FLAN:微调语言模型是Zero-Shot学习器
【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里?
【自然语言处理】【ChatGPT系列】大模型的涌现能力

一、简介

在这里插入图片描述

​ 大语言模型(LLMs),特别是参数超过100B的模型呈现出诱人的scaling laws,其会突然涌现出zero-shot和few-shot能力。具有175B参数的GPT-3率先对100B尺度的LLM进行了研究:在各种基准上,使用32个标注示例可以显著超越全监督的BERT-Large模型。然而,GPT-3本身以及如何训练仍然是无法公开获得的。训练出如此规模的高质量LLM,并对每个人分享模型和训练过程非常的有价值。

​ 我们的目标是预训练一个开源且高准确率的100B模型。在我们尝试的过程中,我们逐渐意识到相比于训练10B的模型,训练一个100B以上的稠密LLM面临着许多意想不到的技术和工程的挑战,例如预训练效率、稳定性和收敛等。类似的困难也发生在OPT-175B和BLOOM-176B的训练中,进一步证明了GPT-3作为先驱研究的重要性。

​ 在本文中,我们介绍了100B规模模型GLM-130B的预训练,包括工程上的努力、模型设计选择、为了效率和稳定性的训练策略、用于降低推理成本的量化。因为人们已经普遍意识到,枚举训练100B规模LLM的所有可能设计在计算资源上无法负担,因此我们不仅程序训练GLM-130B成功的部分,也介绍许多失败的选择来吸取经验。训练稳定性是这种规模模型能够训练成功的关键因素。不同于OPT-175B中的人工调整学习率,以及BLOOM-176B中使用embedding norm,我们实验了各种选项并发现embedding梯度shrink策略可以显著稳定GLM-130B的训练。

​ 具体来说,GLM-130B是一个具有1300亿参数的双语双向稠密模型,其在96个NVIDIA DGX-100(8*40G)节点的集群上用400B的token进行了预训练,训练从2022年5月6日至2022年7月3日。相比于使用GPT风格的架构,我们采用General Language Model(GLM)算法来利用双向注意力优势和自回归空白填充目标函数。上表1比较了GLM-130B、GPT-3、OPT-175B、BLOOM-176B和PaLM540B。

​ 总的来说,概念独立性和工程上的努力使得GLM-130B在广泛的基准上展现出了超过GPT-3的性能,在许多例子中也超过了PaLM540B,而OPT-175B和BLOOM-176B并没有展现出超越GPT-3的性能。对于zero-shot的表现,在LAMBADA上GLM-130B优于GPT-3 175B(+5.0%)、OPT-175B(+6.5%)和BLOOM-176B(+13.0%),并在BIG-Bench-Lite上优于GPT-3三倍。对于5-shot MMLU任务,其优于GPT-3 175B(+0.9%)和BLOOM-176B(+12.7%)。由于一个包含中文的双语LLM,其显著的优于ERNIE TITAN 3.0 260B,在7 zero-shot CLUE数据集上(+24.26%),以及5 zero-shot FewCLUE(+12.75%)。重要的是,GLM-130B作为一个开放模型,相比于其他100B模型,其偏见和毒性明显小很多。

​ 最后,我们设计GLM-130B的目标是让更多的人进行100B LLM的研究。首先,相比于175B+参数的OPT和BLOOM,130B尺寸能够在单台A100(8*40G)服务器上进行推理。其次,为了进一步减低对GPU的需要,我们在不使用量化感知训练的情况下将GLM-130B量化至INT4的精度,而OPT和BLOOM仅能够达到INT8。由于GLM-130B架构的独特性,GLM-130B的INT4量化引入了可以忽略不计的性能下降,例如LAMBADA的-0.74%甚至在MMLU上+0.05%,使其仍然优于未压缩的GPT-3。这使得GLM-130B在保证性能的情况下,在4xRTX3090(24G)或者8xRTX2080 Ti(11G)上进行快速推理,迄今为止100B LLM所需的最实惠GPU。

二、GLM-130B的设计选择

1. GLM-130B的架构

​ **GLM作为主干。**大多数近期的100B规模的LLM,例如GPT-3、PaLM、OPT和BLOOM遵循GPT风格的架构,decoder-only自回归语言模型。在GLM-130B中,我们尝试利用双向GLM的潜力作为主干网络。

​ GLM是一种基于transformer的语言模型,利用自回归空白填充作为训练目标。简单来说,对于文本序列 x = [ x 1 , … , x n ] \textbf{x}=[x_1,\dots,x_n] x=[x1,,xn],从其中采样文本片段 { s 1 , … , s m } \{\textbf{s}_1,\dots,\textbf{s}_m\} {s1,,sm},每个 s i \textbf{s}_i si表示连续tokens片段 [ s i , 1 , … , s i , l i ] [s_{i,1},\dots,s_{i,l_i}] [si,1,,si,li]并被替换为单个mask token,从而形成 x c o r r u p t \textbf{x}_{corrupt} xcorrupt。模型被要求使用自回归的方式进行恢复。为了允许被破坏的片段间交互,彼此之间的可见性由一个随机采样的排列决定。预训练目标定义为:
L = max ⁡ θ E z ∼ Z m [ ∑ i = 1 m log ⁡ ∏ j = 1 l i p ( s i , j ∣ x c o r r u p t , s z < i , s i , < j ) ] \mathcal{L}=\max_{\theta}\mathbb{E}_{\textbf{z}\sim Z_m}\Big[\sum_{i=1}^m\log\prod_{j=1}^{l_i} p(s_{i,j}|\textbf{x}_{corrupt},\textbf{s}_{z_{<i}},\textbf{s}_{i,<j})\Big] L=θmaxEzZm[i=1mlogj=1lip(si,jxcorrupt,sz<i,si,<j)]
其中, Z m Z_m Zm表现序列所有排列的集合, s z < i \textbf{s}_{z_{<i}} sz<i表示 [ s z 1 , … , s z i − 1 ] [\textbf{s}_{z_1},\dots,\textbf{s}_{z_i-1}] [sz1,,szi1]

​ GLM在unmaksed上下文上的双向注意力机制,使GLM-130B与使用单向注意力机制的GPT风格LLM。为了同时支持理解和生成,其混合了两种破坏目标函数,每个由特殊的mask token表示:

  • [MASK]:句子中的短空白,其长度被添加至输入的某一个部分;
  • [gMASK]:句尾随机长度的长空格,并提供前缀上下文;

​ 概念上来将,具有双向注意力的空白填充目标函数要比GPT风格的模型更有效的压缩上下文:当使用[MASK]时,GLM-130B的行为同BERT和T5;当使用[gMASK]时,GLM-130B的行为类似于PrefixLM。

​ 经验上来说,GLM-130B在zero-shot LAMBADA上实现了创记录的80.2%准确率,优于GPT-3和PaLM。通过设置注意力mask,GLM-130B单向变体可以与GPT-3和OPT-175B媲美。
在这里插入图片描述

Layer Normalization. 训练LLM的主要挑战是训练不稳定。LN的合适选择有助于稳定LLM的训练。我们对现有的实践进行了实验,Pre-LN、Post-LN和Sandwich-LN,这些都不适合稳定GLM-130B。

​ 我们后面的研究重点放在了Post-LN上,因为其在下游任务上效果很好,虽然其在GLM-130B上不稳定。幸运地是,新提出的DeepNorm产生了很好的训练稳定性。具体来说,给定GLM-130B层的数量N,我们采用
DeepNorm( x ) = LayerNorm ( α ⋅ x + Network ( x ) ) \text{DeepNorm(\textbf{x})}=\text{LayerNorm}(\alpha\cdot\textbf{x}+\text{Network}(\textbf{x})) DeepNorm(x)=LayerNorm(αx+Network(x))
其中, α = ( 2 N ) 1 2 \alpha=(2N)^{\frac{1}{2}} α=(2N)21。并在ffnv_projout_proj上应用了缩放因子为 ( 2 N ) − 1 2 (2N)^{-\frac{1}{2}} (2N)21的Xavier初始化。此外,所有的偏差项被初始化为0。上图3展示了GLM-130B的训练稳定性。

​ 位置编码和FFN。我们针对训练稳定性和下游表现,测试了位置编码(PE)和FFN的不同选项。GLM-130B中的位置编码选择了Rotary Positional Encding(RoPE),而不是ALiBi。为了改善Transformer中的FFN,我们选择GLU和GeLU作为激活的替代。

2. GLM-130的预训练设置

​ 受最近工作的启发,GLM-130B预训练目标不仅包含了自监督的GLM自回归空白填充,而且对一小部分token进行了多任务学习。这有助于改善下游的zero-shot表现。

​ **自监督空白填充(97%tokens)。**回想一下,GLM-130B在这个任务中同时使用了[MASK]和[gMASK]。具体来说,[MASK]用于遮蔽训练token30%的连续片段用于空白填充。片段的长度遵循Poisson分布( λ = 3 \lambda=3 λ=3),并且添加至输入的15%。对于其他70%的tokens,每个序列的前缀被保留为上下文,[gMASK]被用于遮蔽余下的部分。遮蔽的长度从均匀分布中采样。预训练数据包括1.2T Pile英文语料、1.0T中文Wudao语料和从网络上爬取的250G中文语料(包括在线论坛、百科和问答)。

​ 多任务Instruction预训练(MIP,5%的token)。T5和ExT5建议在预训练中进行多任务学习有助于微调,因此我们提出在GLM-130B预训练中包含各种语言理解、生成和信息抽取的instruction prompted数据集。

​ 相比于近期利用多任务prompted微调来改善zero-shot任务的迁移, MIP仅考虑5%的token且设置在预训练阶段来防止破坏LLM的其他一般性能力,例如:无条件自由生成。具体来说,我们包括了74个prompted数据集。

3. 平台感知的并行策略和模型配置

​ GLM-130B在96个DGX-A100 GPU(8x40G)的集群上训练了60天。目标是尽可能多的训练tokens,近期的研究表明大多数的LLM是训练不足的。

3D并行策略。数据并行和张量并行是训练10亿级参数模型的标准实践。为了进一步处理巨大的GPU显存需求,以及在节点之间进行张量并行导致的整体GPU利用率下降。我们合并了流水线模型并行,从而形成3D并行的策略。

​ 流水线并行将模型划分为每个并行组的顺序阶段,并进一步最小化由流水线引入的“气泡”,我们利用由DeepSpeed实现的PipeDream-Flush来训练GLM-130B,并使用全局batch size为4224来检索时间和GPU显存的浪费。我们采用4路张量并行和8路管道并行,达到135 TFLOP/s perGPU(40G)。

GLM-130B配置。我们的目标是确保100B的LLM能够以FP16精度运行在单个DGX-A100上。基于我们从GPT-3中获得的hidden state维度12288,得到的模型尺寸必须不大于130B参数。为了最大化GPU利用率,我们基于平台和对应的并行策略来配置模型。为了避免由于两端额外的word embedding导致中间阶段的显存利用率不足,我们从中移除一层来平衡流水线划分,使得GLM-130B中有 9 × 8 − 2 = 70 9\times 8-2=70 9×82=70的transformer层。

​ 在对集群的60天访问中,我们以固定每个样本长度为2048的情况下,在400B的tokens上训练了GLM-130B。对于[gMASK]训练目标,我们使用2048 tokens的上下文窗口。对于[MASK]和多任务目标,我们使用512的上下文窗口,并将4个样本拼接为2048长度。我们在前2.5%的样本上将batch size从192 warm-up至4224。我们使用AdamW作为优化器, β 1 \beta_1 β1 β 2 \beta_2 β2设置为0.9和0.95,权重衰减值为0.1。在前0.5%的样本上,我们将学习率从 1 0 − 7 10^{-7} 107 warm up至 8 × 1 0 − 5 8\times 10^{-5} 8×105,然后通过 10 × 10\times 10× consine调度进行衰减。我们使用的dropout率为0.1,裁剪梯度的值使用1.0。

三、GLM-130B的训练稳定性

​ 训练稳定性是GLM-130B质量的绝对因素,这很大程度上受到其通过的token数量影响。因此,考虑到计算使用的限制,对于浮点数(FP)格式必须进行效率和稳定性的权衡:低精度浮点数格式能够改善计算效率,但是可能会导致上溢和下溢问题,从而导致训练崩溃。

​ **混合精度。**我们遵循混合精度的常见实践,即FP16用于前、后向传播,FP32用于优化器状态和主要的权重,从而减少GPU显存使用并改善训练效率。类似于OPT-175B和BLOOM-176B,由于这种选择导致训练GLM-130B面临频繁的loss峰值,并且随着训练的进行会变得越来越频繁。与精度相关的峰值通常没有明确的原因:一些会自己恢复;另一些则会伴随着突然飙升的梯度范数,最终loss出现峰值或者NaN。

​ OPT-175B通过人工跳过数据和调整超参数来解决这个问题;BLOOM-176B则是通过embedding norm技术。我们花费了数个月来研究峰值并意识到当transformer变大时会有一些问题:

​ 首先,若使用Pre-LN,transformer主要分支的值尺寸在更深的层可能非常大。在GLM-130B中使用基于Post-LN的DeepNorm来解决,其会使得值的尺度总是有边界的。

​ 其次,随着模型规模的增大,注意力分数变得非常大以至于超过了FP16的范围。在LLM中没有什么选项来克服这个问题。在BLOOM-176B中,使用BF16格式来替换FP16,由于其在NVIDIA Ampere GPUs上有更加广的范围。但是由于BF16在梯度累加中转换为FP32,导致在我们的实验中比FP16多消耗约15%的显存,更重要的是其不支持其次的GPU平台。另一个来自BLOOM-176B的选择是应用embedding norm,但是对模型的表现有损坏。

Embedding层梯度收缩。我们的经验研究表明,梯度范数(gradient norm)可以作为训练崩溃的信息指标。具体来说,我们发现训练崩溃通常滞后于梯度范数峰值几个训练steps。这种峰值通常是由embedding层的异常梯度导致的,因为我们观察到在GLM-130B早期训练阶段,其梯度范数比其他层高几个数量级。此外,在训练早期其波动很大。在视觉模型中处理这个问题是通过固定patch投影层。不幸的是,我们不能固定语言模型中的embedding层。

​ 最终,我们发现在embedding层的梯度收缩(gradient shrink)有助于克服loss峰值,并且稳定GLM-130B的训练。这最早是在多模态transformer模型CogView中使用。具体来说,令 α \alpha α是收缩因子,可以通过下面的方式来轻易实现
word_embedding = word_embedding × α + word_embedding.detach() × ( 1 − α ) \text{word\_embedding}=\text{word\_embedding}\times\alpha+\text{word\_embedding.detach()}\times(1-\alpha) word_embedding=word_embedding×α+word_embedding.detach()×(1α)
根据经验来看,将设置 α = 0.1 \alpha=0.1 α=0.1有助于避免大多数的峰值,速度的损失可以忽略不计。

​ 事实上,最早GLM-130B训练仅在后期经历了3次loss发散,由于硬件故障而失败了无数次。

四、在RTX 2080 Ti上推理GLM-130B

在这里插入图片描述

​ GLM-130B的主要目标是在不减低效率和有效性的情况下,降低访问100B规模LLM的硬件需求。

​ 130B的模型尺寸可以使得在单个A100(40G*8)机器上运行完整的GLM-130B,而不是像OPT-175B和BLOOM-176B那样运行在高端A100(80G*8)机器上。为了加速GLM-130B的推理,我们也利用FasterTransformer来实现GLM-130B。相比于Huggingface中Pytorch实现的BLOOM-176B,GLM-130B在相同的单A100服务器上解码推理快7-8.4倍。

用于RTX 3090/2080的INT4量化。为了进一步支持流行的GPU,在保存性能优势的前提下尽可能的压缩GLM-130B,特别是通过量化。

​ 通常的实践是将模型权重和激活都量化为INT8。然而,我们的分析表明LLM的激活可能包含极端异常值。同时,在OPT-175B和BLOOM-176B中也发现了涌现的异常值,其仅影响0.1%的特征维度,因此可以通过矩阵乘法分解来解决问题。

​ 不同的是,GLM-130B的激活中存在约30%的异常值,使得上述的技术效率大大降低。因此,我们决定专注在良好模型权重,而保持模型激活为FP16精度。我们简单的使用训练后absmax量化,在运行时权重动态转换为FP16精度,引入了少量的计算开销,但是大幅度的降低了GPE显存的使用。

​ 令人兴奋的是,GLM-130B达到了INT4全量量化,而现有成功案例仅实现了INT8级别。相比于INT8,INT4版本有助于额外节约所需显存的一半至70GB,这样就允许GLM-130B在4 x RTX 3090 Ti(24)或者8 x RTX 2080 Ti(11G)上进行推理。上表2左侧表明,没有使用任何的后训练,INT4版本的GLML-130B几乎没有性能的下降,在常见基准上维持对GPT-3的优势。

在这里插入图片描述

GLM INT4全量量化scaling law。上图5右侧展示了性能随模型尺寸增加的趋势,表明GLM INT4权重量化性能存在scaling law。我们评测了GLM中这种唯一的潜在机制。上图5左侧绘制了权重值分布,其表明了对量化质量的直接影响。具体来说,值分布根据广泛的的线性层需要更大的bins进行量化,否则会导致更多的精度损失。值广泛分布的attn-densew2矩阵解释了BLOOM的INT4量化失败原因。相反地,GLM相比于类似尺寸的GPT,有着更窄的值分布。随着GLM模型尺寸的增大,INT4和FP16版本的差距进一步减小。

五、结果

​ 我们遵循GPT-3和PaLM等LLM的常用设置来评估GLM-130B。GLM-130B除了在英文上进行评估,作为双语模型也会在中文基准上进行评估。

GLM-130B中Zero-shot Learning范围讨论。因为GLM-130B已经使用MIP进行训练,这里明确了zero-shot评估的范围。事实上,“zero-shot”似乎有着争议性的解释,在社区没有达成共识。我们遵循一个重要的相关综述,其中“zero-shot learning设置在测试时,其目标是为测试图像分配一个未见过的类别标签”,其中涉及到未见过的类别标签是关键。因此,我们得出选择GLM-130B zero-shot数据集的准则是:

  • 英语:1) 对于那些带有固定标签的任务(如自然语言推断),不应该对此类任务中的任务数据集进行评估;2) 对于没有固定标签的任务(问答、主题分类):只有与MIP有明确领域迁移的数据集被考虑;
  • 中文:所有数据集多可以被评估,因为存在zero-shot跨语言迁移;

​ **过滤测试数据集。**遵循先前工作的实践和上面提及的准则,我们过滤并避免报告可能受到污染的数据集评估结果。对于LAMBADA和CLUE,我们发现在13-gram设定下是最小的覆盖。Pile、MMLU和BIG-bench要么被留出一部分,或者在爬取语料之后发布。

1. 语言建模

在这里插入图片描述

LAMBADA。LAMBADA是测试最后一个单词语言建模能力的数据集。GLM-130B使用双向注意力实现了80.2的zero-shot准确率,在LAMBADA上实现了新的记录。

Pile。Pile的测试集中包含了一系列的语义建模准则。与GPT-3和Jurassic-1相比,GLM-130B在18个加权BPB的共享测试集上实现了最好的表现,证明了其强大的语义能力。

2. 大规模多任务语言理解(MMLU)

在这里插入图片描述

​ MMLU是一个包含了57个多项选择问答任务的多样性基准,主要是从高中水平至专家水平的人类知识。其是在Pile爬取之后发布的,是一个LLM few-shot learning的理想测试基准。GPT-3的结果来自于MMLU,BLOOM-176B则是使用与GLM-130B相同的prompts来测试。

​ 如上图6所示,在见过大约300B的tokens后,GLM-130B在MMLU上的few-shot(5-shot)性能接近GPT-3(43.9)。随着训练的进行其会继续的上升,当训练结束是实现准确率44.8。这与观察结果一致,大多数现有的LLM远远没有得到充分的训练。

3. BIG-bench

​ BIG-bench对涉及模型推理、知识和常识能力的挑战性任务上进行基准测试。对于LLM来说,在150个任务上进行评估是耗时的,因此我们报告了BIE-bench-list,一个官方包含24个任务的子集合。观察上图7和表4,GLM-130B在zero-shot上优于GPT-3 175B,甚至是PaLM 540B。这可能要归功于GLM-130B的双向上下文注意力和MIP,其被证明能够在未见过的任务上改善zero-shot结果。随着shot的数量增加,GLM-130B的效果持续增加,并依旧领先于GPT-3。

限制与讨论。在上面的实验中,我们观察到GLM-130B随着few-shot样本增加而改善的性能没有GPT-3显著。这里从直觉上尝试理解这个现象。

​ 首先,GLM-130B的双向本质能够带来很强的zero-shot效果,使其能够接近相同规模的few-shot上界。其次,这可以是因为现有的MI范式缺陷,其仅涉及在训练中的zero-shot预测并导致GLM-130B偏向于更强的zero-shot学习能力,但是相对较弱的in-context few-shot效果。为了纠正这个偏差,我们提出的潜在解决方案是,若我们有机会为GLM-130B继续预训练,那么MIP会使用不同in-context样本的各种shot,而不仅仅是zero-shot样本。

​ 最后,尽管采用了与GPT-3相同的GPT架构,PaLM 540B在in-context learning中的few-shot相对增长要比GPT-3显著的多。我们推测,这种性能增长的进一步加速是PaLM高质量且多样化的私有训练语料导致的。

4. 中文语言理解评估(CLUE)

在这里插入图片描述
​ 我们在中文NLP基准CLUE和FewCLUE上评估GLM-130B的中文zero-shot效果。注意,我们在MIP中没有包含任何的中文下游任务。到目前为止,我们已经完成了两个基准的部分测试,包括7个CLUE和5个FewCLUE数据集。我们将GLM-130B与现有最大的中文单语模型260B的ERNIE Titan 3.0进行了比较。我们准确其设置来报告开发集上的zero-shot结果。GLM-130B在12个任务上优于ERNIE Titan 3.0。有趣的是,GLM-130B在两个抽象MRC数据集上比ERNIE至少好260%,可能是由于GLM-130B的预训练目标天然与抽象MRC形式契合。

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

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

相关文章

拼多多出评软件工具榜单助手使用教程

软件使用教程下载软件前&#xff0c;关闭电脑的防火墙&#xff0c;退出所有杀毒软件&#xff0c;防止刷单软件被误删桌面建立一个文件夹&#xff0c;下载下来的安装包放进去&#xff0c;解压到当前文件夹&#xff0c;使用过程中别打开防火墙、杀毒软件。打开软件后&#xff0c;…

移动WEB开发五、响应式布局

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

SAP FICO 理解业务范围的概念

业务范围 以前转载过几篇关于业务范围的文章&#xff1a; SAP Business Area 业务范围_SAP剑客的博客-CSDN博客_sap 业务范围 SAP FI 系列 002&#xff1a;业务范围派生_stone0823的博客-CSDN博客_sap 业务范围 http://blog.sina.com.cn/s/blog_3f2c03e30102w9yz.html 仍是…

虹科新品 | 最高80W!用于大基板紫外曝光系统的高功率UVLED光源

光刻曝光是指利用紫外光源将胶片或其他透明物体上的图像信息转移到涂有光敏材料&#xff08;光刻胶&#xff09;表面以得到高精度和极细微图案的一种制作工艺&#xff0c;主要用于半导体生产、高精密集成电路、PCB板制造、MEMS等行业。光刻技术是半导体工业和集成电路是最为核心…

十一、项目实战一

项目实战一 需求 以 前后端不分离的方式实现学生的增删改查操作 学生列表功能 接口设计 url:/students/ 请求方法&#xff1a;get 参数&#xff1a; 格式&#xff1a;查询参数 参数名类型是否必传说明pageint否页码&#xff0c;默认为1sizeinit否每页数据条数默认为10n…

浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析

摘 要&#xff1a;高速铁路电力智能运维管理系统采用终端感知层、系统网络层、系统平台层的三层网络架构模式&#xff0c;通过集成网关&#xff0c;共享通信传输设备&#xff0c;利用铁路专用运维传输网络通道将各类监测数据上传至运维管理平台数据进行实时分析&#xff0c;建…

k8s二进制部署

目录 一、K8S常见的部署方式 1.1 K8S常见的部署方式 1.2 k8s部署 二进制与高可用的区别 二、Kubernetes二进制部署 2.1 Kubernetes二进制部署准备 ① 服务器准备 ② 签发证书环境准备 2.2 操作系统初始化配置 2.3 部署 etcd 集群 ① 在 master01 节点上操作 ② work…

使用Fabric.js实现贝塞尔曲线波浪特效

一、前言 本文是在此基础上收到启发然后进行的变化&#xff0c;当然&#xff0c;观看与否不会影响接下来的阅读体验。 二、实现思路 其实整个波浪动画其实可以看成&#xff1a;在相对坐标系静止的视角下&#xff0c;一个正弦函数在直角坐标系上匀速平移时我们所观察到的效果…

如何防止订单重复提交

如何防止订单重复提交前言什么是重复下单为什么会重复下单&#xff1f;如何处理重复下单&#xff1f;利用数据库实现幂等利用Redis防重前言 最近在做电商项目&#xff0c;整理一下解决方案并帮助自己巩固知识点&#xff0c;此方案是结合了目前的业务环境&#xff0c;若有更好的…

Linux进程概念讲解

1、进程的基本概念在给进程下定义之前&#xff0c;我们先了解一下进程&#xff1a;我们在编写完代码并运行起来时&#xff0c;在我们的磁盘中会形成一个可执行文件&#xff0c;当我们双击这个可执行文件时&#xff08;程序时&#xff09;&#xff0c;这个程序会加载到内存中&am…

中央计算平台「上车」加速

随着英伟达、高通宣布在2024年开始陆续交付中央计算平台&#xff0c;Tier1正在跨域联合&#xff0c;以寻求在新的行业周期获得先发优势。 本月初&#xff0c;韩国LG电子宣布与高通达成合作协议&#xff0c;在原有座舱计算平台基础上&#xff0c;进一步拓展至智能驾驶领域。而在…

Transformer架构理解

参考&#xff1a; 1. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Proceedings of the 31st International Conference on Neural Information Pr…

Java 语法糖详解

本文从 Java 编译原理角度&#xff0c;深入字节码及 class 文件&#xff0c;抽丝剥茧&#xff0c;了解 Java 中的语法糖原理及用法&#xff0c;帮助大家在学会如何使用 Java 语法糖的同时&#xff0c;了解这些语法糖背后的原理。 什么是语法糖&#xff1f; 语法糖&#xff08…

金三银四一口气拿下三个offer的软件测试面试宝典,面试必看

说说你们怎么做接口自动化测试的☆☆☆☆☆ 我们是使用pythonrequesunittest来搭建我们的做接口自动化测试框架&#xff0c;使用python语言来调用第三方的类库requests来根据我们接口方法get或者post来发送接口请求&#xff0c;接收响应回来的数据进行适当的格式转换&#xff…

Python+Requests+PyTest+Excel+Allure 接口自动化测试实战

--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标…

Python爬虫进阶 - win和linux下selenium使用代理

目录 Windows selenium配置 下载地址 Chrome Chromedriver 版本对应关系 实践测试 操作元素 浏览器操作 获取元素信息 鼠标操作 实战demo selenium添加代理 Linux selenium配置 检查服务器环境 下载安装第三方库&#xff08;最简单版&#xff09; 实践测试 代码…

【2.20】动态规划 +项目 + 存储引擎

01背包问题 现有一容量为w的背包&#xff0c;有3个物品&#xff0c;每个物品重量不同&#xff0c;价值不同&#xff0c;问&#xff0c;怎样装才能价值最大化&#xff1f; 明确dp数组含义和下标含义&#xff1a;dp[j]表示当前背包的最大价值。j表示背包容量。递推公式&#xf…

【期末复习】例题说明Prim算法与Kruskal算法

点睛Prim与Kruskal算法是用来求图的最小生成树的算法。最小生成树有n个顶点&#xff0c;n-1条边&#xff0c;不能有回路。Prim算法Prim算法的特点是从个体到整体&#xff0c;随机选定一个顶点为起始点出发&#xff0c;然后找它的权值最小的边对应的另一个顶点&#xff0c;这两个…

IEEE学生会员注册

IEEE学生会员注册0、引言IEEE 会员介绍1、IEEE学生会员会费2、加入学生会员2.1、创建/登录 IEEE 账户2.2、填写/维护 个人基本信息2.3、填写/维护 基本教育信息3、选择一个你将要加入的协会或社团4、确认购物车5、付款5.1、付款详情信息页5.2、扫码付款并验证5.3、会员确认邮件…

【前端提效】-- VsCode 实用插件推荐

EditorConfig for VS Code ***** 作用&#xff1a;多人协同开发&#xff0c;规范缩进风格&#xff0c;缩进大小&#xff0c;tab长度以及字符集等&#xff0c;解决不同IDE的编码范设置&#xff0c;在这里配置&#xff08;.editorconfig&#xff09;的代码规范规则优先级高于编辑…