面试问题记录1

news2024/10/21 20:35:41

1、推理加速有哪些技术?
2、page attention在1个输入的时候、会有效果吗
3、美杜莎的原理是?
4、DPO过拟合有什么解决办法?
5、给一个config文件、如何计算大模型的参数量、比如qwen7b

一、大模型推理加速技术有

在文本大模型推理中,计算资源和时间开销是主要的瓶颈,因此各种推理加速技术方案被提出,目的是减少计算复杂度、内存占用以及提高推理速度。以下是几种常见且有效的加速方案,包括你提到的几种和其他技术:

1. Flash Attention

  • 原理:Flash Attention 通过减少计算和内存使用来优化 Transformer 模型的注意力机制。它使用一种被称为 Fused Attention 的技术,直接在 GPU 上进行计算,避免了传统注意力机制中的中间结果存储和反复访问,减少了显存消耗。
  • 优势
    • 内存效率高:减少了中间值的存储,尤其是对非常长的输入有效。
    • 速度提升:通过内存访问模式优化,可以提高推理速度,特别是当序列长度变得很长时。
  • 适用场景:长序列处理,例如大语言模型(LLMs)的推理。

2. Page Attention

  • 原理:Page Attention 将长序列分割成多个窗口(页面),每个窗口内进行局部的注意力计算,从而避免了全局注意力的高计算复杂度。模型仅在局部范围内进行注意力计算,大幅降低了内存需求和计算量。
  • 优势
    • O(n²) 降低到 O(w²):通过局部注意力机制,减少了全局注意力矩阵的计算量。
    • 高效处理超长输入:对极长的输入文本非常有效,可以保持推理速度。
  • 适用场景:用于长序列模型如 GPT 类模型,能够在处理非常长的输入(如数万 token)时大幅加速推理。

3. 美杜莎(Medusa)

  • 原理:美杜莎通过将大模型与小模型结合起来处理推理任务。小模型用于处理简单的输入,大模型仅在小模型无法处理复杂输入时介入。通过 条件推理动态计算,实现推理加速。
  • 优势
    • 动态路由和选择性计算:只在需要时调用大模型,减少计算开销。
    • 小模型负责简单任务:有效减轻了大模型的负担,大大提升了推理速度。
  • 适用场景:适用于各种推理场景,尤其是可以区分复杂度的任务。

4. 量化(Quantization)

  • 原理:量化技术通过将模型的权重和激活从高精度(如 32-bit 浮点数)压缩为低精度(如 8-bit 整数),从而减少计算量和内存需求。
  • 优势
    • 减少内存占用:低精度表示减少了模型的内存占用,适合在内存资源有限的环境中运行。
    • 加速计算:低精度运算比高精度运算更快,特别是在现代硬件上。
  • 量化方法
    • Post-Training Quantization (PTQ):在模型训练后应用量化。
    • Quantization-Aware Training (QAT):在训练时考虑量化的影响,确保推理时性能更好。
  • 适用场景:适用于大部分推理任务,但可能会在精度上有一定损失。

5. KV 缓存(Key-Value 缓存)

  • 原理:在推理时,模型通常需要为每个生成的 token 重新计算所有之前生成的 token 的注意力权重。KV 缓存通过缓存之前的注意力计算结果(Key 和 Value),避免了重复计算,使得生成新 token 只需计算与当前 token 相关的注意力。
  • 优势
    • 减少重复计算:只需在每个新 token 生成时计算新部分的注意力,而不需要对整个序列重新计算。
    • 加速生成式模型推理:特别适合自回归生成任务,如 GPT 类模型的文本生成。
  • 适用场景:适用于自回归生成模型的推理加速。

6. 模型剪枝(Pruning)

  • 原理:通过移除模型中冗余或对推理结果贡献较小的权重或神经元,来减少模型的大小和计算量。
  • 剪枝方法
    • 非结构化剪枝:移除单个权重。
    • 结构化剪枝:移除整个神经元或注意力头等结构。
  • 优势
    • 模型变小,推理速度变快:剪枝后的模型更加紧凑,计算负担显著减少。
    • 灵活性高:可以根据实际需求剪枝,做到权衡速度与精度。
  • 适用场景:适用于有冗余的大模型,但剪枝后可能会影响精度。

