复刻ChatGPT语言模型系列-(一)基座模型选取

news2024/11/16 19:53:14

前言

今天开始我将会推出一系列关于复刻ChatGPT语言模型的博文。本系列将包括以下内容:

  • 复刻ChatGPT语言模型系列-(一)基座模型选取
  • 复刻ChatGPT语言模型系列-(二)参数高效微调
  • 复刻ChatGPT语言模型系列-(三)指令学习微调
  • 复刻ChatGPT语言模型系列-(四)文本生成解码
  • 复刻ChatGPT语言模型系列-(五)强化学习RLHF
  • 复刻ChatGPT语言模型系列-(六)LLM模型评估

在本系列的第一篇博文中,我们将会探讨如何选取一个好的预训练语言模型作为基座。选择一个优秀的基座模型非常重要,因为它会直接影响到后续模型的训练和性能表现。乱花渐欲迷人眼,目前社区涌现出许多优秀的大模型,这让我们选择起来十分困难。因此,本文将介绍并分析这些大模型,从中选择出适合作为基座的模型。我们将深入探究这些模型的特点和性能,并分析其优缺点。本文旨在为大家提供选取基座模型的参考意见,帮助大家更好地复刻ChatGPT语言模型。

以下是目前已经开放的基座模型清单,本文将专注介绍已开源模型,而其他模型则请读者自行了解。

模型名称发布时间发布机构语言参数规模Tokens规模模型结构是否开源
T52019-10Google13BT5-style
GPT-32020-05OpenAI175B300BGPT-stylex
CPM12021-03Tsinghua2.6BGPT-style
LaMDA2021-05Google137B2.8TGPT-stylex
CPM22021-07Tsinghua11B/198B(MoE)Encoder-Decoder
Jurassic2021-08AI21178B300BGPT-stylex
MT-NLG2021-10Microsoft, NVIDIA530B270BGPT-stylex
ERNIE 3.02021-12Baidu260B300BMulti-taskx
Gopher2021-12DeepMind280B300BGPT-stylex
Chinchilla2022-04DeepMind70B1.4TGPT-stylex
PaLM2022-04Google多语言540B780BGPT-stylex
OPT2022-05Meta125M-175B180BGPT-style
BLOOM2022-07BigScience多语言176B366BGPT-style
GLM-130B2022-08Tsinghua中、英130B400BGLM-style
Wenzhong2022-09IDEA3.5BGPT-style
LLaMA2023-02Meta多语言7B-65 B1.4TGPT-sryle
MOSS2023-04FUDAN中、英16B700BGPT-sryle

参考链接:https://zhuanlan.zhihu.com/p/614766286

微调模型

模型名称发布时间发布机构语言模态参数规模基础模型是否开源
GPT-3.52021-06OpenAI多语言文本175BGPT-3x
FLAN2021-09Google文本137BLaMDAx
T02021-10Hugging Face文本13BT5
Flan-PaLM2022-10Google多语言文本540BPaLMx
BLOOMZ2022-11Hugging Face多语言文本176BBLOOM
mT02022-11Hugging Face多语言文本13BmT5
ChatGPT2022-11OpenAI多语言文本173BGPT3.5x
Alpaca2023-3-14StandFord文本7BLLaMA
ChatGLM2023-3-14Tsinghua中、英文本{:[6B],[130B]:}GLM
GPT-42023-3-14OpenAI多语言文本、图像GPT-4x
ERNIE Bot2023-3-15Baidu文本、图像260B√ERNIEx
Bard2023-3-21Google文本137BLaMDAx
MOSS2023-4FUDAN中、英文本16BCodeGen

CPM

CPM模型是由智源、清华开发的一种基于大规模中文训练数据进行生成式预训练的中文预训练语言模型。该模型具有26亿个参数和100GB中文训练数据,是目前最大的中文预训练语言模型之一。CPM模型在各种中文自然语言处理任务中表现出色,包括对话、文章生成、填空测试和语言理解等任务。

论文标题:CPM: A large-scale generative Chinese Pre-trained language model

