WeNet:面向生产的流式和非流式端到端语音识别工具包

这篇文章介绍了WeNet,一个面向生产的开源端到端(E2E)语音识别工具包。WeNet的主要特点和贡献如下:

  1. 统一流式和非流式识别:提出了一种名为U2的两阶段框架,能够在单一模型中同时支持流式和非流式语音识别,解决了传统E2E模型难以同时支持这两种模式的问题。

  2. 模型架构:采用混合的连接主义时间分类(CTC)/注意力(AED)架构,使用Transformer或Conformer作为编码器,并通过动态块训练技术实现流式和非流式的统一。

  3. 生产就绪:WeNet的设计完全基于PyTorch及其生态系统,支持从模型训练到部署的无缝衔接,无需依赖Kaldi等其他工具,简化了安装和使用。

  4. 运行时优化:支持多种运行时平台(如x86服务器和ARM嵌入式设备),并通过量化技术显著提升了推理速度和效率。

  5. 实验验证:在AISHELL-1数据集和15,000小时的中文数据集上进行了广泛实验,验证了WeNet在流式和非流式模式下的性能,展示了其在实际应用中的潜力。

  6. 未来工作:WeNet已经支持自定义语言模型和基于gRPC的语音识别微服务框架,未来将继续更新更多功能。

WeNet通过统一流式和非流式识别、简化部署流程、优化运行时性能,提供了一个高效、轻量级的E2E语音识别解决方案,适用于从研究到生产的多种应用场景。这里是自己的论文阅读记录,感兴趣的话可以参考一下,如果需要阅读原文的话可以看这里,如下所示:

摘要

本文提出了一种名为WeNet的开源语音识别工具包,其中实现了一种名为U2的新两阶段方法,用于在单一模型中统一流式和非流式端到端(E2E)语音识别。WeNet的主要动机是缩小E2E语音识别模型在研究和部署之间的差距。WeNet提供了一种在实际场景中高效部署自动语音识别(ASR)应用的方法,这是其与其他开源E2E语音识别工具包的主要区别和优势。我们开发了一种混合的连接主义时间分类(CTC)/注意力架构,使用Transformer或Conformer作为编码器,并使用注意力解码器对CTC假设进行重评分。为了在统一模型中实现流式和非流式识别,我们采用了一种基于动态块的注意力策略,允许自注意力机制在随机长度的上下文中聚焦。我们在AISHELL-1数据集上的实验表明,与标准的非流式Transformer相比,我们的模型在非流式ASR中实现了5.03%的相对字符错误率(CER)降低。经过模型量化后,我们的模型在运行时具有合理的实时因子(RTF)和延迟。

官方开源项目地址在这里,如下所示:

1 引言

端到端(E2E)自动语音识别(ASR)模型在过去几年中获得了越来越多的关注,例如连接主义时间分类(CTC)[1, 2]、循环神经网络转录器(RNN-T)[3, 4, 5, 6]和基于注意力的编码器-解码器(AED)[7, 8, 9, 10, 11]。与传统的混合ASR框架相比,E2E模型的最大优势是其极其简化的训练过程。

最近的研究[12, 13, 14]也表明,E2E系统在标准词错误率(WER)上已经超越了传统的混合ASR系统。考虑到E2E模型的上述优势,将新兴的ASR框架部署到实际生产中变得非常必要。然而,部署E2E系统并不容易,有许多实际问题需要解决。

首先,流式问题。流式推理对于许多需要ASR系统快速响应且低延迟的场景至关重要。然而,某些E2E模型(如LAS[8]和Transformer[15])难以以流式方式运行。要么需要大量努力,要么会引入明显的准确性损失才能使这些模型以流式方式工作[16, 17, 18]。

其次,统一流式和非流式模式。流式和非流式系统通常是分开开发的。在单一模型中统一流式和非流式可以减少开发工作量、训练成本以及部署成本,这也是生产应用所偏好的[19, 20, 21, 22]。

第三,生产问题,这是我们在WeNet设计过程中最关心的问题。将E2E模型推广到实际生产应用需要大量努力。因此,我们必须仔细设计推理工作流程,包括模型架构、应用和运行时平台。由于自回归束搜索解码的工作方式,大多数E2E模型架构的工作流程极其复杂。此外,在边缘设备上部署模型时,还应考虑计算和内存成本。至于运行时平台,尽管有多种平台可以用于神经网络推理,如ONNX(Open Neural Network Exchange)、LibTorch in Pytorch、TensorRT[23]、OpenVINO、MNN[24]和NCNN,但仍需要语音处理和高级深度学习优化知识来为特定应用选择最佳平台。