7. 模型蒸馏(Knowledge Distillation)

  • 原理:通过将一个大型的“教师模型”训练出来的知识传递给一个小型的“学生模型”,使得学生模型能够在保持较高精度的同时拥有更小的参数量和更快的推理速度。
  • 优势
    • 小模型高效推理:学生模型显著小于教师模型,但仍能保持相对较高的性能。
    • 减少资源占用:小模型的内存、计算要求都大幅减少。
  • 适用场景:适用于需要在保持较高精度的同时减少模型大小的推理任务。

8. 分层推理(Layer Skipping / Early Exit)

  • 原理:模型可以在推理过程中动态选择退出层,或者根据输入复杂度跳过某些层。在输入较为简单时,提前结束推理,避免不必要的计算。
  • 优势
    • 动态调整计算量:根据输入内容,自动调整模型计算的深度,节省时间和计算资源。
    • 适应性强:对简单任务表现优异,而对于复杂任务仍然可以通过更多层计算确保性能。
  • 适用场景:适用于需要平衡速度和精度的任务,尤其是在推理过程中可以动态判断复杂度的应用。

9. Sparse Attention(稀疏注意力)

  • 原理:传统的 Transformer 模型计算全局注意力,复杂度为 O(n²)。稀疏注意力通过只对部分 token 之间进行注意力计算(例如邻近 token),而非全局 token 之间,从而减少计算复杂度。
  • 优势
    • 降低计算复杂度:将 O(n²) 降到 O(n log n) 或更低。
    • 加速推理:尤其适合长序列,能够减少对显存和计算资源的需求。
  • 适用场景:适用于长序列任务,尤其是在文本或语音等领域的超长输入处理中。

10. 混合精度(Mixed Precision)

  • 原理:通过使用半精度(FP16)和单精度(FP32)的混合运算,减少计算的复杂度和内存占用,特别是在 GPU 上,这可以加速推理。
  • 优势
    • 加速计算:混合精度比全精度计算速度快得多,尤其在硬件支持良好的情况下(如 NVIDIA 的 Tensor Cores)。
    • 节省内存:减少显存使用,特别是在处理大模型时可以避免显存溢出。
  • 适用场景:适用于所有支持混合精度推理的模型和硬件。

11. 并行化(Model Parallelism & Pipeline Parallelism)

  • 原理:将模型的计算过程分布到多个 GPU 或 TPU 上,进行并行计算。例如,模型并行将大模型的各部分分配给不同的设备;流水线并行则将不同的层次划分到不同设备上串行处理。
  • 优势
    • 支持超大模型:解决单个设备内存不够时无法推理大模型的问题。
    • 提高计算速度:通过并行化分担计算负担,实现加速。
  • 适用场景:适合超大规模模型(如 GPT-3、GPT-4)或需要分布式推理的任务。

总结

文本大模型推理加速的技术方案种类繁多,不同技术针对的瓶颈不同。以下是常见技术方案及其主要作用:

  • 计算复杂度优化

二、 batchsize为1时 page attention效果会怎样

batch size 为 1 时,使用 Page Attention 的效果会有一些特殊的表现。为了更好理解这种情况,我们可以从以下几个方面分析 Page Attention 的设计初衷、如何处理长文本,以及在 batch size 为 1 时的表现。

1. Page Attention 的作用

Page Attention 的主要目标是处理长序列输入时的计算效率问题,通过将注意力机制分为更小的“页面”或“窗口”,来避免全局的密集注意力计算。

  • 标准注意力机制的挑战:对于长输入,标准的全局注意力机制(如 Transformer 的全连接注意力)会带来计算和内存的瓶颈。标准的注意力需要计算所有 token 之间的关系,其复杂度是二次方级别的(O(n²)),当序列很长时,计算和存储这些注意力矩阵非常昂贵。
  • Page Attention 的优化:通过将长序列分割成较小的“页面”(window),Page Attention 可以让注意力机制只在每个页面内进行计算,而不是全局范围内计算。这种方法有效降低了计算复杂度(接近 O(n)),特别适合处理非常长的输入文本。

2. Batch Size 为 1 的情况