论文地址:CPM: A large-scale generative Chinese Pre-trained language model - ScienceDirect

模型结构:基于Transformer的自回归模型,GPT类结构;

训练数据:100G中文语料;

改动点:较GPT3采用更大的batch_size。

OPT

OPT-175B是Meta AI在2022年5月3日发布的一款开放模型,是模型参数超过千亿级别的开放模型之一。相比于GPT-3,该模型更加开放便于访问,并在以下五个方面表现出其开放性:

  1. 论文:该模型提供了某些能力可能存在的证明,并揭示可以建立在此基础上的一般思想。

  2. API访问:该模型允许研究人员探索和评估现有基础模型的能力和局限性,例如推理和偏差。

  3. 模型权重:研究人员可以使用该模型的权重来逐步改进现有模型、开发更深入的可解释技术和更有效的微调方法。

  4. 训练数据:该模型让研究人员更好地理解训练数据在模型行为中的作用,例如情境学习从何而来。

  5. 计算:该模型允许研究人员尝试新的架构、培训目标/程序、进行数据集消融,并在不同领域开发全新的模型。虽然这种方法具有最大的理解和改进潜力,但也相当昂贵。

作为一个大规模的语言模型,OPT-175B具有超过1750亿个参数,是目前为止最大的语言模型之一。该模型通过在公开可用的数据集上进行训练,允许更多的社区参与了解这项基础新技术。为了保持完整性并防止滥用,Meta AI将在非商业许可下发布他们的模型,以专注于研究用例。该模型的访问权限将授予学术研究者、政府机构、民间社会和学术界组织的人员,以及世界各地的工业研究实验室。

项目地址:GitHub - facebookresearch/metaseq: Repo for external large-scale work

论文地址:https://arxiv.org/pdf/2205.01068.pdf

模型结构: Decoder Only

Model#L#Hd_modelLRBatch
125M12127686.0 e-40.5M
350M241610243.0 e-40.5M
1.3B243220482.0 e-41M
2.7B323225601.6 e-41M
6.7B323240961.2 e-42M
13B404051201.0 e-44M
30B485671681.0 e-44M
66B647292160.8 e-42M
175B9696122881.2 e-42M

训练过程:

OPT与GPT3的训练过程比较如下:

ModelGPUFLOPsdays
OPT1024 80G A100√4.30E+2333
GPT310,000 32G V100√3.14E+2314.8

Meta将OPT系列模型的训练过程记录在logbook中,地址如下:metaseq/README.md at main · facebookresearch/metaseq · GitHub。这个logbook主要记录了作者训练OPT系列模型的辛酸历程,包括遇到的一些问题、讨论分析以及解决方法。

有兴趣的可以仔细阅读原文,或者OPT logbook:训练大规模语言模型的一些经验。

总结如下,Meta主要遇到收敛/数值稳定性问题、机器故障问题。

  • 面对收敛/数值稳定性问题:Meta主要采取降低学习率、参照成熟框架设置参数、切换激活函数的方法;

  • 面对机器故障问题:Meta主要开发监控、自动化工具进行监测。

LLAMA

LLaMA(Large Language Model Meta AI),由 Meta AI 发布的一个开放且高效的大型基础语言模型,共有 7B13B33B65B(650 亿)四种版本。其数据集来源都是公开数据集,无任何定制数据集,保证了其工作与开源兼容和可复现,整个训练数据集在 token 化之后大约包含 1.4T 的 token。

关于模型性能,LLaMA 的性能非常优异:具有 130 亿参数的 LLaMA 模型「在大多数基准上」可以胜过 GPT-3( 参数量达 1750 亿),而且可以在单块 V100 GPU 上运行;而最大的 650 亿参数的 LLaMA 模型可以媲美谷歌的 Chinchilla-70B 和 PaLM-540B。

关于训练集,其来源都是公开数据集,无任何定制数据集,保证了其工作与开源兼容和可复现。整个训练数据集在 token 化之后大约包含 1.4T 的 token。其中,LLaMA-65B 和 LLaMA-33B 是在 1.4万亿个 token 上训练的,而最小的模型 LLaMA-7B 是在 1万亿个 token 上训练的。