在本工作中,我们提出了WeNet来解决上述问题。“We”在WeNet中受到“WeChat”的启发,意味着连接和共享,而“Net”则来自Espnet[25],因为我们参考了Espnet中的许多优秀设计。Espnet是最流行的开源端到端语音研究平台。它主要关注端到端ASR,并采用广泛使用的动态神经网络工具包Chainer和PyTorch作为主要的深度学习引擎。相比之下,WeNet的主要动机是缩小E2E语音识别模型在研究和生产之间的差距。基于面向生产的原则,WeNet采用了以下实现。首先,我们提出了一种新的两阶段框架,即U2,以解决统一流式和非流式问题。其次,从模型训练到部署,WeNet仅依赖于PyTorch及其生态系统。WeNet的关键优势如下:

  • 生产优先且生产就绪:WeNet的Python代码符合TorchScript的要求,因此通过Torch Just In Time(JIT)可以直接导出训练好的模型,并使用LibTorch进行推理。研究和生产模型之间没有差距。

  • 流式和非流式ASR的统一解决方案:WeNet采用U2框架,实现了一个准确、快速且统一的E2E模型,有利于工业应用。

  • 便携式运行时:提供了多个运行时,展示了如何在不同平台上托管WeNet训练的模型,包括服务器(x86)和嵌入式(Android平台上的ARM)。

  • 轻量级:WeNet专门为E2E语音识别设计,代码简洁明了,完全基于PyTorch及其生态系统。因此,它不依赖于Kaldi[26],简化了安装和使用。

我们的实验表明,WeNet是一个易于学习的语音识别工具包,提供从研究到生产的端到端解决方案。本文将描述模型架构、系统设计和运行时基准,包括实时因子(RTF)和延迟。

2 WeNet

模型架构

由于我们的目标是解决流式、统一和生产问题,解决方案应简单易构建,便于在运行时应用,同时保持良好的性能。

U2,一种统一的两阶段联合CTC/AED模型,为这些问题提供了一个很好的解决方案。如图1所示,U2由三部分组成:共享编码器、CTC解码器和注意力解码器。共享编码器由多个Transformer[15]或Conformer[27]层组成,仅考虑有限的右侧上下文以保持平衡的延迟。CTC解码器由一个线性层组成,将共享编码器的输出转换为CTC激活,而注意力解码器由多个Transformer解码器层组成。在解码过程中,CTC解码器在第一阶段以流式模式运行,注意力解码器在第二阶段用于提供更准确的结果。

2.1.1 训练

U2的训练结合了CTC损失和AED损失:

如前所述,当共享编码器不需要完整话语信息时,U2可以在流式模式下工作。我们采用动态块训练技术来统一非流式和流式模型。首先,输入通过固定的块大小C分割成多个块,每个块关注自身和所有先前的块,因此第一阶段的CTC解码器的整体延迟仅取决于块大小。当块大小受限时,模型以流式方式工作;否则,它以非流式方式工作。其次,块大小在训练中从1动态变化到当前训练话语的最大长度,因此训练好的模型学会以任意块大小进行预测。经验表明,较大的块大小会带来更好的结果,但延迟更高,因此我们可以在运行时通过调整块大小轻松平衡准确性和延迟。

2.1.2 解码

为了在研究阶段的Python解码过程中比较和评估联合CTC/AED模型的不同部分,WeNet支持四种解码模式:

  • attention:对模型的AED部分应用标准的自回归束搜索。

  • ctc_greedy_search:对模型的CTC部分应用CTC贪心搜索,CTC贪心搜索比其他模式快得多。

  • ctc_prefix_beam_search:对模型的CTC部分应用CTC前缀束搜索,可以给出n-best候选。

  • attention_rescoring:首先对模型的CTC部分应用CTC前缀束搜索以生成n-best候选,然后使用相应的编码器输出在AED解码器部分对n-best候选进行重评分。