batch size 为 1 的情况下,模型只处理一条输入。这与多条输入同时处理(batch size > 1)时有一些不同,但核心在于 Page Attention 如何分割和处理单条长输入。

  • 输入长度的重要性:Page Attention 的效果很大程度上取决于输入序列的长度,而不是 batch size。即使 batch size 为 1,只要输入序列非常长,Page Attention 仍然会起作用。它会将这条单一的长序列分割成多个页面,分别进行注意力计算。这种分块计算的方式依然能够减少计算量并优化推理速度。

  • 页面划分与本地注意力:Page Attention 的本质是局部化注意力机制。例如,如果输入有 10,000 个 token,而 Page Attention 设置每个页面包含 1,024 个 token,模型会将这些 token 划分为多个页面(比如 10 个页面),然后分别对每个页面应用注意力。这意味着即便只有一个输入,模型也可以处理得更快,因为注意力计算只在每个页面内部进行。

3. 性能影响分析

  • 计算复杂度的降低:即使 batch size 为 1,Page Attention 的计算复杂度仍然大大低于全局注意力机制。因为它将注意力矩阵从全局的二次复杂度 O(n²) 降低到了局部的 O(w²),其中 w 是每个页面的大小。因此,对于非常长的输入序列,即便 batch size 为 1,使用 Page Attention 仍然能显著提升推理效率,尤其是在处理超长文本时。

  • 注意力窗口与全局信息:尽管 Page Attention 降低了计算成本,它也可能在一定程度上限制模型对全局信息的访问。每个页面只能看到本地的 token,而无法直接访问其他页面的 token。这在某些需要全局上下文的任务中可能会导致信息丢失。不过,很多变体设计了跨页面的机制来处理全局信息,比如全局 token 或者页面间交互机制,以补充这种限制。

4. 效果评估:Page Attention 在 batch size = 1 时的表现

  • 长序列推理提速:Page Attention 主要用于长序列推理加速,因此其效果不会因为 batch size 为 1 而减弱。只要输入序列足够长,Page Attention 就能够发挥其优化作用,将长序列分块处理,提高推理速度,减少计算开销。

  • 任务类型和输入长度的影响:如果输入序列长度较短(比如 500 个 token 以下),Page Attention 的效果可能不太明显,因为标准注意力机制可以轻松处理这种短序列输入。而对于更长的输入,Page Attention 依然能够有效加速。

总结:Page Attention 在 batch size 为 1 时的效果

  • 主要作用在长输入序列:无论 batch size 是 1 还是更大,Page Attention 的核心目标是优化长输入序列的处理。在 batch size 为 1 时,它仍然可以通过将单个长输入分成多个页面来显著减少计算复杂度。

  • 局部注意力提升效率:Page Attention 通过限制注意力计算在局部窗口内进行,大幅减少了计算开销。因此,即使只有一个样本,只要序列足够长,仍然可以提升推理速度。

  • 小输入场景:对于较短的输入(例如长度少于几个页面的输入),Page Attention 的效果不明显,因为注意力计算的开销在短序列中较低。

因此,在 batch size 为 1 时,Page Attention 仍然能够在长序列处理时显著加速推理,特别适合处理长文本的场景。

三、 medusa原理:小模型无法给出准确预测时 用大模型、但是大模型也是需要继承小模型之前的生成的token、这样会有提速吗

这是一个很好的问题。确实,如果推理过程中使用了小模型进行部分计算,那么当小模型无法给出准确预测时,切换到大模型继续推理似乎需要大模型继承小模型之前生成的 token 状态。这确实会带来一些复杂性,尤其是在提速方面。