论文标题:LLaMA: Open and Efficient Foundation Language Models

论文链接:https://arxiv.org/pdf/2302.13971.pdf

模型结构

  • PreLayerNorm-RMSNorm-Root Mean Square Layer Normalization
  • ROPE旋转位置编码(替换绝对/相对位置编码)
  • SwiGLU激活函数(替换ReLU)-GLU Variants Improve Transformer

改动点

过了1T的Token:过去的研究发现最好的性能不是在最大的模型上,而是在过了更多token的模型上;

与OpenAI提出大模型缩放法则不同的是,DeepMind认为当前许多大模型是训练不充分的;

OpenAI在《Scaling Laws for Neural Language Models》中,指出在给定计算量的时候,模型性能的提升主要在于增加参数规模而不是增加数据量;

DeepMind在《Training Compute-Optimal Large Language Models》中,指出在每条曲线的最小值的左侧,模型太小了——在较少数据上训练的较大模型将是一种改进。在每条曲线的最小值的右侧,模型太大——在更多数据上训练的较小模型将是一种改进。最好的模型处于最小值。

GnffTU

BLOOM

BLOOM 是 BigScience(一个围绕研究和创建超大型语言模型的开放协作研讨会)中数百名研究人员合作设计和构建的 176B 参数开源大语言模型,同时,还开源了BLOOM-560M、BLOOM-1.1B、BLOOM-1.7B、BLOOM-3B、BLOOM-7.1B 其他五个参数规模相对较小的模型。BLOOM 是一种 decoder-only 的 Transformer 语言模型,它是在 ROOTS 语料库上训练的,该数据集包含 46 种自然语言和 13 种编程语言(总共 59 种)的数百个数据来源。

论文标题:BLOOM: A 176B-Parameter Open-Access Multilingual Language Model

论文链接:https://arxiv.org/pdf/2211.05100.pdf

模型结构

0hYelu

核心介绍:

  1. 基于Megatron-LM GPT2模型开发,模型结构为Decoder-only类型;

  2. ALiBi Positional Embeddings。它允许外推比训练模型的输入序列更长的输入序列,同时有助于加速训练收敛。因此,即使训练时使用长度为 2048 的序列,模型也可以在推理过程中处理更长的序列。思路来源于: Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation;

  3. Embedding LayerNorm。在 embedding 层之后立即添加额外的归一化层(layer norm 层)。这个方法来源于 bitsandbytes^17库 (Dettmers et al., 2022),作者的实验发现这样可以显著提高训练的稳定性。另外,模型最终的训练是在 bfloat16 下进行的。思路来源于:8-bit Optimizers via Block-wise Quantization

同时开发人员也记录了项目的开发过程:千亿参数开源大模型 BLOOM 背后的技术,关键信息如下:

  1. 基于Megatron-DeepSpeed 实现了 3D 并行以允许大模型以非常有效的方式进行训练。包括数据并行 (Data Parallelism,DP)、张量并行 (Tensor Parallelism,TP)、流水线并行 (Pipeline Parallelism,PP)。

  2. 用 FP16 训练巨型 LLM 模型是一个禁忌。FP16会产生精度溢出,使用BF16进行训练。

  3. CUDA 融合核函数。为了快速高效地训练 BLOOM,有必要使用 Megatron-LM 提供的几个自定义 CUDA 融合核函数。特别地,有一个 LayerNorm 的融合核函数以及用于融合缩放、掩码和 softmax 这些操作的各种组合的核函数。Bias Add 也通过 PyTorch 的 JIT 功能与 GeLU 融合。这些操作都是瓶颈在内存的,因此将它们融合在一起以达到最大化每次显存读取后的计算量非常重要。因此,例如,在执行瓶颈在内存的 GeLU 操作时同时执行 Bias Add,运行时间并不会增加。这些核函数都可以在 Megatron-LM repository 代码库 中找到。

  4. 硬件故障也颇有挑战。

WenZhong

闻仲语言模型出自IDEA研究院的封神榜模型系列,专注于生成任务,提供了多个不同参数量的生成模型,例如GPT2等。