在开发运行时阶段,WeNet仅支持attention_rescoring解码模式,因为这是我们生产中的最终解决方案。

系统设计

WeNet的整体设计栈如图2所示。注意,底层栈完全基于PyTorch及其生态系统。中间栈由两部分组成。当我们开发研究模型时,使用TorchScript进行模型开发,使用Torchaudio进行实时特征提取,使用分布式数据并行(DDP)进行分布式训练,使用Torch Just In Time(JIT)进行模型导出,使用PyTorch量化进行模型量化,并使用LibTorch进行生产运行时。LibTorch生产用于托管生产模型,设计用于支持各种硬件和平台,如CPU、GPU(CUDA)、Linux、Android和iOS。顶层栈展示了WeNet中典型的从研究到生产的流程。以下小节将详细介绍这些模块的设计。

2.2.1 数据准备

在数据准备阶段不需要任何离线特征提取,因为我们使用实时特征提取进行训练。WeNet只需要Kaldi格式的转录、波形列表文件和模型单元字典来创建输入文件。

2.2.2 训练

WeNet的训练阶段具有以下关键特性:

  • 实时特征提取:基于Torchaudio,可以生成与Kaldi相同的Mel滤波器组特征。由于特征是从原始PCM数据实时提取的,我们可以在时间和频率级别对原始PCM进行数据增强,最后在特征级别进行增强,从而丰富数据的多样性。

  • 联合CTC/AED训练:联合训练加快了训练的收敛速度,提高了训练的稳定性,并给出了更好的识别结果。

  • 分布式训练:WeNet支持使用PyTorch中的分布式数据并行(DDP)进行多GPU训练,以充分利用多工作者的多GPU资源,实现更高的线性加速。

2.2.3 解码

提供了一组Python工具,用于识别波形文件并在不同解码模式下计算准确性。这些工具帮助用户在部署模型之前验证和调试模型。支持第2.1.2节中的所有解码算法。

2.2.4 导出

由于WeNet模型是使用TorchScript实现的,因此可以通过Torch JIT直接导出到生产环境中。然后,导出的模型可以使用LibTorch库在运行时托管,同时支持float-32模型和量化int-8模型。在嵌入式设备(如基于ARM的Android和iOS平台)上使用量化模型可以提高推理速度,甚至提高一倍以上。

2.2.5 运行时

目前,我们支持在两个主流平台上托管WeNet生产模型,即x86作为服务器运行时和Android作为设备运行时。为两个平台提供了C++ API库和可运行的演示,用户还可以使用C++库实现自定义系统。我们仔细评估了ASR系统的三个关键指标,即准确性、实时因子(RTF)和延迟。第3.2节中报告的结果将表明,WeNet适用于许多ASR应用,包括服务API和设备语音助手。

3 实验

我们在开源的中文普通话语音语料库AISHELL-1[28]上进行了实验,该语料库包含150小时的训练集、10小时的开发集和5小时的测试集。测试集总共包含7,176个话语。对于声学特征,通过Torchaudio实时计算80维对数Mel滤波器组(FBANK),窗口大小为25ms,步长为10ms。此外,应用了SpecAugment[29],使用最大频率掩码(F=10)的2个频率掩码和最大时间掩码(T=50)的2个时间掩码来缓解过拟合。在编码器前使用了两个卷积子采样层,核大小为3*3,步长为2。对于模型参数,我们使用12个Transformer层作为编码器,6个Transformer层作为解码器。使用Adam优化器,学习率计划为25,000个预热步骤。此外,我们通过平均训练期间在开发集上具有较低损失的前K个最佳模型来获得最终模型。

统一模型评估

我们首先评估了一个非流式模型(M1)作为基线,该模型通过全注意力进行训练和推理,另一个统一模型(M2)采用动态块策略。M2在解码时使用不同的块大小(full/16/8/4)进行推理,其中full表示全注意力非流式情况,16/8/4表示流式情况。

如表1所示,统一模型不仅在全注意力情况下与非流式模型显示出可比的结果,而且在流式情况下使用有限的块大小16/8/4也给出了有希望的结果,验证了动态块训练策略的有效性。

比较四种不同的解码模式,attention_rescoring模式在非流式模式和统一模式下始终能提高CTC结果。ctc_greedy_search和ctc_prefix_beam_search的性能几乎相同,并且随着块大小的减小,它们的性能显著下降。attention_rescoring模式缓解了ctc_prefix_beam_search结果的性能下降,而attention模式则略微降低了性能。