关于提速的几点关键考虑

  1. 小模型的快速初步处理

    • 优势:小模型的引入并不是为了完全替代大模型,而是为了处理那些计算复杂度较低、能够快速得到预测结果的部分。例如,对于大多数相对简单的输入,小模型可能足以提供高质量的预测结果。
    • 提速场景:如果输入的内容比较简单或者不需要复杂的上下文关联,小模型能够完成整个推理过程,这种情况下确实能够实现显著的提速。
    • 触发大模型的频率:从实际推理来看,如果大多数情况都不需要调用大模型,整体推理速度会有显著提升,因为大部分推理都在小模型的快速路径中完成。
  2. 大模型继承小模型的状态

    • KV 缓存共享:在美杜莎架构或类似的分层模型中,**小模型生成的 token 状态(如注意力中的 Key-Value 缓存)**可以在大模型中重用。现代 Transformer 模型通常会缓存 Key 和 Value 来加速推理,大模型在继承小模型生成的 token 时,实际上可以直接从小模型的 Key-Value 缓存开始计算,从而避免重复计算。这是一个可以显著提速的机制。
      • 提速机制:如果大模型能够直接使用小模型计算的中间状态(如前面已经生成的 token 的注意力缓存),它只需对新的 token 进行计算,而不是从头处理整个输入序列。这种情况下,大模型的介入只是处理后续难题,而不是重复小模型已经完成的工作,仍然能保持较好的效率。
  3. 切换时的开销

    • 切换成本:确实,在从小模型切换到大模型时,可能会有一定的开销,特别是如果小模型与大模型的架构不同或参数规模有显著差异。不过如果两者共享一部分结构或者采用相同的注意力机制(例如,使用相同的 Key-Value 机制和注意力头),这种切换的开销会大大降低。
    • 同步机制:为避免计算瓶颈,系统可以设计为让小模型和大模型使用相似的机制,在推理切换时最小化状态转换的成本。如果系统中有类似缓存同步或中间状态共享的机制,切换的开销可以被极大削减。
  4. 混合推理的灵活性

    • 分段推理:在某些情况下,模型可以分段处理输入。例如,小模型可以处理大部分简单的 token,而大模型只对那些真正复杂的 token 进行进一步推理。这种分段机制有助于大模型仅在必要时介入,减少它的计算负担,从而加速推理。
    • 局部注意力计算:如果大模型接管推理,只对小模型的生成部分进行处理,它可以通过局部注意力的方式来处理上下文,减少需要计算的 token 数量。

实际提速的场景

提速的实际效果取决于模型在不同任务中的表现和系统的设计:

  1. 大多数输入由小模型解决:如果系统能够很好地识别哪些输入可以通过小模型快速解决,而不需要调用大模型,那么提速会非常显著。这在一些任务中是可行的,比如在很多自然语言处理任务中,部分输入可能不需要复杂的上下文关联。

  2. 大模型的适时介入:如果输入复杂且小模型无法给出足够的置信度,大模型介入的频率较高,这时提速效果会下降。然而,只要大模型能够重用小模型的中间状态,避免完全从头开始推理,仍然可以减少一部分计算量,保持一定的提速。

总结

  • 提速来源:主要来自于大部分简单任务由小模型快速完成,以及大模型只在必要时介入
  • 大模型介入的优化:当小模型无法处理时,大模型能够继承小模型生成的中间状态,特别是共享 Key-Value 缓存等机制,从而避免重复计算,依然能够提升效率。
  • 切换开销最小化:通过共享机制和缓存同步,减少从小模型到大模型切换时的计算负担,保证推理过程的整体高效性。

因此,尽管大模型需要继承小模型的生成 token,如果设计得当,推理加速仍然是可能的,特别是在大多数输入都可以通过小模型解决的情况下。

四、 DPO过拟合的解决办法

数据增强、正则化、早停、学习率调节、对抗训练

五、通过config计算大模型的参数量

以qwen2.5为例,参数量约5.9B、其中前馈层 3.8B、注意力层1.4B

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