Fengshenbang-LM(封神榜大模型)是IDEA研究院认知计算与自然语言研究中心主导的大模型开源体系,成为中文AIGC和认知智能的基础设施。

4hwtIC

项目地址:GitHub - IDEA-CCNL/Fengshenbang-LM: Fengshenbang-LM(封神榜大模型)是IDEA研究院认知计算与自然语言研究中心主导的大模型开源体系,成为中文AIGC和认知智能的基础设施。

GLM

GLM-130B 是清华大学与智谱AI共同研制的一个开放的双语(英汉)双向密集预训练语言模型,拥有 1300亿个参数,使用通用语言模型(General Language Model, GLM)的算法进行预训练。 2022年11月,斯坦福大学大模型中心对全球30个主流大模型进行了全方位的评测,GLM-130B 是亚洲唯一入选的大模型。GLM-130B 在广泛流行的英文基准测试中性能明显优于 GPT-3 175B(davinci),而对 OPT-175B 和 BLOOM-176B 没有观察到性能优势,它还在相关基准测试中性能始终显著优于最大的中文语言模型 ERNIE 3.0 Titan 260B。GLM-130B 无需后期训练即可达到 INT4 量化,且几乎没有性能损失;更重要的是,它能够在 4×RTX 3090 (24G) 或 8×RTX 2080 Ti (11G) GPU 上有效推理,是使用 100B 级模型最实惠的 GPU 需求。

GLM介绍

论文标题:GLM: General Language Model Pretraining with Autoregressive Blank Infilling

论文地址:https://arxiv.org/pdf/2103.10360v2.pdfhttps://arxiv.org/pdf/2103.10360v2.pdf

训练目标

jkMmBZ

max ⁡ θ E z ∼ Z m [ ∑ i = 1 m log ⁡ p θ ( s z i ∣ x corrupt  , s z < i ) ] \max _\theta \mathbb{E}_{\boldsymbol{z} \sim Z_m}\left[\sum_{i=1}^m \log p_\theta\left(\boldsymbol{s}_{z_i} \mid \boldsymbol{x}_{\text {corrupt }}, \boldsymbol{s}_{\boldsymbol{z}_{<i}}\right)\right] maxθEzZm[i=1mlogpθ(szixcorrupt ,sz<i)]

p θ ( s i ∣ x corrupt  , s z < i ) = ∏ j = 1 l i p ( s i , j ∣ x corrupt  , s z < i , s i , < j ) \begin{aligned} & p_\theta\left(\boldsymbol{s}_i \mid \boldsymbol{x}_{\text {corrupt }}, \boldsymbol{s}_{\boldsymbol{z}_{<i}}\right) \\ = & \prod_{j=1}^{l_i} p\left(s_{i, j} \mid \boldsymbol{x}_{\text {corrupt }}, \boldsymbol{s}_{\boldsymbol{z}_{<i}}, \boldsymbol{s}_{i,<j}\right) \end{aligned} =pθ(sixcorrupt ,sz<i)j=1lip(si,jxcorrupt ,sz<i,si,<j)

模型结构

  • 改变层归一化、残差网络结构的顺序(避免出现数值错误)
  • 新增线性层输出结果
  • 使用GeLUs激活函数替代ReLU

微调方式

  • 对于分类任务,对于token分类,就使用目标token的表示;对于序列分类那就是使用cls的表示。
  • 对于生成任务,partB 部分直接换成 mask 即可。

讨论分析

BERTXLNETEncoder-DecoderUniLM
BERT中不能很好处理连续的多个token; mask token是独立的,不能捕捉mask token之间的依赖关系。xlnet使用了双流的注意力机制,改变了transformer的结构,增加了耗时。使用了两个transformer模型实现了单向和双向注意力,加入token来识别mask span,浪费模型能力;训练和微调不一致。在自编码框架下使用了mask来统一单双向的注意力。对于生成任务来说,还是不够高效。