由于attention模式是自回归过程,而attention_rescoring模式不是,因此attention_rescoring模式更快且具有更好的RTF。总体而言,attention_rescoring模式不仅显示出有希望的结果,而且具有更低的RTF。因此,基于动态块的统一模型与attention_rescoring解码是我们生产中的选择。因此,运行时仅支持attention_rescoring模式。

运行时基准

本节将展示上述统一模型M2的量化、RTF和延迟基准。我们在服务器x86平台和设备ARM Android平台上分别完成了基准测试。

对于云x86平台,CPU为4核Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz,总内存为16G。仅使用一个线程进行CPU线程和TorchScript推理,因为云服务需要并行处理,单线程避免了并行处理中的性能下降。对于设备Android,CPU为4核高通骁龙865,内存为8G,单线程用于设备推理。

3.2.1 量化

这里我们仅比较量化前后的CER。如表2所示,量化前后的CER相当。表2中的CER结果与表1中的结果略有不同,因为表1中的结果是通过Python研究工具评估的,而表2中的结果是通过运行时工具评估的。

3.2.2 RTF

如表3所示,随着块大小的减小,RTF增加,因为较小的块需要更多的前向计算迭代。此外,量化可以在设备(Android)上带来约2倍的加速,在服务器(x86)上略有改善。

3.2.3 延迟

对于延迟基准,我们创建了一个WebSocket服务器/客户端来模拟真实的流式应用,因为此基准仅在服务器x86平台上进行。我们评估的平均延迟如下:

  • 模型延迟(L1):由模型结构引入的等待时间。对于我们的基于块的解码,平均等待时间理论上为块大小的一半。我们模型的总模型延迟为(chunk/2∗4+6)∗10(ms),其中4是子采样率,6是编码器前两个CNN层引入的lookahead,10是帧移。

  • 重评分成本(L2):第二阶段注意力重评分的时间成本。

  • 最终延迟(L3):用户(客户端)感知的延迟,即用户停止说话与获得识别结果之间的时间差。当我们的ASR服务器接收到语音结束信号时,它首先对剩余语音进行CTC搜索,然后进行第二阶段的注意力重评分,因此重评分成本是最终延迟的一部分。网络延迟也应考虑在内,但由于我们在同一台机器上测试服务器/客户端,因此可以忽略不计。

如表4所示,不同块大小的重评分成本几乎相同,这是合理的,因为重评分计算与块大小无关。此外,最终延迟主要由重评分成本决定,这意味着我们可以通过减少重评分成本进一步减少最终延迟。最后,随着解码块从4变为8,从8变为16,最终延迟略有增加。

15,000小时任务

我们进一步使用从各种领域(包括脱口秀、电视剧、播客和广播)收集的15,000小时中文数据集训练提出的U2模型,以展示我们模型在工业规模数据集上的能力。该模型在三个测试集上进行评估。

我们使用Conformer[27]作为共享编码器,解码器与之前的实验相同,是一个Transformer。Conformer在Transformer的基础上增加了卷积模块,因此它可以捕捉局部和全局上下文,并在不同的ASR任务中获得更好的结果。特别地,因果卷积用于Conformer的块训练,我们添加了额外的3维音高特征,与80维FBANK连接。我们保持了之前实验中编码器的主要结构,仅将Transformer层更改为12个Conformer层,具有多头注意力(4个头)。每个Conformer层使用384个注意力维度和2048个前馈维度。此外,我们还使用了梯度累积来稳定训练,并每4步更新一次参数。此外,我们通过平均训练期间在评估集上具有较低损失的前10个最佳模型来获得最终模型。我们使用动态块训练训练了一个全上下文的Conformer CTC模型和一个U2模型。使用三个测试集评估这些模型,包括AISHELL-1、电视剧领域和对话领域。U2模型在attention_rescoring解码模式下工作,而Conformer模型在attention解码模式下工作。如表5所示,我们可以看到U2在总体上取得了与Conformer基线相当的结果,甚至在AISHELL-1测试集上使用全注意力进行推理时取得了更好的结果。当块大小为16时,CER并没有明显变差。