要根据这份配置文件计算 Transformer 模型的参数量,我们可以从以下几个部分来逐步计算各个组成部分的参数:

  1. 嵌入层(Embedding Layer)

    • 词嵌入(Word Embeddings):这是用于将输入的词 ID 映射到对应的向量。
      • 参数量 = vocab_size * hidden_size
      • 根据配置:vocab_size = 152064hidden_size = 3584
      • 词嵌入层的参数量:
        [
        152064 \times 3584 = 544,193,536
        ]
  2. 位置嵌入(Position Embeddings)

    • 位置嵌入负责给输入序列中的每个位置分配一个向量。
    • 参数量 = max_position_embeddings * hidden_size
    • 根据配置:max_position_embeddings = 32768hidden_size = 3584
    • 位置嵌入的参数量:
      [
      32768 \times 3584 = 117,440,512
      ]
  3. 注意力层(Self-Attention Layers)

    • 每一层的注意力参数主要包括 Query、Key、Value 和输出投影矩阵。
    • 对于每层,注意力的参数量:
      • Query、Key、Value 的投影矩阵:这三者的形状都是 hidden_size * hidden_size,且每个都有 3 套矩阵:
        [
        3 \times (3584 \times 3584) = 38,579,456
        ]
      • 输出投影矩阵(Output Projection):将头的拼接结果投影回原始隐藏维度:
        [
        3584 \times 3584 = 12,852,736
        ]
      • 每层注意力总的参数量为:
        [
        38,579,456 + 12,852,736 = 51,432,192
        ]
    • 总注意力层参数量(num_hidden_layers = 28):
      [
      28 \times 51,432,192 = 1,440,101,376
      ]
  4. 前馈层(Feed-Forward Layers)

    • 每一层的前馈网络由两个全连接层组成,参数量为:
      • 第一层的权重矩阵:hidden_size * intermediate_size
        [
        3584 \times 18944 = 67,866,112
        ]
      • 第二层的权重矩阵:intermediate_size * hidden_size
        [
        18944 \times 3584 = 67,866,112
        ]
      • 前馈网络总的参数量为:
        [
        67,866,112 + 67,866,112 = 135,732,224
        ]
    • 总前馈层参数量(num_hidden_layers = 28):
      [
      28 \times 135,732,224 = 3,800,501,632
      ]
  5. 层归一化(Layer Normalization)

    • 每层都有两个归一化参数(均值和方差),每个维度的参数量为 hidden_size
      [
      3584 \times 2 = 7,168
      ]
    • 每层 LayerNorm 的参数量为 7,168,总参数量为:
      [
      28 \times 7,168 = 200,704
      ]

模型的总参数量

总参数量是各部分的参数量之和:

[
\text{总参数量} = \text{词嵌入参数量} + \text{位置嵌入参数量} + \text{注意力层参数量} + \text{前馈层参数量} + \text{LayerNorm参数量}
]

代入各部分的数值:

[
\text{总参数量} = 544,193,536 + 117,440,512 + 1,440,101,376 + 3,800,501,632 + 200,704
]

计算得到:

[
\text{总参数量} = 5,902,437,760 \ (\approx 5.9 \text{B parameters})
]

因此,该模型大约有 59 亿个参数(约 5.9B)。

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

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

相关文章

云黑系统全解无后门 +搭建教程

这套系统呢是玖逸之前南逸写的一套云黑系统,功能带有卡密生成和添加黑名单等,源码放在我的网盘里已经两年之久,由于玖逸现在已经跑路了所以现在发出来分享给大家,需要的可以自己拿去而开,反正功能也不是很多具体的自己…

免费字体二次贩卖;刮刮乐模拟器;小报童 | 生活周刊 #4

Raycast 的两款在线工具 Raycast 公司出品,必属精品,之前的代码转图片工具,交互和颜值都做得很漂亮 现在又新出了一个 图标制作器,一键制作美观好看的图标 猫啃网 没想到像【汇文明朝体】这样免费的字体都被人拿来当成【打字机字…

C# WinForm 用名字name字符串查找子控件

工作上遇到界面控件太多,需要对一些控件批量处理。虽然可以用代码批量控制,但要么是建立数组集合把所有要处理的控件放进去循环处理,要么是一个一个列出来修改属性。 但我大多数要求改的控件命名上是有规律的,所有只需要循环拼接字…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中,我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如,我们介绍了以下案例: Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

卸载 Git

目录 打开 Geek找到 Git右键卸载 Git卸载完成等待扫描注册表点击完成清除Git在本地的配置文件 打开 Geek 找到 Git 右键卸载 Git 卸载完成 等待扫描注册表 点击完成 已经删除完毕 清除Git在本地的配置文件 进入 C:\Users\用户名 删除框起来的配置文件 👇 源码资料…

【移动安全】OWASP MASTG 移动应用程序安全测试指南

OWASP 是 Open Web Application Security Project MASTG 是 Mobile Application Security Testing Guide 移动应用程序安全测试指南 英文网站:https://mas.owasp.org/MASTG/ 中文网站:http://www.owasp.org.cn/OWASP-CHINA/owasp-project/owasp-mobile-…