与bert对比
bert是自编码模型,预测mask的字符。因为模型中的mask token是独立的,bert不能捕捉mask token之间的依赖性。bert的另一个缺点是不能预测多个连续的mask token,尤其是待预测长度未知情况下。

与xlnet的对比
都是自回归的模型。xlnet需要知道预测token的长度;使用双流注意力机制解决了信息泄漏的问题,改变了transfomer的结构,增加了耗时;xlnet决定一个token是否被独立预测。

与编码解码模型对比
T5也是处理的空白填充的任务目标,但是GLM使用了单个的transformer编码器学习单向和双向的注意力。通过共享参数使参数比编码解码模型更有效。T5在编码和解码阶段使用不同的位置编码,使用哨兵标记来识别不同的mask跨度,哨兵标记造成了模型能力的浪费和预训练微调的不一致性。

与UniLM对比
UniLM是通过在自编码框架下改变在双向,单向,互相之间的attention mask来统一预训练目标;由于自编码模型的独立假设,自回归模型不能完全捕捉当前token对于前面token的依赖。对于微调下游任务来说,自编码会比自回归更加低效。

GLM130B

glm

  • 130B的原因是该大小能够在一个A100服务器(40G*8)上进行推理
  • 千亿模型训练的问题:硬件故障、梯度爆炸、内存溢出、3D并行、无法恢复优化器状态、TCP通信阻塞
  • [MASK]、[gMASK]分别用作短文本、长文本生成
  • 结构优化点:RoPE、DeepNorm、GeLU
  • 预训练:95%的MASK自回归任务、5%的多任务指令学习(T0、DeepStruct)
  • 400B的Token,但是据估计130B模型需要4T的Token
  • GLM-130B FP16-需要260G显存存储模型权重

UniLM

许多人指出GLM和UniLM的模型结构非常相似。下面将对UniLM的模型结构进行详细介绍。

UniLM是微软研究院在Bert的基础上,最新产出的预训练语言模型,被称为统一预训练语言模型。 它可以完成单向、序列到序列和双向预测任务,可以说是结合了AR和AE两种语言模型的优点,Unilm在抽象摘要、生成式问题回答和语言生成数据集的抽样领域取得了最优秀的成绩。

论文标题:Unified Language Model Pre-training for Natural Language Understanding and Generation

论文地址:https://arxiv.org/pdf/1905.03197.pdf

预训练阶段

  1. 输入:Token Embedding、Position Embedding、Segment Embedding(区分任务目标)

  2. 预训练目标:随机掩码[MASK]语言模型+NSP

  3. 单向语言模型:predict the masked token of “x1x2 [MASK] x4”, only tokens x1, x2 and itself can be used.

  4. 双向语言模型:predict the masked token of “x1x2 [MASK] x4”, all tokens can be used.

  5. Seq2Seq语言模型: given source segment t1t2 and its target segment t3t4t5, we feed input “[SOS] t1 t2 [EOS] t3 t4 t5 [EOS]” into the model. While both t1 and t2 have access to the first four tokens, including [SOS] and [EOS], t4 can only attend to the first six tokens.

  6. 训练过程:1/3训练双向语言模型;1/3训练Seq2Seq语言模型;1/6训练从左到右单向语言模型;1/6训练从右到左单向语言模型;BERT-Large作为初始化模型;15%概率掩码,80%为[MASK],10%为随机Token,10%保持不变

微调阶段

  1. NLU任务:类似于BERT,取[SOS]表征句子输入
  2. NLG任务:“[SOS] S1 [EOS] S2 [EOS]”. The model is fine-tuned by masking some percentage of tokens in the target sequence at random, and learning to recover the masked words. EOS也会被MASK

MOSS

MOSS是一个支持中英双语和多种插件的开源对话语言模型,moss-moon系列模型具有160亿参数,在FP16精度下可在单张A100/A800或两张3090显卡运行,在INT4/8精度下可在单张3090显卡运行。MOSS基座语言模型在约七千亿中英文以及代码单词上预训练得到,后续经过对话指令微调、插件增强学习和人类偏好训练具备多轮对话能力及使用多种插件的能力。

以下根据知乎回答总结MOSS的训练过程:

MOSS 001(OpenChat 001)

  • 数据来源:从OpenAI的论文附录里扒了一些它们API收集到的user prompt,然后用类似Self-Instruct的思路用text-davinci-003去扩展出大约40万对话数据。

  • 基座模型:16B基座(CodeGen)

  • 实验结果:一月份的OpenChat 001就已经具备了指令遵循能力和多轮能力,而且还惊喜的发现它具有很强的跨语言对齐能力,它的基座预训练语料中几乎不存在中文,但是却可以理解中文并用英文回答。

wqrnAr

zNXvlX

WcZoK6

MOSS 002

  • 优化点:OpenChat 001不具备中文能力,不知道关于自己的信息(比如名字、能力等),且安全性较低

  • 数据来源:一方面加入了约30B中文token继续训练基座,另一方面也加入了大量中英文helpfulness, honesty, harmlessness对话数据,这部分数据共计116万条对话,目前也全部已在huggingface开源:fnlp/moss-002-sft-data · Datasets at Hugging Face

MOSS 003

  • 优化点1:继续加大中文语料的预训练,截止目前MOSS 003的基座语言模型已经在100B中文token上进行了训练,总训练token数量达到700B,其中还包含约300B代码。

  • 优化点2:在开放内测后,我们也收集了一些用户数据,我们发现真实中文世界的用户意图和OpenAI InstructGPT论文中披露的user prompt分布有较大差异(这不仅与用户来自的国家差异有关,也跟产品上线时间有关,早期产品采集的数据中存在大量对抗性和测试性输入),于是我们以这部分真实数据作为seed重新生成了约110万常规对话数据,涵盖更细粒度的helpfulness数据和更广泛的harmlessness数据。此外,还构造了约30万插件增强的对话数据,目前已包含搜索引擎、文生图、计算器、方程求解等。

tFzNz9

基座模型选取

基于训练一个中文ChatGPT模型的出发点,需要选用具备中文支持性高、模型参数量大且已开源的基座模型。我们的候选项包括GLM、LLAMA、MOSS、BLOOM、CPM、闻仲模型,接下来将在这些候选项中进行比较,以确定最终选项。

  • 首先是CPM模型,其训练语料中,文章、对话语料居多,模型参数量较少,微调后的模型泛化性较差,生成结果与对话风格较大;

  • 另外,闻仲模型,模型参数量同样较小;

  • 接下来,LLAMA模型,尽管该模型在英文支持性方面表现不错,但据统计其Tokenizer中仅包括约700个中文字符,中文支持性较差;

  • BLOOM模型虽然支持多语言,但是其中文语料仅占16%,这意味着其可能无法提供足够的中文知识;

d8h2ky

  • GLM模型则是支持中英文双语的130B模型,是亚洲唯一入选斯坦福大模型评测的模型。GLM模型在中文支持性和模型参数量方面表现出色,此外,该模型已开源,可以为我们提供强大的基座模型。

综上所述,GLM模型是复刻中文ChatGPT的一个较优基座模型选择。

当然目前也有不少基于其他基座模型的工作,比如:

GitHub - ymcui/Chinese-LLaMA-Alpaca: 中文LLaMA&Alpaca大语言模型+本地CPU/GPU部署 (Chinese LLaMA & Alpaca LLMs)

GitHub - LianjiaTech/BELLE: BELLE: Be Everyone’s Large Language model Engine(开源中文对话大模型)

总结

本文着重探讨如何选取一个好的预训练语言模型作为基座,最终选择在中文支持性和模型参数量方面表现出色的GLM模型。后续系列包括:

  • 复刻ChatGPT语言模型系列-(二)参数高效微调
  • 复刻ChatGPT语言模型系列-(三)指令学习微调
  • 复刻ChatGPT语言模型系列-(四)文本生成解码
  • 复刻ChatGPT语言模型系列-(五)强化学习RLHF
  • 复刻ChatGPT语言模型系列-(六)LLM模型评估

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

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

相关文章

玩机搞机--定制系统 编译系统选项 隐藏设置 关闭app联网 增加设置选项