为了分析为什么U2模型在AISHELL-1任务上表现更好,我们收集了每个测试集中的平均话语时长,如表5所示。由于AISHELL-1中的平均话语时长比其他两个测试集长得多,AISHELL-1任务可能需要更强的全局信息建模能力。U2模型可以使用注意力解码器对CTC假设进行重评分,这使得它更适合AISHELL-1任务。

4 结论

我们提出了一种新的开源面向生产的E2E语音识别工具包,名为WeNet,提供了一个统一的流式和非流式应用解决方案。本文介绍了工具包背后的模型结构、系统设计和基准测试。整个工具包设计精良、轻量级,并在开放数据集和内部大型数据集上展示了出色的性能。WeNet已经在运行时支持自定义语言模型,采用了n-gram和WFST。此外,WeNet还支持基于gRPC的语音识别微服务框架应用。未来将更新更多功能。

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

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

相关文章

从单点 Redis 到 1 主 2 从 3 哨兵的架构演进之路

一、前言 我们有个项目中用的 MySQL、Redis、ES、微服务都是单节点部署的,没有做集群模式部署,为了提高整体的可用性,对项目的部署架构进行了升级,支持高可用。 二、部署拓扑图 我们项目的测试环境 12 台服务器已经部署好了&am…

机器学习经典算法——线性回归

目录 算法介绍 一元线性回归模型 多元线性回归模型 ​误差项分析 相关系数 算法案例 一元线性回归预测——广告销售额案例 二元线性回归预测——血压收缩案例 多元线性回归预测——糖尿病案例 算法介绍 线性回归是利用数理统计中回归分析,来确定两种或两种…

Nacos服务注册和发现

文章目录 Nacos服务注册和发现1. Nacos服务注册1.1 引入依赖1.2 配置Nacos1.3 重启服务1.4 Nacos后台 2. Nacos服务发现2.1 引入依赖2.2 配置Nacos2.3 服务发现 Nacos服务注册和发现 1. Nacos服务注册 服务提供者将服务注册到nacos注册中心 引入依赖配置Nacos地址重启 1.1 …

从企业级 RAG 到 AI Assistant,阿里云 Elasticsearch AI 搜索技术实践

在过去一年中,基座大模型技术的快速迭代推动了 AI 搜索的演进,主要体现在以下几个方面: 1.搜索技术链路重构 基于大模型的全面重构正在重塑 AI 搜索的技术链路。从数据采集、文档解析、向量检索到查询分析、意图识别、排序模型和知识图谱等…

BootstrapTable处理表格

需求背景 历史项目使用 BootstrapTable 作为前端组件 应客户需要调整&#xff1a; 冻结前四列对于大文本文字显示部分内容&#xff0c;鼠标悬浮显示完整内容 冻结列 1、引入相关CSS,JS CSS <link rel"stylesheet" href"/css/bootstrap.min.css"> …

《Vue3实战教程》35:Vue3测试

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 测试​ 为什么需要测试​ 自动化测试能够预防无意引入的 bug&#xff0c;并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一…

【算法】模拟退火算法学习记录

写这篇博客的原因是博主本人在看某篇文章的时候&#xff0c;发现自己只是知道SGD这个东西&#xff0c;但是到底是个啥不清楚&#xff0c;所以百度了一下&#xff0c;然后在通过博客学习的时候看到了退火两个字&#xff0c;想到了本科做数模比赛的时候涉猎过&#xff0c;就上bil…

【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算

【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算 一、简介 在MATLAB中计算Sobol二阶效应指数通常涉及到全局敏感性分析&#xff08;Global Sensitivity Analysis, GSA&#xff09;&#xff0c;其中Sobol方法是一种流行的技术&#xff0c;用于评估模型输入…

android studio android sdk下载地址

android studio安装后&#xff0c;因为公司网络原因&#xff0c;一直无法安装android sdk 后经过手机网络&#xff0c;安装android sdk成功如下&#xff0c;也可以手动下载后指定android sdk本地目录 https://dl.google.com/android/repository/source-35_r01.zip https://dl…

“AI人工智能软件开发公司:创新技术,引领未来

大家好&#xff01;今天我们来聊聊一个充满未来感的话题——AI人工智能软件开发公司。这个公司&#xff0c;用大白话说&#xff0c;就是专门研究和开发人工智能软件的地方&#xff0c;它们用最新的技术帮我们解决问题&#xff0c;让生活和工作变得更智能、更便捷。听起来是不是…