Docker本地镜像发布到Docker Registry私有仓库

1. 私有仓库 私有库可以部署在本地或私有云环境中,我们可以控制镜像的访问权限。相比公共仓库,私有库提供了更高的安全性和更快的访问速度。此外,私有库还支持自定义,你可以根据自己的需求来配置仓库。 私有仓库解决方案 Harbo…

递归神经网络解释(RNN)

Recurrent Neural Network (RNN) 如今,不同的机器学习技术用于处理不同类型的数据。最难处理和预测的数据类型之一是顺序数据。顺序数据与其他类型的数据不同,因为虽然可以假设典型数据集的所有特征都是与顺序无关的,但不能假设顺序数据集是无关的。为了处理这种类型的数据…

018_基于python+django荣誉证书管理系统2024_jytq9489

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

【服务器部署】Docker部署小程序

一、下载Docker 安装之前,一定查看是否安装docker,如果有,卸载老版本 我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核3.8以上&#xff0c…

如何修改网络ip地址:一步步指南‌

在当今这个数字化时代,网络已成为我们日常生活与工作中不可或缺的一部分。无论是浏览网页、在线办公还是享受流媒体服务,稳定的网络连接和适当的IP地址管理都是确保良好体验的关键。然而,出于隐私保护、绕过地理限制或测试网络环境等需要&…

ssm基于java的招聘系统设计与开发+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 1 第2章 开发环境与技术 3 2.1 Java语言…

Java | Leetcode Java题解之第495题提莫攻击

题目&#xff1a; 题解&#xff1a; class Solution {public int findPoisonedDuration(int[] timeSeries, int duration) {int ans 0;int expired 0;for (int i 0; i < timeSeries.length; i) {if (timeSeries[i] > expired) {ans duration;} else {ans timeSerie…

2011年国赛高教杯数学建模B题交巡警服务平台的设置与调度解题全过程文档及程序

2011年国赛高教杯数学建模 B题 交巡警服务平台的设置与调度 有困难找警察”&#xff0c;是家喻户晓的一句流行语。警察肩负着刑事执法、治安管理、交通管理、服务群众四大职能。为了更有效地贯彻实施这些职能&#xff0c;需要在市区的一些交通要道和重要部位设置交巡警服务平台…

【PFGA】二选一数选器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 verilog FPGA 实验 一、实验原理 二、实验过程 三、实验结果 代码 module mux21(input s,input a,input b,output reg y); always(s or a or b) beginif (~s) beginy<a;end else beginy<…

触想工业一体机赋能BMS楼宇管理,让建筑活起来

一、行业发展背景 城市化进程的飞速发展&#xff0c;持续刷新着人们对于现代建筑在舒适度、节能安全、自动化方面的期待。在此趋势下&#xff0c;诸如暖通空调、用电照明、门禁消防等建筑配套子系统不断扩充完善&#xff0c;建筑物从简单的物理结构膨胀为庞大的楼宇生态系统&am…

go jwt 用户登录和返回用户信息 token ----important!!!

1.每一行代码都有详细注释&#xff0c;解释了其功能和作用。这些注释可以帮助你理解代码如何工作&#xff0c;特别是在处理用户登录、生成 JWT、验证 JWT 和返回用户信息的过程中。 package main // 指定这个文件是一个可执行程序import ("fmt" …

深度学习面经总结

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【动态规划 数学归纳法 二项式定理】C++ 算法458:可怜的小猪

作者推荐 视频算法专题 本文涉及知识点 数学归纳法 二项式定理 动态规划汇总 数学 力扣458:可怜的小猪 有 buckets 桶液体&#xff0c;其中 正好有一桶 含有毒药&#xff0c;其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药&#xff0c;你可以喂一些…

linux线程 | 全面理解同步与互斥 | 同步

前言&#xff1a;本节内容主要讲解linux下的同步问题。 同步问题是保证数据安全的情况下&#xff0c;让我们的线程访问具有一定的顺序性。 线程安全就规定了它必须是在加锁的场景下的&#xff01;&#xff01;那么&#xff0c; 具体什么是同步问题&#xff0c; 我们加下来看看吧…