在接待一些定制rom的过程中。对于有些客户的有些要求作出对应的系统编译操作选项。例如 1-----默认开启usb 2-----默认开启usb安全设置&#xff0c;使其开机就可以投屏操控 3------默认开启关机充电自动重启 4-----对于客户特定的app&#xff0c;使其不能联网操作 5-----对…

【Java入门合集】第四章继承(一)

【Java入门合集】第四章继承&#xff08;一&#xff09; 博主&#xff1a;命运之光专栏&#xff1a;JAVA入门 学习目标 1.掌握继承性的主要作用、实现、使用限制&#xff1b; 2.掌握this和super的含义及其用法&#xff1b; 3.掌握方法覆写的操作&#xff1b; 4.掌握final关键字…

Linux——进程信号

进程信号 信号的基础生活中技术上 信号的产生信号捕捉接口信号发送接口向任意进程发送信号向自己发送信号 进程退出时——核心转储 信号的保存信号其它相关概念信号如何实现捕捉的 信号的处理sigset_t信号集操作函数sigprocmasksigpending对于信号保存更深入的理解sigaction 可…

JavaWeb ( 八 ) 过滤器与监听器

2.6.过滤器 Filter Filter过滤器能够对匹配的请求到达目标之前或返回响应之后增加一些处理代码 常用来做 全局转码 ,session有效性判断 2.6.1.过滤器声明 在 web.xml 中声明Filter的匹配过滤特征及对应的类路径 , 3.0版本后可以在类上使用 WebFilter 注解来声明 filter-cla…

JVM 类加载子系统

内存结构概述 粗略图: 详细图&#xff1a; 类加载器与类的加载过程 类加载子系统负责从文件系统或者网络中加载 Class 文件&#xff0c; class 文件在文件开头有特定的文件标识ClassLoader 只负责 class 文件的加载,至于它是否可以运行, 则由 Execution Engine 决定加载的类信…

AI读心重磅突破登Nature!大脑信号1秒被看穿,还能预测未来画面

夕小瑶科技说 分享 来源 | 新智元 最近&#xff0c;来自洛桑联邦理工学院的研究团队提出了一种全新的方法&#xff0c;可以用AI从大脑信号中提取视频画面。论文已登Nature&#xff0c;却遭网友疯狂「打假」。 现在&#xff0c;AI不仅会读脑&#xff0c;还会预测下一个画面了&a…

实验十九、利用运算电路解方程

一、题目 研究利用运算电路解方程。已知一元二次方程为 2 X 2 X − 6 0 2X^2X-60 2X2X−60&#xff0c;试求其解。 二、仿真电路 按方程式搭建电路&#xff0c;如图1所示。该电路为加减运算电路&#xff0c;由于同相和反相端电阻参数对称&#xff0c;故省略掉了同相输入端…

2.docker—数据卷操作

文章目录 1、配置数据卷2、数据卷容器3、小结 1、配置数据卷 挂载 # 创建启动容器时&#xff0c;使用 –v 参数 设置数据卷 sudo docker run ... –v 宿主机目录(文件):容器内目录(文件) ...sudo docker run -it --namec1 -v /home/sjj/data:/root/data_container centos:7 /…

【C++进阶之路】类和对象(中)

文章目录 前言六大默认成员函数 一.构造函数性质默认构造函数构造函数(需要传参) 二.析构函数性质默认析构函数练习 三.拷贝构造函数基本性质&#xff1a;形参必须是引用默认拷贝构造浅拷贝深拷贝自定义类型 四.赋值运算符重载函数基本特征全局的运算符重载函数局部的运算符重载…

深入学习 Kotlin 枚举的进阶用法:简洁又高效~

翻译自&#xff1a;https://towardsdev.com/mastering-enums-in-kotlin-a-guide-to-simplify-your-code-130b5934cb16 Kotlin 作为现代的、强大的编程语言&#xff0c;可以给开发者提供诸多特性和工具&#xff0c;得以帮助我们编写更加高效、更具可读性的代码。 其中一个重要的…

开源工具系列7:Kube-bench