ACL的注意事项

ACL只对数据进行抓取和匹配&#xff0c;ACl本身不对数据做拒绝和允许的操作&#xff0c;只有在接口方向上应用后才对数据进行拒绝或允许的操作。 ACl只在packetfilter包过滤时默认动作是允许&#xff0c;这个时候至少需要有一条deny规则&#xff0c;否则全都是允许的规则&…

gitlab 还原合并请求

事情是这样的&#xff1a; 菜鸡从 test 分支切了个名为 pref-art 的分支出来&#xff0c;发布后一机灵&#xff0c;发现错了&#xff0c;于是在本地用 git branch -d pref-art 将该分支删掉了。之后切到了 prod 分支&#xff0c;再切出了一个相同名称的 pref-art 分支出来&…

webserver的http实现

1、用了状态机&#xff0c;为什么要用状态机&#xff1f; 在逻辑处理模块中&#xff0c;响应的http请求采用主从状态机完成&#xff0c; 传统的控制流程都是按照顺序执行的&#xff0c;状态机能够处理任意顺序的事件&#xff0c;并能提供有意义的响应--即使这些事件发生的顺序和…

C语言面的向对象编程(OOP)

如果使用过C、C#、Java语言&#xff0c;一定知道面向对象编程&#xff0c;这些语言对面向对象编程的支持是语言级别的。C语言在语言级别不支持面向对象&#xff0c;那可以实现面向对象吗&#xff1f;其实面向对象是一种思想&#xff0c;而不是一种语言&#xff0c;很多初学者很…

Qt监控系统放大招/历经十几年迭代完善/多屏幕辅屏预览/多层级设备树/网络登录和回放

一、前言说明 近期对视频监控系统做了比较大的更新升级&#xff0c;主要就是三点&#xff0c;第一点就是增加了辅屏预览&#xff0c;这个也是好多个客户需要的功能&#xff0c;海康的iVMS-4200客户端就有这个功能&#xff0c;方便在多个屏幕打开不同的视频进行查看&#xff0c…

基于feapder爬虫与flask前后端框架的天气数据可视化大屏

# 最近又到期末了&#xff0c;有需要的同学可以借鉴。 一、feapder爬虫 feapder是国产开发的新型爬虫框架&#xff0c;具有轻量且数据库操作方便、异常提醒等优秀特性。本次设计看来利用feapder进行爬虫操作&#xff0c;可以加快爬虫的速率&#xff0c;并且简化数据入库等操作…

数据挖掘——模型的评价

数据挖掘——模型的评价 模型的评价混淆矩阵ROC曲线如何构建ROC曲线 模型过分拟合和拟合不足减少泛化误差 模型的评价 混淆矩阵 准确率 a d a b c d \frac{ad}{abcd} abcdad​ T P T N T P T N F P F N \frac{TPTN}{TPTNFPFN} TPTNFPFNTPTN​ 其他度量&#xff1a; …

庐山派K230学习日记1 从点灯到吃灰

1 简介​ 庐山派以K230为主控芯片&#xff0c;支持三路摄像头同时输入&#xff0c;典型网络下的推理能力可达K210的13.7倍&#xff08;算力约为6TOPS&#xff09;。支持CanMV&#xff0c;可作为AI与边缘计算平台 K230简介 K230芯片集成了两颗RISC-V处理器核心&#xff0c;双核…

活动预告 |【Part2】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识

课程介绍 通过参加“Microsoft 安全在线技术公开课&#xff1a;安全性、合规性和身份基础知识”活动提升你的技能。在本次免费的介绍性活动中&#xff0c;你将获得所需的安全技能和培训&#xff0c;以创造影响力并利用机会推动职业发展。你将了解安全性、合规性和身份的基础知…

【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】

文章目录 PCIe Message 与 MSIPCIe Message 和 MSI 的作用与关系MSI 的配置与寄存器MSI 和 ARM GIC 的关系示例&#xff1a;MSI 在 ARM GIC 的实际应用总结 PCIe Message 与 MSI 本文将介绍 PCIe message 的作用以及message 与 MSI 的关系&#xff0c;再介绍 MSI 如何配置以及…