导语 Kube-Bench 是一个基于Go开发的应用程序&#xff0c;属于 Kubernete 的安全检测的工具。它可以帮助研究人员对部署的 Kubernete 进行安全检测。 Kube-Bench 是什么 从本质上来说&#xff0c;Kube-Bench 是一个基于Go开发的应用程序&#xff0c;属于 Kubernete 的安全检…

免费版的mp3格式转换器有哪些?这三款软件帮你实现!

在娱乐文化越来越丰富的今天&#xff0c;人们越来越追求音乐、视频等娱乐方式&#xff0c;其中音乐作为一种能够治愈心灵的艺术形式备受欢迎。但要欣赏一首美妙的音乐&#xff0c;就需要我们自己去制作、编辑并转换其格式&#xff0c;以适应各种软件如MP3、MP4等格式。 方法一…

在 Python 中将 Tqdm 与 Asyncio 结合使用

动动发财的小手&#xff0c;点个赞吧&#xff01; 简介 困扰 在 Python 中使用并发编程来提高效率对于数据科学家来说并不罕见。在后台观察各种子进程或并发线程以保持我的计算或 IO 绑定任务的顺序总是令人满意的。 但是还有一点困扰我的是&#xff0c;当我在后台并发处理成百…

数据结构篇五:队列

文章目录 前言1.队列1.1 队列的概念及结构1.2 队列的实现 2. 各功能的解析及实现2.1 队列的创建2.2 初始化队列2.3 队尾入队列2.4 队头出队列2.5 获取队头元素2.6 获取队尾元素2.7 队列中有效元素个数2.8 检查队列是否为空2.9 销毁队列 3.代码实现3.1 Queue.h3.2 Queue.c3.3 te…

JavaWeb ( 七 ) JSTL Tag标签

2.5.JSTL标签与EL表达式 2.5.1.EL表达式 EL表达式 : Expression Language 目的&#xff1a;为了使JSP写起来更加简单 格式&#xff1a;${expression} EL 提供“.“和“[ ]“两种运算符来存取数据。${user.name}, ${user[“name”] }支持算术操作符, 关系操作符, 逻辑操作符…

Python:Python进阶:内存管理机制

Python内存管理机制 1. 堆2. 栈3. 引用4. Python中可变对象和不可变对象有个问题&#xff1a;你可以好好思考下总结 Python内存管理程序是用 C/C写的&#xff0c;这里我们以 CPython解释器为例说明。 在Python 中 所有数据类型 包括&#xff1a;int dict str都是一个对象&#…

层次分析法及找工作问题实战

学习知识要实时简单回顾&#xff0c;我把学习的层次分析法简单梳理一下&#xff0c;方便入门与复习。 AHP 层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;简称 AHP&#xff09;是对一些较为复杂、较为模糊的问题作出决策的简易方法&#xff0c;它特别适用于那…

C++类和对象上

专栏&#xff1a;C/C 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本章为大家带来C类和对象相关内容。 类和对象 前言面向过程和面向对象类的引入类的定义对于类中成员的命名建议 类的访问限定符及封装访问限定符封装 类的作用域类的实例化如何计算类对象的大小this指针t…

Web自动化测试——XAPTH高级定位

XAPTH高级定位 一、xpath 基本概念二、xpath 使用场景三、xpath 相对定位的优点四、xpath 定位的调试方法五、xpath 基础语法&#xff08;包含关系&#xff09;六、xpath 顺序关系&#xff08;索引&#xff09;七、xpath 高级用法1、[last()]: 选取最后一个2、[属性名属性值 an…

ESP32设备驱动-PCF8575IO扩展器驱动

PCF8575IO扩展器驱动 文章目录 PCF8575IO扩展器驱动1、PCF8575介绍2、硬件准备3、软件准备4、驱动实现1、PCF8575介绍 PCF8575用于两线双向总线 (I2C) 的 16 位 I/O 扩展器专为 2.5-V 至 5.5-V VCC 操作而设计。 PCF8575 器件通过 I2C 接口 [串行时钟 (SCL)、串行数据 (SDA)]…